1.cache default Rs screenId in dms

2.add displaymanageripc_fuzzer
3.fix screenInfo name empty bug

Signed-off-by: xiaojianfeng <xiaojianfeng3@huawei.com>
Change-Id: I51af875b708e6b372e738c0950adb6eab2c40340
This commit is contained in:
xiaojianfeng
2022-05-12 16:57:04 +08:00
parent 925dec8b56
commit de509ebe11
6 changed files with 19 additions and 30 deletions
+1
View File
@@ -16,6 +16,7 @@ group("fuzztest") {
deps = [
"displaymanager_fuzzer:fuzztest",
"displaymanageripc_fuzzer:fuzztest",
"screen_fuzzer:fuzztest",
"screenmanager_fuzzer:fuzztest",
]
@@ -75,10 +75,7 @@ bool ScreenPowerFuzzTest(const uint8_t *data, size_t size)
static_cast<PowerStateChangeReason>(startPos));
auto allScreen = screenManager.GetAllScreens();
for (auto screen: allScreen) {
ScreenPowerState powerState = screenManager.GetScreenPower(screen->GetId());
if (static_cast<ScreenPowerState>(screenPowerState) != powerState) {
std::cout << "powerState and screenPowerState are not equal." << std::endl;
}
screenManager.GetScreenPower(screen->GetId());
}
screenManager.UnregisterScreenGroupListener(screenGroupListener);
@@ -110,12 +107,6 @@ bool MakeMirrorWithVirtualScreenFuzzTest(const uint8_t *data, size_t size)
return false;
}
screenManager.SetVirtualScreenSurface(screenId, nullptr);
std::vector<sptr<Screen>> screens = screenManager.GetAllScreens();
for (auto screen : screens) {
if (screen->GetId() != screenId) {
std::cout << "screenId is not in screens." << std::endl;
}
}
// make mirror
ScreenId groupId = screenManager.MakeMirror(0, { screenId });
@@ -129,9 +120,6 @@ bool MakeMirrorWithVirtualScreenFuzzTest(const uint8_t *data, size_t size)
return false;
}
std::vector<ScreenId> ids = group->GetChildIds();
if (std::find(ids.begin(), ids.end(), screenId) == ids.end()) {
std::cout << "screenId is not in group children." << std::endl;
}
screenManager.RemoveVirtualScreenFromGroup(ids);
screenManager.DestroyVirtualScreen(screenId);
screenManager.UnregisterScreenGroupListener(screenGroupListener);
@@ -163,12 +151,6 @@ bool MakeExpandWithVirtualScreenFuzzTest(const uint8_t *data, size_t size)
return false;
}
screenManager.SetVirtualScreenSurface(screenId, nullptr);
std::vector<sptr<Screen>> screens = screenManager.GetAllScreens();
for (auto screen : screens) {
if (screen->GetId() != screenId) {
std::cout << "screenId is not in screens." << std::endl;
}
}
// make expand
std::vector<ExpandOption> options = {{0, 0, 0}, {screenId, 0, 0}};
ScreenId groupId = screenManager.MakeExpand(options);
@@ -182,9 +164,6 @@ bool MakeExpandWithVirtualScreenFuzzTest(const uint8_t *data, size_t size)
return false;
}
std::vector<ScreenId> ids = group->GetChildIds();
if (std::find(ids.begin(), ids.end(), screenId) == ids.end()) {
std::cout << "screenId is not in group children." << std::endl;
}
screenManager.RemoveVirtualScreenFromGroup(ids);
screenManager.DestroyVirtualScreen(screenId);
screenManager.UnregisterScreenGroupListener(screenGroupListener);
@@ -137,6 +137,7 @@ private:
std::map<sptr<IRemoteObject>, std::vector<ScreenId>> screenAgentMap_;
sptr<AbstractScreenCallback> abstractScreenCallback_;
std::shared_ptr<AppExecFwk::EventHandler> controllerHandler_;
std::atomic<ScreenId> defaultRsScreenId_ {SCREEN_ID_INVALID };
};
} // namespace OHOS::Rosen
#endif // FOUNDATION_DMSERVER_ABSTRACT_SCREEN_CONTROLLER_H
+1
View File
@@ -194,6 +194,7 @@ void AbstractScreen::FillScreenInfo(sptr<ScreenInfo> info) const
return;
}
info->id_ = dmsId_;
info->name_ = name_;
uint32_t width = 0;
uint32_t height = 0;
sptr<SupportedScreenModes> abstractScreenModes = GetActiveScreenMode();
+14 -7
View File
@@ -182,20 +182,22 @@ sptr<AbstractScreenGroup> AbstractScreenController::GetAbstractScreenGroup(Scree
ScreenId AbstractScreenController::GetDefaultAbstractScreenId()
{
std::lock_guard<std::recursive_mutex> lock(mutex_);
ScreenId rsDefaultId = rsInterface_.GetDefaultScreenId();
if (rsDefaultId == SCREEN_ID_INVALID) {
if (defaultRsScreenId_ == SCREEN_ID_INVALID) {
defaultRsScreenId_ = rsInterface_.GetDefaultScreenId();
}
if (defaultRsScreenId_ == SCREEN_ID_INVALID) {
WLOGFW("GetDefaultAbstractScreenId, rsDefaultId is invalid.");
return SCREEN_ID_INVALID;
}
std::lock_guard<std::recursive_mutex> lock(mutex_);
ScreenId defaultDmsScreenId;
if (screenIdManager_.ConvertToDmsScreenId(rsDefaultId, defaultDmsScreenId)) {
if (screenIdManager_.ConvertToDmsScreenId(defaultRsScreenId_, defaultDmsScreenId)) {
WLOGI("GetDefaultAbstractScreenId, screen:%{public}" PRIu64"", defaultDmsScreenId);
return defaultDmsScreenId;
}
WLOGFI("GetDefaultAbstractScreenId, default screen is null, try to get.");
ProcessScreenConnected(rsDefaultId);
return screenIdManager_.ConvertToDmsScreenId(rsDefaultId);
ProcessScreenConnected(defaultRsScreenId_);
return screenIdManager_.ConvertToDmsScreenId(defaultRsScreenId_);
}
ScreenId AbstractScreenController::ConvertToRsScreenId(ScreenId dmsScreenId) const
@@ -220,12 +222,14 @@ void AbstractScreenController::OnRsScreenConnectionChange(ScreenId rsScreenId, S
{
WLOGFI("rs screen event. id:%{public}" PRIu64", event:%{public}u", rsScreenId, static_cast<uint32_t>(screenEvent));
if (screenEvent == ScreenEvent::CONNECTED) {
ProcessScreenConnected(rsScreenId);
auto task = [this, rsScreenId] {
ProcessScreenConnected(rsScreenId);
};
controllerHandler_->PostTask(task, AppExecFwk::EventQueue::Priority::HIGH);
} else if (screenEvent == ScreenEvent::DISCONNECTED) {
if (rsScreenId == defaultRsScreenId_) {
defaultRsScreenId_ = SCREEN_ID_INVALID;
}
auto task = [this, rsScreenId] {
ProcessScreenDisconnected(rsScreenId);
};
@@ -1195,6 +1199,9 @@ bool AbstractScreenController::SetScreenPowerForAll(ScreenPowerState state, Powe
bool hasSetScreenPower = false;
for (auto screenId : screenIds) {
auto screen = GetAbstractScreen(screenId);
if (screen == nullptr) {
continue;
}
if (screen->type_ != ScreenType::REAL) {
WLOGD("skip virtual screen %{public}" PRIu64"", screen->dmsId_);
continue;
+1 -1
View File
@@ -36,7 +36,7 @@ public:
virtual bool Marshalling(Parcel& parcel) const override;
static ScreenInfo* Unmarshalling(Parcel& parcel);
DEFINE_VAR_FUNC_GET(std::string, Name, name);
DEFINE_VAR_DEFAULT_FUNC_GET(std::string, Name, name, "");
DEFINE_VAR_DEFAULT_FUNC_GET(ScreenId, ScreenId, id, SCREEN_ID_INVALID);
DEFINE_VAR_DEFAULT_FUNC_GET(uint32_t, VirtualWidth, virtualWidth, 0);
DEFINE_VAR_DEFAULT_FUNC_GET(uint32_t, VirtualHeight, virtualHeight, 0);