From 6c368a26a88bb9dd9eda14b36e259e469a87b465 Mon Sep 17 00:00:00 2001 From: yangli <1220629463@qq.com> Date: Tue, 2 Jan 2024 11:24:17 +0800 Subject: [PATCH 1/3] 0102 Signed-off-by: yangli <1220629463@qq.com> --- .../native_cpp/screen_source/BUILD.gn | 4 +++ .../include/dscreen_source_handler.h | 2 +- .../src/dscreen_source_handler.cpp | 25 +++++++++++++++++++ screenhandler/src/dscreen_handler.cpp | 12 +++++++-- 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/interfaces/innerkits/native_cpp/screen_source/BUILD.gn b/interfaces/innerkits/native_cpp/screen_source/BUILD.gn index 0b5ecb74..90fe89a4 100644 --- a/interfaces/innerkits/native_cpp/screen_source/BUILD.gn +++ b/interfaces/innerkits/native_cpp/screen_source/BUILD.gn @@ -52,9 +52,13 @@ ohos_shared_library("distributed_screen_source_sdk") { external_deps = [ "c_utils:utils", + "graphic_2d:libcomposer", + "graphic_2d:librender_service_client", + "graphic_2d:surface", "hitrace:hitrace_meter", "ipc:ipc_core", "samgr:samgr_proxy", + "window_manager:libdm", ] subsystem_name = "distributedhardware" diff --git a/interfaces/innerkits/native_cpp/screen_source/include/dscreen_source_handler.h b/interfaces/innerkits/native_cpp/screen_source/include/dscreen_source_handler.h index 6f13791a..3f8322d7 100644 --- a/interfaces/innerkits/native_cpp/screen_source/include/dscreen_source_handler.h +++ b/interfaces/innerkits/native_cpp/screen_source/include/dscreen_source_handler.h @@ -52,7 +52,7 @@ private: DScreenSourceHandler(); ~DScreenSourceHandler() = default; - + void DeleteExistDScreens(); std::mutex proxyMutex_; std::condition_variable proxyConVar_; sptr dScreenSourceProxy_ = nullptr; diff --git a/interfaces/innerkits/native_cpp/screen_source/src/dscreen_source_handler.cpp b/interfaces/innerkits/native_cpp/screen_source/src/dscreen_source_handler.cpp index 4b14d84d..cc62dcd9 100644 --- a/interfaces/innerkits/native_cpp/screen_source/src/dscreen_source_handler.cpp +++ b/interfaces/innerkits/native_cpp/screen_source/src/dscreen_source_handler.cpp @@ -34,6 +34,7 @@ #include "dscreen_log.h" #include "dscreen_source_load_callback.h" #include "dscreen_util.h" +#include "screen_manager.h" namespace OHOS { namespace DistributedHardware { @@ -137,9 +138,33 @@ int32_t DScreenSourceHandler::ReleaseSource() return ret; } +void DScreenSourceHandler::DeleteExistDScreens() +{ + std::vector> screens; + Rosen::ScreenManager::GetInstance().GetAllScreens(screens); + DHLOGI("screens size is: %" PRId32, screens.size()); + for (const auto &screen : screens) { + if (screen == nullptr) { + DHLOGE("screen is nullptr."); + continue; + } + std::string screenName = screen->GetName(); + DHLOGI("DeleteExistDScreens, screenName:%s", screenName.c_str()); + if (screenName.find(DSCREEN_PREFIX) != std::string::npos) + { + DHLOGI("DestroyVirtualScreen"); + Rosen::DMError err = Rosen::ScreenManager::GetInstance().DestroyVirtualScreen(screen->GetId()); + if (err != Rosen::DMError::DM_OK) { + DHLOGE("remove virtual screen failed, screenId:%" PRIu64, screen->GetId()); + } + } + } +} + int32_t DScreenSourceHandler::RegisterDistributedHardware(const std::string &devId, const std::string &dhId, const EnableParam ¶m, std::shared_ptr callback) { + DeleteExistDScreens(); if (devId.empty() || dhId.empty()) { DHLOGE("device id or dh id empty."); return ERR_DH_SCREEN_STRING_PARAM_EMPTY; diff --git a/screenhandler/src/dscreen_handler.cpp b/screenhandler/src/dscreen_handler.cpp index d127e6f0..41838f1d 100644 --- a/screenhandler/src/dscreen_handler.cpp +++ b/screenhandler/src/dscreen_handler.cpp @@ -82,7 +82,11 @@ void ScreenListener::OnConnect(uint64_t screenId) DHLOGE("screen not found, screenId is: %" PRIu64, screenId); return; } - + if (!screen->IsReal()) + { + DHLOGI("screen is not real"); + return; + } std::string dhId = DSCREEN_PREFIX + SEPERATOR + std::to_string(screenId); uint32_t screenWidth = screen->GetWidth(); @@ -138,7 +142,11 @@ std::vector DScreenHandler::Query() if (screen->GetWidth() <= 0) { continue; } - std::string dhId = SCREEN_PREFIX + SEPERATOR + std::to_string(screen->GetId()); + if (!screen->IsReal()) + { + continue; + } + std::string dhId = DSCREEN_PREFIX + SEPERATOR + std::to_string(screen->GetId()); uint32_t screenWidth = screen->GetWidth(); if (screenListener_ == nullptr) { screenListener_ = new (std::nothrow) ScreenListener(); -- Gitee From ea4ce25aac1e88ded19ce13903a53503114d71a1 Mon Sep 17 00:00:00 2001 From: yangli <1220629463@qq.com> Date: Tue, 2 Jan 2024 18:57:16 +0800 Subject: [PATCH 2/3] 0102 Signed-off-by: yangli <1220629463@qq.com> --- .../screen_source/src/dscreen_source_handler.cpp | 3 +-- screenhandler/src/dscreen_handler.cpp | 8 +++----- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/interfaces/innerkits/native_cpp/screen_source/src/dscreen_source_handler.cpp b/interfaces/innerkits/native_cpp/screen_source/src/dscreen_source_handler.cpp index cc62dcd9..e67f70a7 100644 --- a/interfaces/innerkits/native_cpp/screen_source/src/dscreen_source_handler.cpp +++ b/interfaces/innerkits/native_cpp/screen_source/src/dscreen_source_handler.cpp @@ -150,8 +150,7 @@ void DScreenSourceHandler::DeleteExistDScreens() } std::string screenName = screen->GetName(); DHLOGI("DeleteExistDScreens, screenName:%s", screenName.c_str()); - if (screenName.find(DSCREEN_PREFIX) != std::string::npos) - { + if (screenName.find(DSCREEN_PREFIX) != std::string::npos) { DHLOGI("DestroyVirtualScreen"); Rosen::DMError err = Rosen::ScreenManager::GetInstance().DestroyVirtualScreen(screen->GetId()); if (err != Rosen::DMError::DM_OK) { diff --git a/screenhandler/src/dscreen_handler.cpp b/screenhandler/src/dscreen_handler.cpp index 41838f1d..85203f34 100644 --- a/screenhandler/src/dscreen_handler.cpp +++ b/screenhandler/src/dscreen_handler.cpp @@ -82,11 +82,10 @@ void ScreenListener::OnConnect(uint64_t screenId) DHLOGE("screen not found, screenId is: %" PRIu64, screenId); return; } - if (!screen->IsReal()) - { + if (!screen->IsReal()) { DHLOGI("screen is not real"); return; - } + } std::string dhId = DSCREEN_PREFIX + SEPERATOR + std::to_string(screenId); uint32_t screenWidth = screen->GetWidth(); @@ -142,8 +141,7 @@ std::vector DScreenHandler::Query() if (screen->GetWidth() <= 0) { continue; } - if (!screen->IsReal()) - { + if (!screen->IsReal()) { continue; } std::string dhId = DSCREEN_PREFIX + SEPERATOR + std::to_string(screen->GetId()); -- Gitee From e1853d72e60b87da07d76fe6be646cbe913b57b7 Mon Sep 17 00:00:00 2001 From: yangli <1220629463@qq.com> Date: Tue, 2 Jan 2024 18:59:55 +0800 Subject: [PATCH 3/3] 0102 Signed-off-by: yangli <1220629463@qq.com> --- .../native_cpp/screen_source/src/dscreen_source_handler.cpp | 2 +- screenhandler/src/dscreen_handler.cpp | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/interfaces/innerkits/native_cpp/screen_source/src/dscreen_source_handler.cpp b/interfaces/innerkits/native_cpp/screen_source/src/dscreen_source_handler.cpp index e67f70a7..0bc3a0ce 100644 --- a/interfaces/innerkits/native_cpp/screen_source/src/dscreen_source_handler.cpp +++ b/interfaces/innerkits/native_cpp/screen_source/src/dscreen_source_handler.cpp @@ -156,7 +156,7 @@ void DScreenSourceHandler::DeleteExistDScreens() if (err != Rosen::DMError::DM_OK) { DHLOGE("remove virtual screen failed, screenId:%" PRIu64, screen->GetId()); } - } + } } } diff --git a/screenhandler/src/dscreen_handler.cpp b/screenhandler/src/dscreen_handler.cpp index 85203f34..8a2b00a3 100644 --- a/screenhandler/src/dscreen_handler.cpp +++ b/screenhandler/src/dscreen_handler.cpp @@ -87,7 +87,6 @@ void ScreenListener::OnConnect(uint64_t screenId) return; } std::string dhId = DSCREEN_PREFIX + SEPERATOR + std::to_string(screenId); - uint32_t screenWidth = screen->GetWidth(); screenWidth = ByteCalculate(screenWidth); DHLOGI("screenWidth is : %" PRIu32, screenWidth); -- Gitee