diff --git a/services/sink/sinkmanager/include/distributed_input_sink_manager.h b/services/sink/sinkmanager/include/distributed_input_sink_manager.h index 95958575d3ace9229ce729d9280e27df251aa07f..ac7a6cd59fa3f8f08b685a4dce47bc6d1e6ef6fd 100644 --- a/services/sink/sinkmanager/include/distributed_input_sink_manager.h +++ b/services/sink/sinkmanager/include/distributed_input_sink_manager.h @@ -170,7 +170,6 @@ public: void ClearResourcesStatus(); private: - void CleanExceptionalInfo(const SrcScreenInfo &srcScreenInfo); void CallBackScreenInfoChange(); private: diff --git a/services/sink/sinkmanager/src/distributed_input_sink_manager.cpp b/services/sink/sinkmanager/src/distributed_input_sink_manager.cpp index a5d949c035eb7800464b0f3e4b6f963dc7a26c94..96854477d39902b86f9655df1ef0e0cfdb4049b3 100644 --- a/services/sink/sinkmanager/src/distributed_input_sink_manager.cpp +++ b/services/sink/sinkmanager/src/distributed_input_sink_manager.cpp @@ -965,7 +965,7 @@ int32_t DistributedInputSinkManager::NotifyStartDScreen(const SrcScreenInfo &src { DHLOGI("NotifyStartDScreen start!"); - CleanExceptionalInfo(srcScreenInfo); + DInputContext::GetInstance().CleanExceptionalInfo(srcScreenInfo); std::string screenInfoKey = DInputContext::GetInstance().GetScreenInfoKey(srcScreenInfo.devId, srcScreenInfo.sourceWinId); @@ -1005,22 +1005,6 @@ void DistributedInputSinkManager::CallBackScreenInfoChange() } } -void DistributedInputSinkManager::CleanExceptionalInfo(const SrcScreenInfo &srcScreenInfo) -{ - DHLOGI("CleanExceptionalInfo start!"); - std::string uuid = srcScreenInfo.uuid; - int32_t sessionId = srcScreenInfo.sessionId; - std::unordered_map sinkInfos = DInputContext::GetInstance().GetAllSinkScreenInfo(); - - for (const auto &[id, sinkInfo] : sinkInfos) { - auto srcInfo = sinkInfo.srcScreenInfo; - if ((std::strcmp(srcInfo.uuid.c_str(), uuid.c_str()) == 0) && (srcInfo.sessionId != sessionId)) { - DInputContext::GetInstance().RemoveSinkScreenInfo(id); - DHLOGI("CleanExceptionalInfo screenInfoKey: %{public}s, sessionId: %{public}d", id.c_str(), sessionId); - } - } -} - int32_t DistributedInputSinkManager::NotifyStopDScreen(const std::string &srcScreenInfoKey) { DHLOGI("NotifyStopDScreen start, srcScreenInfoKey: %{public}s", GetAnonyString(srcScreenInfoKey).c_str()); diff --git a/utils/include/dinput_context.h b/utils/include/dinput_context.h index 7e102943544181f94f96a6bbdc294ecd301423b8..610b3a39ebaffad181d00b502de193365fe81c51 100644 --- a/utils/include/dinput_context.h +++ b/utils/include/dinput_context.h @@ -62,7 +62,7 @@ public: int32_t RemoveSrcScreenInfo(const std::string &screenInfoKey); int32_t UpdateSrcScreenInfo(const std::string &screenInfoKey, const SrcScreenInfo &srcScreenInfo); SrcScreenInfo GetSrcScreenInfo(const std::string &screenInfoKey); - + void CleanExceptionalInfo(const SrcScreenInfo &srcScreenInfo); void SetLocalTouchScreenInfo(const LocalTouchScreenInfo &localTouchScreenInfo); LocalTouchScreenInfo GetLocalTouchScreenInfo(); std::shared_ptr GetDHFwkKit(); diff --git a/utils/src/dinput_context.cpp b/utils/src/dinput_context.cpp index d1e4d7bc892216bc64ff54b44c5062cc012358be..6a9c5e193597c250c8007590a00e173f0395fa66 100644 --- a/utils/src/dinput_context.cpp +++ b/utils/src/dinput_context.cpp @@ -84,6 +84,21 @@ SinkScreenInfo DInputContext::GetSinkScreenInfo(const std::string &screenInfoKey return sinkScreenInfoMap_[screenInfoKey]; } +void DInputContext::CleanExceptionalInfo(const SrcScreenInfo &srcScreenInfo) +{ + DHLOGI("CleanExceptionalInfo start!"); + std::string uuid = srcScreenInfo.uuid; + int32_t sessionId = srcScreenInfo.sessionId; + std::lock_guard lock(sinkMapMutex_); + for (const auto &[id, sinkInfo] : sinkScreenInfoMap_) { + auto srcInfo = sinkInfo.srcScreenInfo; + if ((std::strcmp(srcInfo.uuid.c_str(), uuid.c_str()) == 0) && (srcInfo.sessionId != sessionId)) { + sinkScreenInfoMap_.erase(id); + DHLOGI("CleanExceptionalInfo screenInfoKey: %{public}s, sessionId: %{public}d", id.c_str(), sessionId); + } + } +} + const std::unordered_map &DInputContext::GetAllSinkScreenInfo() { std::lock_guard lock(sinkMapMutex_); diff --git a/utils/test/unittest/dinput_context_test.cpp b/utils/test/unittest/dinput_context_test.cpp index fef6b9a9ab82fd5acb49b7f8334095e607791fbe..4f4206364837da6f89180e42b2596800fdb7e1c4 100644 --- a/utils/test/unittest/dinput_context_test.cpp +++ b/utils/test/unittest/dinput_context_test.cpp @@ -86,6 +86,33 @@ HWTEST_F(DInputContextTest, GetSinkScreenInfo001, testing::ext::TestSize.Level1) DInputContext::GetInstance().RemoveSinkScreenInfo(sourceWinId); } +HWTEST_F(DInputContextTest, CleanExceptionalInfo001, testing::ext::TestSize.Level1) +{ + SrcScreenInfo srcScreenInfo; + srcScreenInfo.uuid = "uuid1"; + srcScreenInfo.sessionId = 1; + EXPECT_TRUE(DInputContext::GetInstance().sinkScreenInfoMap_.empty()); + DInputContext::GetInstance().CleanExceptionalInfo(srcScreenInfo); +} + +HWTEST_F(DInputContextTest, CleanExceptionalInfo002, testing::ext::TestSize.Level1) +{ + std::string sourceWinId = "hello"; + SrcScreenInfo srcScreenInfo; + srcScreenInfo.uuid = "uuid1"; + srcScreenInfo.sessionId = 1; + + SinkScreenInfo sinkInfo; + sinkInfo.srcScreenInfo.uuid = "uuid1"; + sinkInfo.srcScreenInfo.sessionId = 1; + + DInputContext::GetInstance().sinkScreenInfoMap_[sourceWinId] = sinkInfo; + EXPECT_EQ(DInputContext::GetInstance().sinkScreenInfoMap_.size(), 1); + DInputContext::GetInstance().CleanExceptionalInfo(srcScreenInfo); + + DInputContext::GetInstance().RemoveSinkScreenInfo(sourceWinId); +} + HWTEST_F(DInputContextTest, GetSinkScreenInfo002, testing::ext::TestSize.Level1) { std::string sourceWinId = "hello";