From 606068739c25ce4fe1181a3f9dbbb8b707f14962 Mon Sep 17 00:00:00 2001 From: qinlong0101 Date: Tue, 9 Aug 2022 15:19:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E5=B8=83=E5=BC=8F=E5=B1=8F=E5=B9=95re?= =?UTF-8?q?viewbot=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: qinlong0101 --- .../dscreenmgr/include/dscreen_manager.h | 2 + .../dscreenmgr/src/dscreen_manager.cpp | 93 ++++++++++++------- 2 files changed, 59 insertions(+), 36 deletions(-) diff --git a/services/screenservice/sourceservice/dscreenmgr/include/dscreen_manager.h b/services/screenservice/sourceservice/dscreenmgr/include/dscreen_manager.h index 11eeb995..0e58de3c 100644 --- a/services/screenservice/sourceservice/dscreenmgr/include/dscreen_manager.h +++ b/services/screenservice/sourceservice/dscreenmgr/include/dscreen_manager.h @@ -59,6 +59,8 @@ public: void RegisterDScreenCallback(const sptr &callback); void HandleScreenChange(const std::shared_ptr &changedScreen, Rosen::ScreenGroupChangeEvent event); std::shared_ptr FindDScreenByScreenId(uint64_t screenId); + void AddToGroup(const std::shared_ptr &changedScreen, uint64_t screenId); + void RemoveFromGroup(const std::shared_ptr &changedScreen, uint64_t screenId); void GetScreenDumpInfo(std::string &result); void PublishMessage(const DHTopic topic, const std::shared_ptr &dScreen); private: diff --git a/services/screenservice/sourceservice/dscreenmgr/src/dscreen_manager.cpp b/services/screenservice/sourceservice/dscreenmgr/src/dscreen_manager.cpp index 9a7c47de..c3bef1ab 100644 --- a/services/screenservice/sourceservice/dscreenmgr/src/dscreen_manager.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/src/dscreen_manager.cpp @@ -124,45 +124,11 @@ void DScreenManager::HandleScreenChange(const std::shared_ptr &changedS uint64_t screenId = changedScreen->GetScreenId(); DHLOGI("DScreenManager::HandleScreenChange, screenId: %ulld, changeEvent: %", screenId, event); if (event == Rosen::ScreenGroupChangeEvent::ADD_TO_GROUP) { - if (changedScreen->GetState() == CONNECTING) { - DHLOGD("screen is connecting, no need handle change"); - return; - } - std::shared_ptr mapRelation = - ScreenMgrAdapter::GetInstance().GetMapRelation(screenId); - if (!mapRelation) { - DHLOGE("mapRelation construct failed. screenId: %ulld", screenId); - return; - } - - std::shared_ptr videoParam = changedScreen->GetVideoParam(); - DisplayRect displayRect = mapRelation->GetDisplayRect(); - videoParam->SetVideoWidth(displayRect.width); - videoParam->SetVideoHeight(displayRect.height); - changedScreen->SetState(CONNECTING); - - { - std::lock_guard lock(dScreenMapRelationMtx_); - mapRelations_[screenId] = mapRelation; - } + AddToGroup(changedScreen, screenId); NotifyRemoteSinkSetUp(changedScreen); PublishMessage(DHTopic::TOPIC_START_DSCREEN, changedScreen); } else if (event == Rosen::ScreenGroupChangeEvent::REMOVE_FROM_GROUP) { - if (changedScreen->GetState() == DISCONNECTING) { - DHLOGD("screen is disconnecting, no need handle change"); - return; - } - std::shared_ptr mapRelation = nullptr; - { - std::lock_guard lock(dScreenMapRelationMtx_); - if (mapRelations_.count(screenId) == 0) { - DHLOGE("destroyed relation not found."); - return; - } - mapRelation = mapRelations_[screenId]; - mapRelations_.erase(screenId); - } - changedScreen->AddTask(std::make_shared(TaskType::TASK_DISCONNECT, "")); + RemoveFromGroup(changedScreen, screenId); PublishMessage(DHTopic::TOPIC_STOP_DSCREEN, changedScreen); } else if (event == Rosen::ScreenGroupChangeEvent::CHANGE_GROUP) { DHLOGE("CHANGE_GROUP not implement."); @@ -171,6 +137,61 @@ void DScreenManager::HandleScreenChange(const std::shared_ptr &changedS } } +void DScreenManager::AddToGroup(const std::shared_ptr &changedScreen, uint64_t screenId) +{ + DHLOGI("DScreenManager::ADDToGroup, screenId: %ulld", screenId); + if (!changedScreen) { + DHLOGE("DScreenManager::ADDToGroup, dScreen is null."); + return; + } + + if (changedScreen->GetState() == CONNECTING) { + DHLOGD("screen is connecting, no need handle change"); + return; + } + std::shared_ptr mapRelation = ScreenMgrAdapter::GetInstance().GetMapRelation(screenId); + if (!mapRelation) { + DHLOGE("mapRelation construct failed. screenId: %ulld", screenId); + return; + } + + std::shared_ptr videoParam = changedScreen->GetVideoParam(); + DisplayRect displayRect = mapRelation->GetDisplayRect(); + videoParam->SetVideoWidth(displayRect.width); + videoParam->SetVideoHeight(displayRect.height); + changedScreen->SetState(CONNECTING); + + { + std::lock_guard lock(dScreenMapRelationMtx_); + mapRelations_[screenId] = mapRelation; + } +} + +void DScreenManager::RemoveFromGroup(const std::shared_ptr &changedScreen, uint64_t screenId) +{ + DHLOGI("DScreenManager::RemoveFromGroup, screenId: %ulld", screenId); + if (!changedScreen) { + DHLOGE("DScreenManager::RemoveFromGroup, dScreen is null."); + return; + } + + if (changedScreen->GetState() == DISCONNECTING) { + DHLOGD("screen is disconnecting, no need handle change"); + return; + } + std::shared_ptr mapRelation = nullptr; + { + std::lock_guard lock(dScreenMapRelationMtx_); + if (mapRelations_.count(screenId) == 0) { + DHLOGE("destroyed relation not found."); + return; + } + mapRelation = mapRelations_[screenId]; + mapRelations_.erase(screenId); + } + changedScreen->AddTask(std::make_shared(TaskType::TASK_DISCONNECT, "")); +} + void DScreenCallback::OnRegResult(const std::shared_ptr &dScreen, const std::string &reqId, int32_t status, const std::string &data) { -- Gitee