From de509ebe111ec8db82c9e704b362ea102a31fff2 Mon Sep 17 00:00:00 2001 From: xiaojianfeng Date: Thu, 12 May 2022 16:57:04 +0800 Subject: [PATCH] 1.cache default Rs screenId in dms 2.add displaymanageripc_fuzzer 3.fix screenInfo name empty bug Signed-off-by: xiaojianfeng Change-Id: I51af875b708e6b372e738c0950adb6eab2c40340 --- dm/test/fuzztest/BUILD.gn | 1 + .../screenmanager_fuzzer.cpp | 23 +------------------ dmserver/include/abstract_screen_controller.h | 1 + dmserver/src/abstract_screen.cpp | 1 + dmserver/src/abstract_screen_controller.cpp | 21 +++++++++++------ utils/include/screen_info.h | 2 +- 6 files changed, 19 insertions(+), 30 deletions(-) diff --git a/dm/test/fuzztest/BUILD.gn b/dm/test/fuzztest/BUILD.gn index 071f08a1..c6cb5663 100644 --- a/dm/test/fuzztest/BUILD.gn +++ b/dm/test/fuzztest/BUILD.gn @@ -16,6 +16,7 @@ group("fuzztest") { deps = [ "displaymanager_fuzzer:fuzztest", + "displaymanageripc_fuzzer:fuzztest", "screen_fuzzer:fuzztest", "screenmanager_fuzzer:fuzztest", ] diff --git a/dm/test/fuzztest/screenmanager_fuzzer/screenmanager_fuzzer.cpp b/dm/test/fuzztest/screenmanager_fuzzer/screenmanager_fuzzer.cpp index 924b59bc..737d74e7 100644 --- a/dm/test/fuzztest/screenmanager_fuzzer/screenmanager_fuzzer.cpp +++ b/dm/test/fuzztest/screenmanager_fuzzer/screenmanager_fuzzer.cpp @@ -75,10 +75,7 @@ bool ScreenPowerFuzzTest(const uint8_t *data, size_t size) static_cast(startPos)); auto allScreen = screenManager.GetAllScreens(); for (auto screen: allScreen) { - ScreenPowerState powerState = screenManager.GetScreenPower(screen->GetId()); - if (static_cast(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> 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 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> screens = screenManager.GetAllScreens(); - for (auto screen : screens) { - if (screen->GetId() != screenId) { - std::cout << "screenId is not in screens." << std::endl; - } - } // make expand std::vector 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 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); diff --git a/dmserver/include/abstract_screen_controller.h b/dmserver/include/abstract_screen_controller.h index e538e0dc..f69b3315 100644 --- a/dmserver/include/abstract_screen_controller.h +++ b/dmserver/include/abstract_screen_controller.h @@ -137,6 +137,7 @@ private: std::map, std::vector> screenAgentMap_; sptr abstractScreenCallback_; std::shared_ptr controllerHandler_; + std::atomic defaultRsScreenId_ {SCREEN_ID_INVALID }; }; } // namespace OHOS::Rosen #endif // FOUNDATION_DMSERVER_ABSTRACT_SCREEN_CONTROLLER_H \ No newline at end of file diff --git a/dmserver/src/abstract_screen.cpp b/dmserver/src/abstract_screen.cpp index 92ce791e..d3b0e3db 100644 --- a/dmserver/src/abstract_screen.cpp +++ b/dmserver/src/abstract_screen.cpp @@ -194,6 +194,7 @@ void AbstractScreen::FillScreenInfo(sptr info) const return; } info->id_ = dmsId_; + info->name_ = name_; uint32_t width = 0; uint32_t height = 0; sptr abstractScreenModes = GetActiveScreenMode(); diff --git a/dmserver/src/abstract_screen_controller.cpp b/dmserver/src/abstract_screen_controller.cpp index 72daa833..7d252d41 100644 --- a/dmserver/src/abstract_screen_controller.cpp +++ b/dmserver/src/abstract_screen_controller.cpp @@ -182,20 +182,22 @@ sptr AbstractScreenController::GetAbstractScreenGroup(Scree ScreenId AbstractScreenController::GetDefaultAbstractScreenId() { - std::lock_guard 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 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(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; diff --git a/utils/include/screen_info.h b/utils/include/screen_info.h index e0eedcd2..3fdda6a8 100644 --- a/utils/include/screen_info.h +++ b/utils/include/screen_info.h @@ -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);