From f13b44e1e0e62bae1c77ad558c4818a7e60415b1 Mon Sep 17 00:00:00 2001 From: gwx1132623 Date: Fri, 8 Apr 2022 10:56:37 +0800 Subject: [PATCH 1/2] remove exist virltual screen Signed-off-by: gwx1132623 --- .../dscreenmgr/include/screen_manager_adapter.h | 2 ++ .../dscreenmgr/src/screen_manager_adapter.cpp | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/services/screenservice/sourceservice/dscreenmgr/include/screen_manager_adapter.h b/services/screenservice/sourceservice/dscreenmgr/include/screen_manager_adapter.h index 836c4edd..da25606f 100644 --- a/services/screenservice/sourceservice/dscreenmgr/include/screen_manager_adapter.h +++ b/services/screenservice/sourceservice/dscreenmgr/include/screen_manager_adapter.h @@ -16,6 +16,7 @@ #ifndef OHOS_SCREEN_MGR_ADAPTER_H #define OHOS_SCREEN_MGR_ADAPTER_H +#include #include #include "single_instance.h" @@ -44,6 +45,7 @@ private: ~ScreenMgrAdapter(); bool listenerRegistered = false; + std::map screenIdMap_; }; } // namespace DistributedHardware } // namespace OHOS diff --git a/services/screenservice/sourceservice/dscreenmgr/src/screen_manager_adapter.cpp b/services/screenservice/sourceservice/dscreenmgr/src/screen_manager_adapter.cpp index 4f0850bf..e008b6d4 100644 --- a/services/screenservice/sourceservice/dscreenmgr/src/screen_manager_adapter.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/src/screen_manager_adapter.cpp @@ -39,6 +39,17 @@ uint64_t ScreenMgrAdapter::CreateVirtualScreen(const std::string &devId, const s DHLOGI("CreateVirtualScreen, width: %u, height: %u", videoParam->GetScreenWidth(), videoParam->GetScreenHeight()); std::string screenName = DSCREEN_PREFIX + SEPERATOR + devId + SEPERATOR + dhId; + auto iter = screenIdMap_.find(screenName); + if (iter != screenIdMap_.end()) { + DHLOGI("remove an exist virtual screen."); + Rosen::DMError err = Rosen::ScreenManager::GetInstance().DestroyVirtualScreen(iter->second); + if (err != Rosen::DMError::DM_OK) { + DHLOGE("remove virtual screen failed, screenId:%ulld", iter->second); + return SCREEN_ID_INVALID; + } + screenIdMap_.erase(screenName); + } + Rosen::VirtualScreenOption option = { screenName, videoParam->GetScreenWidth(), @@ -50,6 +61,7 @@ uint64_t ScreenMgrAdapter::CreateVirtualScreen(const std::string &devId, const s }; uint64_t screenId = Rosen::ScreenManager::GetInstance().CreateVirtualScreen(option); + screenIdMap_.emplace(screenName, screenId); return screenId; } -- Gitee From 2a5b4c0722697954a323ff6a140096ff1636d55c Mon Sep 17 00:00:00 2001 From: gwx1132623 Date: Tue, 12 Apr 2022 17:20:00 +0800 Subject: [PATCH 2/2] add clear screenIdMap Signed-off-by: gwx1132623 --- .../sourceservice/dscreenmgr/src/screen_manager_adapter.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/services/screenservice/sourceservice/dscreenmgr/src/screen_manager_adapter.cpp b/services/screenservice/sourceservice/dscreenmgr/src/screen_manager_adapter.cpp index e008b6d4..6e6cb06a 100644 --- a/services/screenservice/sourceservice/dscreenmgr/src/screen_manager_adapter.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/src/screen_manager_adapter.cpp @@ -30,6 +30,7 @@ namespace DistributedHardware { IMPLEMENT_SINGLE_INSTANCE(ScreenMgrAdapter); ScreenMgrAdapter::~ScreenMgrAdapter() { + screenIdMap_.clear(); DHLOGI("~ScreenMgrAdapter"); } -- Gitee