From 460f79805356839544cba16cf5c6806c90155788 Mon Sep 17 00:00:00 2001 From: gaoqiang_strong Date: Thu, 3 Nov 2022 16:09:13 +0800 Subject: [PATCH 1/2] bug Signed-off-by: gaoqiang_strong --- common/include/dscreen_errcode.h | 1 + services/screenclient/include/screen_client.h | 3 +- .../include/screen_client_window_adapter.h | 3 +- services/screenclient/src/screen_client.cpp | 35 +++++++-------- .../src/screen_client_window_adapter.cpp | 43 +++++++++---------- .../screenregionmgr/src/screenregion.cpp | 2 +- 6 files changed, 42 insertions(+), 45 deletions(-) diff --git a/common/include/dscreen_errcode.h b/common/include/dscreen_errcode.h index 7fcc64d9..396cc3ed 100644 --- a/common/include/dscreen_errcode.h +++ b/common/include/dscreen_errcode.h @@ -98,6 +98,7 @@ enum DScreenErrorCode { ERR_DH_SCREEN_SCREENCLIENT_ADD_WINDOW_ERROR = -54002, ERR_DH_SCREEN_SCREENCLIENT_MOVE_WINDOW_ERROR = -54003, ERR_DH_SCREEN_SCREENCLIENT_HIDE_WINDOW_ERROR = -54004, + ERR_DH_SCREEN_SCREENCLIENT_DESTROY_WINDOW_ERROR = -54005, // screen register callback ERR_DH_SCREEN_REGISTER_CALLBACK_NOT_INIT = -55000, // screen string param empty or screen input param invalid diff --git a/services/screenclient/include/screen_client.h b/services/screenclient/include/screen_client.h index be3e8f99..3f0d9fe6 100644 --- a/services/screenclient/include/screen_client.h +++ b/services/screenclient/include/screen_client.h @@ -41,9 +41,10 @@ public: int32_t MoveWindow(int32_t windowId, int32_t startX, int32_t startY); int32_t RemoveWindow(int32_t windowId); int32_t HideWindow(int32_t windowId); + int32_t DestroyAllWindow(); private: ScreenClient() = default; - ~ScreenClient(); + ~ScreenClient() = default; std::map> surfaceMap_; std::atomic windowId_ = INVALID_WINDOW_ID; std::mutex surfaceMapMutex_; diff --git a/services/screenclient/include/screen_client_window_adapter.h b/services/screenclient/include/screen_client_window_adapter.h index 5b90b54d..267a4264 100644 --- a/services/screenclient/include/screen_client_window_adapter.h +++ b/services/screenclient/include/screen_client_window_adapter.h @@ -42,9 +42,10 @@ public: int32_t HideWindow(int32_t windowId); int32_t MoveWindow(int32_t windowId, int32_t startX, int32_t startY); int32_t RemoveWindow(int32_t windowId); + int32_t DestroyAllWindow(); private: ScreenClientWindowAdapter() = default; - ~ScreenClientWindowAdapter(); + ~ScreenClientWindowAdapter() = default; std::map> windowIdMap_; std::mutex windowIdMapMutex_; }; diff --git a/services/screenclient/src/screen_client.cpp b/services/screenclient/src/screen_client.cpp index 8bf8d0f6..cf41f4d0 100644 --- a/services/screenclient/src/screen_client.cpp +++ b/services/screenclient/src/screen_client.cpp @@ -22,26 +22,6 @@ namespace OHOS { namespace DistributedHardware { IMPLEMENT_SINGLE_INSTANCE(ScreenClient); - -ScreenClient::~ScreenClient() -{ - DHLOGD("~ScreenClient"); - { - std::lock_guard dataLock(surfaceMapMutex_); - for (const auto &item : surfaceMap_) { - int32_t ret = ScreenClientWindowAdapter::GetInstance().RemoveWindow(item.first); - if (ret != DH_SUCCESS) { - DHLOGE("windowId (ID = %d) remove failed.", item.first); - return; - } - } - surfaceMap_.clear(); - windowId_ = INVALID_WINDOW_ID; - } - DHLOGD("ScreenClient Destory."); - return; -} - int32_t ScreenClient::AddWindow(std::shared_ptr windowProperty) { if (windowProperty == nullptr) { @@ -154,5 +134,20 @@ int32_t ScreenClient::RemoveWindow(int32_t windowId) DHLOGD("windowId (ID = %d) remove success.", windowId); return ret; } + +int32_t ScreenClient::DestroyAllWindow() +{ + DHLOGD("DestroyAllWindow"); + int32_t ret = ScreenClientWindowAdapter::GetInstance().DestroyAllWindow(); + if (ret != DH_SUCCESS) { + DHLOGE("DestroyAllWindow failed."); + return ret; + } + std::lock_guard dataLock(surfaceMapMutex_); + surfaceMap_.clear(); + windowId_ = INVALID_WINDOW_ID; + DHLOGD("DestroyAllWindow."); + return DH_SUCCESS; +} } // namespace DistributedHardware } // namespace OHOS \ No newline at end of file diff --git a/services/screenclient/src/screen_client_window_adapter.cpp b/services/screenclient/src/screen_client_window_adapter.cpp index 16266dc2..127671f6 100644 --- a/services/screenclient/src/screen_client_window_adapter.cpp +++ b/services/screenclient/src/screen_client_window_adapter.cpp @@ -28,28 +28,6 @@ namespace OHOS { namespace DistributedHardware { IMPLEMENT_SINGLE_INSTANCE(ScreenClientWindowAdapter); -ScreenClientWindowAdapter::~ScreenClientWindowAdapter() -{ - DHLOGD("~ScreenClientWindowAdapter"); - { - std::lock_guard dataLock(windowIdMapMutex_); - for (const auto &item : windowIdMap_) { - auto window = item.second; - if (window == nullptr) { - DHLOGE("window is nullptr(windowId = %d).", item.first); - return; - } - if (OHOS::Rosen::WMError::WM_OK != window->Destroy()) { - DHLOGE("screenclientSurface is nullptr(windowId = %d).", item.first); - return; - } - } - windowIdMap_.clear(); - } - DHLOGD("ScreenClientWindowAdapter Destory."); - return; -} - sptr ScreenClientWindowAdapter::CreateWindow(std::shared_ptr windowProperty, int32_t windowId) { @@ -201,6 +179,27 @@ int32_t ScreenClientWindowAdapter::RemoveWindow(int32_t windowId) return DH_SUCCESS; } +int32_t ScreenClientWindowAdapter::DestroyAllWindow() +{ + DHLOGD("DestroyAllWindow"); + std::lock_guard dataLock(windowIdMapMutex_); + for (const auto &item : windowIdMap_) { + auto window = item.second; + if (window == nullptr) { + DHLOGE("window is nullptr(windowId = %d).", item.first); + return ERR_DH_SCREEN_SCREENCLIENT_DESTROY_WINDOW_ERROR; + } + if (OHOS::Rosen::WMError::WM_OK != window->Destroy()) { + DHLOGE("screenclientSurface is nullptr(windowId = %d).", item.first); + return ERR_DH_SCREEN_SCREENCLIENT_DESTROY_WINDOW_ERROR; + } + } + windowIdMap_.clear(); + DHLOGD("DestroyAllWindow."); + return DH_SUCCESS; +} + + bool ScreenClientInputEventListener::OnInputEvent(const std::shared_ptr& pointerEvent) const { if (pointerEvent == nullptr) { diff --git a/services/screenservice/sinkservice/screenregionmgr/src/screenregion.cpp b/services/screenservice/sinkservice/screenregionmgr/src/screenregion.cpp index 8c549d2a..652252d7 100644 --- a/services/screenservice/sinkservice/screenregionmgr/src/screenregion.cpp +++ b/services/screenservice/sinkservice/screenregionmgr/src/screenregion.cpp @@ -196,7 +196,7 @@ int32_t ScreenRegion::Stop() return ret; } - ret = ScreenClient::GetInstance().RemoveWindow(windowId_); + ret = ScreenClient::GetInstance().DestroyAllWindow(); if (ret != DH_SUCCESS) { DHLOGE("remove window failed."); return ret; -- Gitee From 6f13410b2cbe7499928c441d221e267467629cdb Mon Sep 17 00:00:00 2001 From: gaoqiang_strong Date: Tue, 15 Nov 2022 11:53:34 +0800 Subject: [PATCH 2/2] bug Signed-off-by: gaoqiang_strong --- common/include/dscreen_constants.h | 1 + common/include/dscreen_errcode.h | 1 - services/screenclient/src/screen_client.cpp | 1 - services/screenclient/src/screen_client_window_adapter.cpp | 7 +++---- .../sinkservice/screenregionmgr/include/screenregion.h | 2 +- .../sinkservice/screenregionmgr/src/screenregion.cpp | 2 +- .../sourceservice/dscreenmgr/include/dscreen.h | 2 -- .../dscreenservice/include/dscreen_source_service.h | 2 +- .../dscreenservice/src/dscreen_source_service.cpp | 5 ----- 9 files changed, 7 insertions(+), 16 deletions(-) diff --git a/common/include/dscreen_constants.h b/common/include/dscreen_constants.h index e3f55a66..40fe819d 100644 --- a/common/include/dscreen_constants.h +++ b/common/include/dscreen_constants.h @@ -140,6 +140,7 @@ constexpr int32_t DISTRIBUTED_HARDWARE_SCREEN_SINK_SA_ID = 4808; constexpr uint64_t SCREEN_ID_INVALID = -1ULL; constexpr uint64_t SCREEN_ID_DEFAULT = 0; constexpr int32_t SCREEN_LOADSA_TIMEOUT_MS = 10000; +constexpr uint8_t TASK_WAIT_SECONDS = 1; } // namespace DistributedHardware } // namespace OHOS #endif \ No newline at end of file diff --git a/common/include/dscreen_errcode.h b/common/include/dscreen_errcode.h index 396cc3ed..7fcc64d9 100644 --- a/common/include/dscreen_errcode.h +++ b/common/include/dscreen_errcode.h @@ -98,7 +98,6 @@ enum DScreenErrorCode { ERR_DH_SCREEN_SCREENCLIENT_ADD_WINDOW_ERROR = -54002, ERR_DH_SCREEN_SCREENCLIENT_MOVE_WINDOW_ERROR = -54003, ERR_DH_SCREEN_SCREENCLIENT_HIDE_WINDOW_ERROR = -54004, - ERR_DH_SCREEN_SCREENCLIENT_DESTROY_WINDOW_ERROR = -54005, // screen register callback ERR_DH_SCREEN_REGISTER_CALLBACK_NOT_INIT = -55000, // screen string param empty or screen input param invalid diff --git a/services/screenclient/src/screen_client.cpp b/services/screenclient/src/screen_client.cpp index db8c3481..d738fd9d 100644 --- a/services/screenclient/src/screen_client.cpp +++ b/services/screenclient/src/screen_client.cpp @@ -146,7 +146,6 @@ int32_t ScreenClient::DestroyAllWindow() std::lock_guard dataLock(surfaceMapMutex_); surfaceMap_.clear(); windowId_ = INVALID_WINDOW_ID; - DHLOGD("DestroyAllWindow."); return DH_SUCCESS; } } // namespace DistributedHardware diff --git a/services/screenclient/src/screen_client_window_adapter.cpp b/services/screenclient/src/screen_client_window_adapter.cpp index 14eedfa7..79123f63 100644 --- a/services/screenclient/src/screen_client_window_adapter.cpp +++ b/services/screenclient/src/screen_client_window_adapter.cpp @@ -187,15 +187,14 @@ int32_t ScreenClientWindowAdapter::DestroyAllWindow() auto window = item.second; if (window == nullptr) { DHLOGE("window is nullptr(windowId = %d).", item.first); - return ERR_DH_SCREEN_SCREENCLIENT_DESTROY_WINDOW_ERROR; + continue; } if (OHOS::Rosen::WMError::WM_OK != window->Destroy()) { - DHLOGE("screenclientSurface is nullptr(windowId = %d).", item.first); - return ERR_DH_SCREEN_SCREENCLIENT_DESTROY_WINDOW_ERROR; + DHLOGE("Destroy window(windowId = %d) failed .", item.first); + continue; } } windowIdMap_.clear(); - DHLOGD("DestroyAllWindow."); return DH_SUCCESS; } diff --git a/services/screenservice/sinkservice/screenregionmgr/include/screenregion.h b/services/screenservice/sinkservice/screenregionmgr/include/screenregion.h index 39b817a8..bab1ee68 100644 --- a/services/screenservice/sinkservice/screenregionmgr/include/screenregion.h +++ b/services/screenservice/sinkservice/screenregionmgr/include/screenregion.h @@ -41,7 +41,7 @@ public: class ScreenRegion : public ScreenSinkTransCallback, public std::enable_shared_from_this { public: ScreenRegion(const std::string &remoteDevId, uint64_t screenId, uint64_t displayId); - ~ScreenRegion(); + ~ScreenRegion() override; void OnTransError(int32_t err, const std::string &content) override; void SetVideoParam(std::shared_ptr &videoParam); void SetMapRelation(std::shared_ptr &mapRelation); diff --git a/services/screenservice/sinkservice/screenregionmgr/src/screenregion.cpp b/services/screenservice/sinkservice/screenregionmgr/src/screenregion.cpp index 652252d7..8c549d2a 100644 --- a/services/screenservice/sinkservice/screenregionmgr/src/screenregion.cpp +++ b/services/screenservice/sinkservice/screenregionmgr/src/screenregion.cpp @@ -196,7 +196,7 @@ int32_t ScreenRegion::Stop() return ret; } - ret = ScreenClient::GetInstance().DestroyAllWindow(); + ret = ScreenClient::GetInstance().RemoveWindow(windowId_); if (ret != DH_SUCCESS) { DHLOGE("remove window failed."); return ret; diff --git a/services/screenservice/sourceservice/dscreenmgr/include/dscreen.h b/services/screenservice/sourceservice/dscreenmgr/include/dscreen.h index e68b3957..2a6fabb5 100644 --- a/services/screenservice/sourceservice/dscreenmgr/include/dscreen.h +++ b/services/screenservice/sourceservice/dscreenmgr/include/dscreen.h @@ -103,8 +103,6 @@ private: int32_t Start(); int32_t Stop(); - static constexpr uint8_t TASK_WAIT_SECONDS = 1; - std::string devId_; std::string dhId_; uint64_t screenId_ = SCREEN_ID_INVALID; diff --git a/services/screenservice/sourceservice/dscreenservice/include/dscreen_source_service.h b/services/screenservice/sourceservice/dscreenservice/include/dscreen_source_service.h index 8f97cff9..7e0cd747 100644 --- a/services/screenservice/sourceservice/dscreenservice/include/dscreen_source_service.h +++ b/services/screenservice/sourceservice/dscreenservice/include/dscreen_source_service.h @@ -30,7 +30,7 @@ class DScreenSourceService : public SystemAbility, public DScreenSourceStub, DECLARE_SYSTEM_ABILITY(DScreenSourceService); public: DScreenSourceService(int32_t saId, bool runOnCreate); - ~DScreenSourceService(); + ~DScreenSourceService() override = default; int32_t InitSource(const std::string ¶ms, const sptr &callback) override; int32_t ReleaseSource() override; int32_t RegisterDistributedHardware(const std::string &devId, const std::string &dhId, diff --git a/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_service.cpp b/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_service.cpp index db9b47de..052689e9 100644 --- a/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_service.cpp +++ b/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_service.cpp @@ -38,11 +38,6 @@ DScreenSourceService::DScreenSourceService(int32_t saId, bool runOnCreate) : Sys DHLOGI("dscreen source service create."); } -DScreenSourceService::~DScreenSourceService() -{ - DHLOGI("~DScreenSourceService."); -} - void DScreenSourceService::OnStart() { DHLOGI("dscreen source service start."); -- Gitee