From 0af6fca193755e8c1f2e0ad1748c5338015089cb Mon Sep 17 00:00:00 2001 From: zeng Date: Wed, 20 Aug 2025 14:42:05 +0800 Subject: [PATCH 01/13] update ss Signed-off-by: zeng --- .../ipc/screen_capture_controller_stub.cpp | 4 +++ .../ipc/screen_capture_service_stub.cpp | 31 +++++++++++++++++++ .../ipc/screen_capture_service_stub.h | 1 + 3 files changed, 36 insertions(+) diff --git a/services/services/screen_capture/ipc/screen_capture_controller_stub.cpp b/services/services/screen_capture/ipc/screen_capture_controller_stub.cpp index 1884e8547..dc72986fc 100644 --- a/services/services/screen_capture/ipc/screen_capture_controller_stub.cpp +++ b/services/services/screen_capture/ipc/screen_capture_controller_stub.cpp @@ -52,6 +52,7 @@ ScreenCaptureControllerStub::~ScreenCaptureControllerStub() int32_t ScreenCaptureControllerStub::Init() { MEDIA_LOGI("ScreenCaptureControllerStub::Init() start"); + std::unique_lock lock(&m:mutex_); screenCaptureControllerServer_ = ScreenCaptureControllerServer::Create(); CHECK_AND_RETURN_RET_LOG(screenCaptureControllerServer_ != nullptr, MSERR_NO_MEMORY, "failed to create screenCaptureControllerServer Service"); @@ -93,6 +94,7 @@ int ScreenCaptureControllerStub::OnRemoteRequest(uint32_t code, MessageParcel &d int32_t ScreenCaptureControllerStub::DestroyStub() { + std::unique_lock lock(&m:mutex_); screenCaptureControllerServer_ = nullptr; MediaServerManager::GetInstance().DestroyStubObject(MediaServerManager::SCREEN_CAPTURE_CONTROLLER, AsObject()); return MSERR_OK; @@ -108,6 +110,7 @@ int32_t ScreenCaptureControllerStub::DestroyStub(MessageParcel &data, MessagePar int32_t ScreenCaptureControllerStub::ReportAVScreenCaptureUserChoice(int32_t sessionId, std::string choice) { MEDIA_LOGI("ScreenCaptureControllerStub::ReportAVScreenCaptureUserChoice start 2"); + std::unique_lock lock(&m:mutex_); CHECK_AND_RETURN_RET_LOG(screenCaptureControllerServer_ != nullptr, false, "screen capture controller server is nullptr"); int32_t appUid = IPCSkeleton::GetCallingUid(); @@ -136,6 +139,7 @@ int32_t ScreenCaptureControllerStub::ReportAVScreenCaptureUserChoice(MessageParc int32_t ScreenCaptureControllerStub::GetAVScreenCaptureConfigurableParameters(int32_t sessionId, std::string &resultStr) { MEDIA_LOGI("ScreenCaptureControllerStub::GetAVScreenCaptureConfigurableParameters start"); + std::unique_lock lock(&m:mutex_); CHECK_AND_RETURN_RET_LOG(screenCaptureControllerServer_ != nullptr, false, "screen capture controller server is nullptr"); int32_t appUid = IPCSkeleton::GetCallingUid(); diff --git a/services/services/screen_capture/ipc/screen_capture_service_stub.cpp b/services/services/screen_capture/ipc/screen_capture_service_stub.cpp index 9beafb668..dfa7ddd27 100644 --- a/services/services/screen_capture/ipc/screen_capture_service_stub.cpp +++ b/services/services/screen_capture/ipc/screen_capture_service_stub.cpp @@ -50,6 +50,7 @@ ScreenCaptureServiceStub::~ScreenCaptureServiceStub() int32_t ScreenCaptureServiceStub::Init() { + std::shared_lock write_lock(&m: rw_lock_); screenCaptureServer_ = ScreenCaptureServer::Create(); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_NO_MEMORY, "failed to create ScreenCaptureServer Service"); @@ -90,6 +91,7 @@ int32_t ScreenCaptureServiceStub::Init() int32_t ScreenCaptureServiceStub::DestroyStub() { + std::unique_lock write_lock(&m: rw_lock_); screenCaptureServer_ = nullptr; MediaServerManager::GetInstance().DestroyStubObject(MediaServerManager::SCREEN_CAPTURE, AsObject()); return MSERR_OK; @@ -125,6 +127,7 @@ int ScreenCaptureServiceStub::OnRemoteRequest(uint32_t code, MessageParcel &data int32_t ScreenCaptureServiceStub::SetCaptureMode(CaptureMode captureMode) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetCaptureMode(captureMode); @@ -132,6 +135,7 @@ int32_t ScreenCaptureServiceStub::SetCaptureMode(CaptureMode captureMode) int32_t ScreenCaptureServiceStub::SetDataType(DataType dataType) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetDataType(dataType); @@ -139,6 +143,7 @@ int32_t ScreenCaptureServiceStub::SetDataType(DataType dataType) int32_t ScreenCaptureServiceStub::SetRecorderInfo(RecorderInfo recorderInfo) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetRecorderInfo(recorderInfo); @@ -146,6 +151,7 @@ int32_t ScreenCaptureServiceStub::SetRecorderInfo(RecorderInfo recorderInfo) int32_t ScreenCaptureServiceStub::SetOutputFile(int32_t fd) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetOutputFile(fd); @@ -153,6 +159,7 @@ int32_t ScreenCaptureServiceStub::SetOutputFile(int32_t fd) int32_t ScreenCaptureServiceStub::SetAndCheckLimit() { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetAndCheckLimit(); @@ -160,6 +167,7 @@ int32_t ScreenCaptureServiceStub::SetAndCheckLimit() int32_t ScreenCaptureServiceStub::SetAndCheckSaLimit(OHOS::AudioStandard::AppInfo &appInfo) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetAndCheckSaLimit(appInfo); @@ -167,6 +175,7 @@ int32_t ScreenCaptureServiceStub::SetAndCheckSaLimit(OHOS::AudioStandard::AppInf int32_t ScreenCaptureServiceStub::InitAudioEncInfo(AudioEncInfo audioEncInfo) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->InitAudioEncInfo(audioEncInfo); @@ -174,6 +183,7 @@ int32_t ScreenCaptureServiceStub::InitAudioEncInfo(AudioEncInfo audioEncInfo) int32_t ScreenCaptureServiceStub::InitAudioCap(AudioCaptureInfo audioInfo) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->InitAudioCap(audioInfo); @@ -181,6 +191,7 @@ int32_t ScreenCaptureServiceStub::InitAudioCap(AudioCaptureInfo audioInfo) int32_t ScreenCaptureServiceStub::InitVideoEncInfo(VideoEncInfo videoEncInfo) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->InitVideoEncInfo(videoEncInfo); @@ -188,6 +199,7 @@ int32_t ScreenCaptureServiceStub::InitVideoEncInfo(VideoEncInfo videoEncInfo) int32_t ScreenCaptureServiceStub::InitVideoCap(VideoCaptureInfo videoInfo) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->InitVideoCap(videoInfo); @@ -195,6 +207,7 @@ int32_t ScreenCaptureServiceStub::InitVideoCap(VideoCaptureInfo videoInfo) int32_t ScreenCaptureServiceStub::StartScreenCapture(bool isPrivacyAuthorityEnabled) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->StartScreenCapture(isPrivacyAuthorityEnabled); @@ -202,6 +215,7 @@ int32_t ScreenCaptureServiceStub::StartScreenCapture(bool isPrivacyAuthorityEnab int32_t ScreenCaptureServiceStub::StartScreenCaptureWithSurface(sptr surface, bool isPrivacyAuthorityEnabled) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); @@ -210,6 +224,7 @@ int32_t ScreenCaptureServiceStub::StartScreenCaptureWithSurface(sptr su int32_t ScreenCaptureServiceStub::UpdateSurface(sptr surface) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->UpdateSurface(surface); @@ -217,6 +232,7 @@ int32_t ScreenCaptureServiceStub::UpdateSurface(sptr surface) int32_t ScreenCaptureServiceStub::StopScreenCapture() { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->StopScreenCapture(); @@ -232,6 +248,7 @@ int32_t ScreenCaptureServiceStub::SetListenerObject(const sptr &o std::shared_ptr callback = std::make_shared(listener); CHECK_AND_RETURN_RET_LOG(callback != nullptr, MSERR_NO_MEMORY, "failed to new ScreenCaptureCallBack"); + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_NO_MEMORY, "screen capture server is nullptr"); (void)screenCaptureServer_->SetScreenCaptureCallback(callback); return MSERR_OK; @@ -239,6 +256,7 @@ int32_t ScreenCaptureServiceStub::SetListenerObject(const sptr &o int32_t ScreenCaptureServiceStub::ExcludeContent(ScreenCaptureContentFilter &contentFilter) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->ExcludeContent(contentFilter); @@ -246,6 +264,7 @@ int32_t ScreenCaptureServiceStub::ExcludeContent(ScreenCaptureContentFilter &con int32_t ScreenCaptureServiceStub::SetMicrophoneEnabled(bool isMicrophone) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetMicrophoneEnabled(isMicrophone); @@ -253,6 +272,7 @@ int32_t ScreenCaptureServiceStub::SetMicrophoneEnabled(bool isMicrophone) int32_t ScreenCaptureServiceStub::SetCanvasRotation(bool canvasRotation) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetCanvasRotation(canvasRotation); @@ -260,6 +280,7 @@ int32_t ScreenCaptureServiceStub::SetCanvasRotation(bool canvasRotation) int32_t ScreenCaptureServiceStub::ShowCursor(bool showCursor) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->ShowCursor(showCursor); @@ -267,6 +288,7 @@ int32_t ScreenCaptureServiceStub::ShowCursor(bool showCursor) int32_t ScreenCaptureServiceStub::ResizeCanvas(int32_t width, int32_t height) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->ResizeCanvas(width, height); @@ -274,6 +296,7 @@ int32_t ScreenCaptureServiceStub::ResizeCanvas(int32_t width, int32_t height) int32_t ScreenCaptureServiceStub::SkipPrivacyMode(std::vector &windowIDsVec) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SkipPrivacyMode(windowIDsVec); @@ -281,6 +304,7 @@ int32_t ScreenCaptureServiceStub::SkipPrivacyMode(std::vector &windowI int32_t ScreenCaptureServiceStub::SetMaxVideoFrameRate(int32_t frameRate) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetMaxVideoFrameRate(frameRate); @@ -289,6 +313,7 @@ int32_t ScreenCaptureServiceStub::SetMaxVideoFrameRate(int32_t frameRate) int32_t ScreenCaptureServiceStub::AcquireAudioBuffer(std::shared_ptr &audioBuffer, AudioCaptureSourceType type) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->AcquireAudioBuffer(audioBuffer, type); @@ -297,6 +322,7 @@ int32_t ScreenCaptureServiceStub::AcquireAudioBuffer(std::shared_ptr &surfaceBuffer, int32_t &fence, int64_t ×tamp, OHOS::Rect &damage) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->AcquireVideoBuffer(surfaceBuffer, fence, timestamp, damage); @@ -304,6 +330,7 @@ int32_t ScreenCaptureServiceStub::AcquireVideoBuffer(sptr & int32_t ScreenCaptureServiceStub::ReleaseAudioBuffer(AudioCaptureSourceType type) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->ReleaseAudioBuffer(type); @@ -311,6 +338,7 @@ int32_t ScreenCaptureServiceStub::ReleaseAudioBuffer(AudioCaptureSourceType type int32_t ScreenCaptureServiceStub::ReleaseVideoBuffer() { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->ReleaseVideoBuffer(); @@ -318,6 +346,7 @@ int32_t ScreenCaptureServiceStub::ReleaseVideoBuffer() int32_t ScreenCaptureServiceStub::SetScreenCaptureStrategy(ScreenCaptureStrategy strategy) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetScreenCaptureStrategy(strategy); @@ -325,6 +354,7 @@ int32_t ScreenCaptureServiceStub::SetScreenCaptureStrategy(ScreenCaptureStrategy int32_t ScreenCaptureServiceStub::SetCaptureArea(uint64_t displayId, OHOS::Rect area) { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetCaptureArea(displayId, area); @@ -689,6 +719,7 @@ int32_t ScreenCaptureServiceStub::SetListenerObject(MessageParcel &data, Message void ScreenCaptureServiceStub::Release() { + std::shared_lock read_lock(&m: rw_lock_); CHECK_AND_RETURN_LOG(screenCaptureServer_ != nullptr, "screen capture server is nullptr"); return screenCaptureServer_->Release(); } diff --git a/services/services/screen_capture/ipc/screen_capture_service_stub.h b/services/services/screen_capture/ipc/screen_capture_service_stub.h index e459ca60a..e4ad70b83 100644 --- a/services/services/screen_capture/ipc/screen_capture_service_stub.h +++ b/services/services/screen_capture/ipc/screen_capture_service_stub.h @@ -96,6 +96,7 @@ private: int32_t DestroyStub(MessageParcel &data, MessageParcel &reply); std::mutex mutex_; + mutable std::shared_mutex rw_lock_; std::shared_ptr screenCaptureServer_ = nullptr; using screenCaptureStubFuncs = int32_t(ScreenCaptureServiceStub::*)(MessageParcel &data, MessageParcel &reply); std::map screenCaptureStubFuncs_; -- Gitee From a6e39046aea70edf2169dd528addd8bc55d1d8bc Mon Sep 17 00:00:00 2001 From: zeng Date: Wed, 20 Aug 2025 15:50:42 +0800 Subject: [PATCH 02/13] update Signed-off-by: zeng --- .../ipc/screen_capture_controller_stub.cpp | 8 +-- .../ipc/screen_capture_service_stub.cpp | 62 +++++++++---------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/services/services/screen_capture/ipc/screen_capture_controller_stub.cpp b/services/services/screen_capture/ipc/screen_capture_controller_stub.cpp index dc72986fc..408845c9e 100644 --- a/services/services/screen_capture/ipc/screen_capture_controller_stub.cpp +++ b/services/services/screen_capture/ipc/screen_capture_controller_stub.cpp @@ -52,7 +52,7 @@ ScreenCaptureControllerStub::~ScreenCaptureControllerStub() int32_t ScreenCaptureControllerStub::Init() { MEDIA_LOGI("ScreenCaptureControllerStub::Init() start"); - std::unique_lock lock(&m:mutex_); + std::unique_lock lock(mutex_); screenCaptureControllerServer_ = ScreenCaptureControllerServer::Create(); CHECK_AND_RETURN_RET_LOG(screenCaptureControllerServer_ != nullptr, MSERR_NO_MEMORY, "failed to create screenCaptureControllerServer Service"); @@ -94,7 +94,7 @@ int ScreenCaptureControllerStub::OnRemoteRequest(uint32_t code, MessageParcel &d int32_t ScreenCaptureControllerStub::DestroyStub() { - std::unique_lock lock(&m:mutex_); + std::unique_lock lock(mutex_); screenCaptureControllerServer_ = nullptr; MediaServerManager::GetInstance().DestroyStubObject(MediaServerManager::SCREEN_CAPTURE_CONTROLLER, AsObject()); return MSERR_OK; @@ -110,7 +110,7 @@ int32_t ScreenCaptureControllerStub::DestroyStub(MessageParcel &data, MessagePar int32_t ScreenCaptureControllerStub::ReportAVScreenCaptureUserChoice(int32_t sessionId, std::string choice) { MEDIA_LOGI("ScreenCaptureControllerStub::ReportAVScreenCaptureUserChoice start 2"); - std::unique_lock lock(&m:mutex_); + std::unique_lock lock(mutex_); CHECK_AND_RETURN_RET_LOG(screenCaptureControllerServer_ != nullptr, false, "screen capture controller server is nullptr"); int32_t appUid = IPCSkeleton::GetCallingUid(); @@ -139,7 +139,7 @@ int32_t ScreenCaptureControllerStub::ReportAVScreenCaptureUserChoice(MessageParc int32_t ScreenCaptureControllerStub::GetAVScreenCaptureConfigurableParameters(int32_t sessionId, std::string &resultStr) { MEDIA_LOGI("ScreenCaptureControllerStub::GetAVScreenCaptureConfigurableParameters start"); - std::unique_lock lock(&m:mutex_); + std::unique_lock lock(mutex_); CHECK_AND_RETURN_RET_LOG(screenCaptureControllerServer_ != nullptr, false, "screen capture controller server is nullptr"); int32_t appUid = IPCSkeleton::GetCallingUid(); diff --git a/services/services/screen_capture/ipc/screen_capture_service_stub.cpp b/services/services/screen_capture/ipc/screen_capture_service_stub.cpp index dfa7ddd27..ac3d69bbd 100644 --- a/services/services/screen_capture/ipc/screen_capture_service_stub.cpp +++ b/services/services/screen_capture/ipc/screen_capture_service_stub.cpp @@ -50,7 +50,7 @@ ScreenCaptureServiceStub::~ScreenCaptureServiceStub() int32_t ScreenCaptureServiceStub::Init() { - std::shared_lock write_lock(&m: rw_lock_); + std::shared_lock write_lock(rw_lock_); screenCaptureServer_ = ScreenCaptureServer::Create(); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_NO_MEMORY, "failed to create ScreenCaptureServer Service"); @@ -91,7 +91,7 @@ int32_t ScreenCaptureServiceStub::Init() int32_t ScreenCaptureServiceStub::DestroyStub() { - std::unique_lock write_lock(&m: rw_lock_); + std::unique_lock write_lock(rw_lock_); screenCaptureServer_ = nullptr; MediaServerManager::GetInstance().DestroyStubObject(MediaServerManager::SCREEN_CAPTURE, AsObject()); return MSERR_OK; @@ -127,7 +127,7 @@ int ScreenCaptureServiceStub::OnRemoteRequest(uint32_t code, MessageParcel &data int32_t ScreenCaptureServiceStub::SetCaptureMode(CaptureMode captureMode) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetCaptureMode(captureMode); @@ -135,7 +135,7 @@ int32_t ScreenCaptureServiceStub::SetCaptureMode(CaptureMode captureMode) int32_t ScreenCaptureServiceStub::SetDataType(DataType dataType) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetDataType(dataType); @@ -143,7 +143,7 @@ int32_t ScreenCaptureServiceStub::SetDataType(DataType dataType) int32_t ScreenCaptureServiceStub::SetRecorderInfo(RecorderInfo recorderInfo) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetRecorderInfo(recorderInfo); @@ -151,7 +151,7 @@ int32_t ScreenCaptureServiceStub::SetRecorderInfo(RecorderInfo recorderInfo) int32_t ScreenCaptureServiceStub::SetOutputFile(int32_t fd) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetOutputFile(fd); @@ -159,7 +159,7 @@ int32_t ScreenCaptureServiceStub::SetOutputFile(int32_t fd) int32_t ScreenCaptureServiceStub::SetAndCheckLimit() { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetAndCheckLimit(); @@ -167,7 +167,7 @@ int32_t ScreenCaptureServiceStub::SetAndCheckLimit() int32_t ScreenCaptureServiceStub::SetAndCheckSaLimit(OHOS::AudioStandard::AppInfo &appInfo) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetAndCheckSaLimit(appInfo); @@ -175,7 +175,7 @@ int32_t ScreenCaptureServiceStub::SetAndCheckSaLimit(OHOS::AudioStandard::AppInf int32_t ScreenCaptureServiceStub::InitAudioEncInfo(AudioEncInfo audioEncInfo) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->InitAudioEncInfo(audioEncInfo); @@ -183,7 +183,7 @@ int32_t ScreenCaptureServiceStub::InitAudioEncInfo(AudioEncInfo audioEncInfo) int32_t ScreenCaptureServiceStub::InitAudioCap(AudioCaptureInfo audioInfo) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->InitAudioCap(audioInfo); @@ -191,7 +191,7 @@ int32_t ScreenCaptureServiceStub::InitAudioCap(AudioCaptureInfo audioInfo) int32_t ScreenCaptureServiceStub::InitVideoEncInfo(VideoEncInfo videoEncInfo) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->InitVideoEncInfo(videoEncInfo); @@ -199,7 +199,7 @@ int32_t ScreenCaptureServiceStub::InitVideoEncInfo(VideoEncInfo videoEncInfo) int32_t ScreenCaptureServiceStub::InitVideoCap(VideoCaptureInfo videoInfo) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->InitVideoCap(videoInfo); @@ -207,7 +207,7 @@ int32_t ScreenCaptureServiceStub::InitVideoCap(VideoCaptureInfo videoInfo) int32_t ScreenCaptureServiceStub::StartScreenCapture(bool isPrivacyAuthorityEnabled) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->StartScreenCapture(isPrivacyAuthorityEnabled); @@ -215,7 +215,7 @@ int32_t ScreenCaptureServiceStub::StartScreenCapture(bool isPrivacyAuthorityEnab int32_t ScreenCaptureServiceStub::StartScreenCaptureWithSurface(sptr surface, bool isPrivacyAuthorityEnabled) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); @@ -224,7 +224,7 @@ int32_t ScreenCaptureServiceStub::StartScreenCaptureWithSurface(sptr su int32_t ScreenCaptureServiceStub::UpdateSurface(sptr surface) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->UpdateSurface(surface); @@ -232,7 +232,7 @@ int32_t ScreenCaptureServiceStub::UpdateSurface(sptr surface) int32_t ScreenCaptureServiceStub::StopScreenCapture() { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->StopScreenCapture(); @@ -248,7 +248,7 @@ int32_t ScreenCaptureServiceStub::SetListenerObject(const sptr &o std::shared_ptr callback = std::make_shared(listener); CHECK_AND_RETURN_RET_LOG(callback != nullptr, MSERR_NO_MEMORY, "failed to new ScreenCaptureCallBack"); - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_NO_MEMORY, "screen capture server is nullptr"); (void)screenCaptureServer_->SetScreenCaptureCallback(callback); return MSERR_OK; @@ -256,7 +256,7 @@ int32_t ScreenCaptureServiceStub::SetListenerObject(const sptr &o int32_t ScreenCaptureServiceStub::ExcludeContent(ScreenCaptureContentFilter &contentFilter) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->ExcludeContent(contentFilter); @@ -264,7 +264,7 @@ int32_t ScreenCaptureServiceStub::ExcludeContent(ScreenCaptureContentFilter &con int32_t ScreenCaptureServiceStub::SetMicrophoneEnabled(bool isMicrophone) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetMicrophoneEnabled(isMicrophone); @@ -272,7 +272,7 @@ int32_t ScreenCaptureServiceStub::SetMicrophoneEnabled(bool isMicrophone) int32_t ScreenCaptureServiceStub::SetCanvasRotation(bool canvasRotation) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetCanvasRotation(canvasRotation); @@ -280,7 +280,7 @@ int32_t ScreenCaptureServiceStub::SetCanvasRotation(bool canvasRotation) int32_t ScreenCaptureServiceStub::ShowCursor(bool showCursor) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->ShowCursor(showCursor); @@ -288,7 +288,7 @@ int32_t ScreenCaptureServiceStub::ShowCursor(bool showCursor) int32_t ScreenCaptureServiceStub::ResizeCanvas(int32_t width, int32_t height) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->ResizeCanvas(width, height); @@ -296,7 +296,7 @@ int32_t ScreenCaptureServiceStub::ResizeCanvas(int32_t width, int32_t height) int32_t ScreenCaptureServiceStub::SkipPrivacyMode(std::vector &windowIDsVec) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SkipPrivacyMode(windowIDsVec); @@ -304,7 +304,7 @@ int32_t ScreenCaptureServiceStub::SkipPrivacyMode(std::vector &windowI int32_t ScreenCaptureServiceStub::SetMaxVideoFrameRate(int32_t frameRate) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetMaxVideoFrameRate(frameRate); @@ -313,7 +313,7 @@ int32_t ScreenCaptureServiceStub::SetMaxVideoFrameRate(int32_t frameRate) int32_t ScreenCaptureServiceStub::AcquireAudioBuffer(std::shared_ptr &audioBuffer, AudioCaptureSourceType type) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->AcquireAudioBuffer(audioBuffer, type); @@ -322,7 +322,7 @@ int32_t ScreenCaptureServiceStub::AcquireAudioBuffer(std::shared_ptr &surfaceBuffer, int32_t &fence, int64_t ×tamp, OHOS::Rect &damage) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->AcquireVideoBuffer(surfaceBuffer, fence, timestamp, damage); @@ -330,7 +330,7 @@ int32_t ScreenCaptureServiceStub::AcquireVideoBuffer(sptr & int32_t ScreenCaptureServiceStub::ReleaseAudioBuffer(AudioCaptureSourceType type) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->ReleaseAudioBuffer(type); @@ -338,7 +338,7 @@ int32_t ScreenCaptureServiceStub::ReleaseAudioBuffer(AudioCaptureSourceType type int32_t ScreenCaptureServiceStub::ReleaseVideoBuffer() { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->ReleaseVideoBuffer(); @@ -346,7 +346,7 @@ int32_t ScreenCaptureServiceStub::ReleaseVideoBuffer() int32_t ScreenCaptureServiceStub::SetScreenCaptureStrategy(ScreenCaptureStrategy strategy) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetScreenCaptureStrategy(strategy); @@ -354,7 +354,7 @@ int32_t ScreenCaptureServiceStub::SetScreenCaptureStrategy(ScreenCaptureStrategy int32_t ScreenCaptureServiceStub::SetCaptureArea(uint64_t displayId, OHOS::Rect area) { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetCaptureArea(displayId, area); @@ -719,7 +719,7 @@ int32_t ScreenCaptureServiceStub::SetListenerObject(MessageParcel &data, Message void ScreenCaptureServiceStub::Release() { - std::shared_lock read_lock(&m: rw_lock_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_LOG(screenCaptureServer_ != nullptr, "screen capture server is nullptr"); return screenCaptureServer_->Release(); } -- Gitee From b087cc191b5bc3f2bc0639bda82c8ca2eafc8ea6 Mon Sep 17 00:00:00 2001 From: zeng Date: Thu, 28 Aug 2025 10:24:38 +0800 Subject: [PATCH 03/13] update Signed-off-by: zeng --- .../screen_capture/ipc/screen_capture_controller_stub.cpp | 8 ++++---- .../screen_capture/ipc/screen_capture_controller_stub.h | 1 + .../screen_capture/ipc/screen_capture_service_stub.cpp | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/services/services/screen_capture/ipc/screen_capture_controller_stub.cpp b/services/services/screen_capture/ipc/screen_capture_controller_stub.cpp index 408845c9e..1cf21321e 100644 --- a/services/services/screen_capture/ipc/screen_capture_controller_stub.cpp +++ b/services/services/screen_capture/ipc/screen_capture_controller_stub.cpp @@ -52,7 +52,7 @@ ScreenCaptureControllerStub::~ScreenCaptureControllerStub() int32_t ScreenCaptureControllerStub::Init() { MEDIA_LOGI("ScreenCaptureControllerStub::Init() start"); - std::unique_lock lock(mutex_); + std::unique_lock write_lock(rw_lock_); screenCaptureControllerServer_ = ScreenCaptureControllerServer::Create(); CHECK_AND_RETURN_RET_LOG(screenCaptureControllerServer_ != nullptr, MSERR_NO_MEMORY, "failed to create screenCaptureControllerServer Service"); @@ -94,7 +94,7 @@ int ScreenCaptureControllerStub::OnRemoteRequest(uint32_t code, MessageParcel &d int32_t ScreenCaptureControllerStub::DestroyStub() { - std::unique_lock lock(mutex_); + std::unique_lock write_lock(rw_lock_); screenCaptureControllerServer_ = nullptr; MediaServerManager::GetInstance().DestroyStubObject(MediaServerManager::SCREEN_CAPTURE_CONTROLLER, AsObject()); return MSERR_OK; @@ -110,7 +110,7 @@ int32_t ScreenCaptureControllerStub::DestroyStub(MessageParcel &data, MessagePar int32_t ScreenCaptureControllerStub::ReportAVScreenCaptureUserChoice(int32_t sessionId, std::string choice) { MEDIA_LOGI("ScreenCaptureControllerStub::ReportAVScreenCaptureUserChoice start 2"); - std::unique_lock lock(mutex_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureControllerServer_ != nullptr, false, "screen capture controller server is nullptr"); int32_t appUid = IPCSkeleton::GetCallingUid(); @@ -139,7 +139,7 @@ int32_t ScreenCaptureControllerStub::ReportAVScreenCaptureUserChoice(MessageParc int32_t ScreenCaptureControllerStub::GetAVScreenCaptureConfigurableParameters(int32_t sessionId, std::string &resultStr) { MEDIA_LOGI("ScreenCaptureControllerStub::GetAVScreenCaptureConfigurableParameters start"); - std::unique_lock lock(mutex_); + std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureControllerServer_ != nullptr, false, "screen capture controller server is nullptr"); int32_t appUid = IPCSkeleton::GetCallingUid(); diff --git a/services/services/screen_capture/ipc/screen_capture_controller_stub.h b/services/services/screen_capture/ipc/screen_capture_controller_stub.h index 3e88e4ac5..1a5e7bdf5 100644 --- a/services/services/screen_capture/ipc/screen_capture_controller_stub.h +++ b/services/services/screen_capture/ipc/screen_capture_controller_stub.h @@ -41,6 +41,7 @@ private: int32_t DestroyStub(MessageParcel &data, MessageParcel &reply); std::mutex mutex_; + mutable std::shared_mutex rw_lock_; std::shared_ptr screenCaptureControllerServer_ = nullptr; using screenCaptureControllerStubFuncs = int32_t(ScreenCaptureControllerStub::*)(MessageParcel &data, MessageParcel &reply); diff --git a/services/services/screen_capture/ipc/screen_capture_service_stub.cpp b/services/services/screen_capture/ipc/screen_capture_service_stub.cpp index ac3d69bbd..58db6ef3a 100644 --- a/services/services/screen_capture/ipc/screen_capture_service_stub.cpp +++ b/services/services/screen_capture/ipc/screen_capture_service_stub.cpp @@ -50,7 +50,7 @@ ScreenCaptureServiceStub::~ScreenCaptureServiceStub() int32_t ScreenCaptureServiceStub::Init() { - std::shared_lock write_lock(rw_lock_); + std::unique_lock write_lock(rw_lock_); screenCaptureServer_ = ScreenCaptureServer::Create(); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_NO_MEMORY, "failed to create ScreenCaptureServer Service"); -- Gitee From ba019666c44a66f7774fe7ae8c44fd3c534c05df Mon Sep 17 00:00:00 2001 From: zeng Date: Fri, 29 Aug 2025 19:01:19 +0800 Subject: [PATCH 04/13] update lock Signed-off-by: zeng --- .../services/screen_capture/server/screen_capture_server.cpp | 5 +++++ .../services/screen_capture/server/screen_capture_server.h | 1 + 2 files changed, 6 insertions(+) diff --git a/services/services/screen_capture/server/screen_capture_server.cpp b/services/services/screen_capture/server/screen_capture_server.cpp index 3fa90234b..cca564faa 100644 --- a/services/services/screen_capture/server/screen_capture_server.cpp +++ b/services/services/screen_capture/server/screen_capture_server.cpp @@ -1047,6 +1047,7 @@ void ScreenCaptureServer::SetDisplayId(uint64_t displayId) void ScreenCaptureServer::SetMissionId(uint64_t missionId) { + std::unique_lock write_lock_(rw_lock_); missionIds_.emplace_back(missionId); } @@ -2020,6 +2021,7 @@ void ScreenCaptureServer::PostStartScreenCapture(bool isSuccess) RegisterPrivateWindowListener(); RegisterScreenConnectListener(); RegisterLanguageSwitchListener(); + std::shared_lock read_lock_(rw_lock_); if (captureConfig_.captureMode == CAPTURE_SPECIFIED_WINDOW && missionIds_.size() == 1) { SetWindowIdList(missionIds_.front()); SetDefaultDisplayIdOfWindows(); @@ -2908,6 +2910,7 @@ int32_t ScreenCaptureServer::CreateVirtualScreen(const std::string &name, sptrGetHeight(), display->GetVirtualPixelRatio()); virScrOption.density_ = display->GetVirtualPixelRatio(); } + std::shared_lock read_lock_(rw_lock_); if (missionIds_.size() > 0 && captureConfig_.captureMode == CAPTURE_SPECIFIED_WINDOW) { virScrOption.missionIds_ = missionIds_; } else if (captureConfig_.videoInfo.videoCapInfo.taskIDs.size() > 0 && @@ -2987,6 +2990,7 @@ int32_t ScreenCaptureServer::PrepareVirtualScreenMirror() uint64_t ScreenCaptureServer::GetDisplayIdOfWindows(uint64_t displayId) { uint64_t defaultDisplayIdValue = displayId; + std::shared_lock read_lock_(rw_lock_); if (missionIds_.size() > 0) { std::unordered_map windowDisplayIdMap; auto ret = WindowManager::GetInstance().GetDisplayIdByWindowId(missionIds_, windowDisplayIdMap); @@ -3207,6 +3211,7 @@ VirtualScreenOption ScreenCaptureServer::InitVirtualScreenOption(const std::stri MediaTrace trace("ScreenCaptureServer::InitVirtualScreenOption"); MEDIA_LOGI("ScreenCaptureServer: 0x%{public}06" PRIXPTR " InitVirtualScreenOption start, name:%{public}s.", FAKE_POINTER(this), name.c_str()); + std::unique_lock write_lock_(rw_lock_); VirtualScreenOption virScrOption = { .name_ = name, .width_ = captureConfig_.videoInfo.videoCapInfo.videoFrameWidth, diff --git a/services/services/screen_capture/server/screen_capture_server.h b/services/services/screen_capture/server/screen_capture_server.h index d952083e7..c87f193ef 100644 --- a/services/services/screen_capture/server/screen_capture_server.h +++ b/services/services/screen_capture/server/screen_capture_server.h @@ -284,6 +284,7 @@ private: std::mutex mutex_; std::mutex cbMutex_; std::mutex inCallMutex_; + mutable std::shared_mutex rw_lock_; std::shared_ptr screenCaptureObserverCb_ = nullptr; std::shared_ptr screenCaptureCb_ = nullptr; bool canvasRotation_ = false; -- Gitee From 57f30e70269c06faf315e3631e33856c1c3afae1 Mon Sep 17 00:00:00 2001 From: zeng Date: Sat, 30 Aug 2025 11:03:26 +0800 Subject: [PATCH 05/13] update Signed-off-by: zeng --- .../ipc/screen_capture_controller_stub.cpp | 5 +-- .../ipc/screen_capture_controller_stub.h | 1 - .../ipc/screen_capture_service_stub.cpp | 31 ------------------- .../ipc/screen_capture_service_stub.h | 1 - 4 files changed, 1 insertion(+), 37 deletions(-) diff --git a/services/services/screen_capture/ipc/screen_capture_controller_stub.cpp b/services/services/screen_capture/ipc/screen_capture_controller_stub.cpp index 1cf21321e..b68a5762e 100644 --- a/services/services/screen_capture/ipc/screen_capture_controller_stub.cpp +++ b/services/services/screen_capture/ipc/screen_capture_controller_stub.cpp @@ -52,7 +52,6 @@ ScreenCaptureControllerStub::~ScreenCaptureControllerStub() int32_t ScreenCaptureControllerStub::Init() { MEDIA_LOGI("ScreenCaptureControllerStub::Init() start"); - std::unique_lock write_lock(rw_lock_); screenCaptureControllerServer_ = ScreenCaptureControllerServer::Create(); CHECK_AND_RETURN_RET_LOG(screenCaptureControllerServer_ != nullptr, MSERR_NO_MEMORY, "failed to create screenCaptureControllerServer Service"); @@ -80,6 +79,7 @@ int ScreenCaptureControllerStub::OnRemoteRequest(uint32_t code, MessageParcel &d if (itFunc != screenCaptureControllerStubFuncs_.end()) { auto memberFunc = itFunc->second; if (memberFunc != nullptr) { + std::lock_guard lock(mutex_); int32_t ret = (this->*memberFunc)(data, reply); if (ret != MSERR_OK) { MEDIA_LOGE("Calling memberFunc is failed."); @@ -94,7 +94,6 @@ int ScreenCaptureControllerStub::OnRemoteRequest(uint32_t code, MessageParcel &d int32_t ScreenCaptureControllerStub::DestroyStub() { - std::unique_lock write_lock(rw_lock_); screenCaptureControllerServer_ = nullptr; MediaServerManager::GetInstance().DestroyStubObject(MediaServerManager::SCREEN_CAPTURE_CONTROLLER, AsObject()); return MSERR_OK; @@ -110,7 +109,6 @@ int32_t ScreenCaptureControllerStub::DestroyStub(MessageParcel &data, MessagePar int32_t ScreenCaptureControllerStub::ReportAVScreenCaptureUserChoice(int32_t sessionId, std::string choice) { MEDIA_LOGI("ScreenCaptureControllerStub::ReportAVScreenCaptureUserChoice start 2"); - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureControllerServer_ != nullptr, false, "screen capture controller server is nullptr"); int32_t appUid = IPCSkeleton::GetCallingUid(); @@ -139,7 +137,6 @@ int32_t ScreenCaptureControllerStub::ReportAVScreenCaptureUserChoice(MessageParc int32_t ScreenCaptureControllerStub::GetAVScreenCaptureConfigurableParameters(int32_t sessionId, std::string &resultStr) { MEDIA_LOGI("ScreenCaptureControllerStub::GetAVScreenCaptureConfigurableParameters start"); - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureControllerServer_ != nullptr, false, "screen capture controller server is nullptr"); int32_t appUid = IPCSkeleton::GetCallingUid(); diff --git a/services/services/screen_capture/ipc/screen_capture_controller_stub.h b/services/services/screen_capture/ipc/screen_capture_controller_stub.h index 1a5e7bdf5..3e88e4ac5 100644 --- a/services/services/screen_capture/ipc/screen_capture_controller_stub.h +++ b/services/services/screen_capture/ipc/screen_capture_controller_stub.h @@ -41,7 +41,6 @@ private: int32_t DestroyStub(MessageParcel &data, MessageParcel &reply); std::mutex mutex_; - mutable std::shared_mutex rw_lock_; std::shared_ptr screenCaptureControllerServer_ = nullptr; using screenCaptureControllerStubFuncs = int32_t(ScreenCaptureControllerStub::*)(MessageParcel &data, MessageParcel &reply); diff --git a/services/services/screen_capture/ipc/screen_capture_service_stub.cpp b/services/services/screen_capture/ipc/screen_capture_service_stub.cpp index 58db6ef3a..9beafb668 100644 --- a/services/services/screen_capture/ipc/screen_capture_service_stub.cpp +++ b/services/services/screen_capture/ipc/screen_capture_service_stub.cpp @@ -50,7 +50,6 @@ ScreenCaptureServiceStub::~ScreenCaptureServiceStub() int32_t ScreenCaptureServiceStub::Init() { - std::unique_lock write_lock(rw_lock_); screenCaptureServer_ = ScreenCaptureServer::Create(); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_NO_MEMORY, "failed to create ScreenCaptureServer Service"); @@ -91,7 +90,6 @@ int32_t ScreenCaptureServiceStub::Init() int32_t ScreenCaptureServiceStub::DestroyStub() { - std::unique_lock write_lock(rw_lock_); screenCaptureServer_ = nullptr; MediaServerManager::GetInstance().DestroyStubObject(MediaServerManager::SCREEN_CAPTURE, AsObject()); return MSERR_OK; @@ -127,7 +125,6 @@ int ScreenCaptureServiceStub::OnRemoteRequest(uint32_t code, MessageParcel &data int32_t ScreenCaptureServiceStub::SetCaptureMode(CaptureMode captureMode) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetCaptureMode(captureMode); @@ -135,7 +132,6 @@ int32_t ScreenCaptureServiceStub::SetCaptureMode(CaptureMode captureMode) int32_t ScreenCaptureServiceStub::SetDataType(DataType dataType) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetDataType(dataType); @@ -143,7 +139,6 @@ int32_t ScreenCaptureServiceStub::SetDataType(DataType dataType) int32_t ScreenCaptureServiceStub::SetRecorderInfo(RecorderInfo recorderInfo) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetRecorderInfo(recorderInfo); @@ -151,7 +146,6 @@ int32_t ScreenCaptureServiceStub::SetRecorderInfo(RecorderInfo recorderInfo) int32_t ScreenCaptureServiceStub::SetOutputFile(int32_t fd) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetOutputFile(fd); @@ -159,7 +153,6 @@ int32_t ScreenCaptureServiceStub::SetOutputFile(int32_t fd) int32_t ScreenCaptureServiceStub::SetAndCheckLimit() { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetAndCheckLimit(); @@ -167,7 +160,6 @@ int32_t ScreenCaptureServiceStub::SetAndCheckLimit() int32_t ScreenCaptureServiceStub::SetAndCheckSaLimit(OHOS::AudioStandard::AppInfo &appInfo) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetAndCheckSaLimit(appInfo); @@ -175,7 +167,6 @@ int32_t ScreenCaptureServiceStub::SetAndCheckSaLimit(OHOS::AudioStandard::AppInf int32_t ScreenCaptureServiceStub::InitAudioEncInfo(AudioEncInfo audioEncInfo) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->InitAudioEncInfo(audioEncInfo); @@ -183,7 +174,6 @@ int32_t ScreenCaptureServiceStub::InitAudioEncInfo(AudioEncInfo audioEncInfo) int32_t ScreenCaptureServiceStub::InitAudioCap(AudioCaptureInfo audioInfo) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->InitAudioCap(audioInfo); @@ -191,7 +181,6 @@ int32_t ScreenCaptureServiceStub::InitAudioCap(AudioCaptureInfo audioInfo) int32_t ScreenCaptureServiceStub::InitVideoEncInfo(VideoEncInfo videoEncInfo) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->InitVideoEncInfo(videoEncInfo); @@ -199,7 +188,6 @@ int32_t ScreenCaptureServiceStub::InitVideoEncInfo(VideoEncInfo videoEncInfo) int32_t ScreenCaptureServiceStub::InitVideoCap(VideoCaptureInfo videoInfo) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->InitVideoCap(videoInfo); @@ -207,7 +195,6 @@ int32_t ScreenCaptureServiceStub::InitVideoCap(VideoCaptureInfo videoInfo) int32_t ScreenCaptureServiceStub::StartScreenCapture(bool isPrivacyAuthorityEnabled) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->StartScreenCapture(isPrivacyAuthorityEnabled); @@ -215,7 +202,6 @@ int32_t ScreenCaptureServiceStub::StartScreenCapture(bool isPrivacyAuthorityEnab int32_t ScreenCaptureServiceStub::StartScreenCaptureWithSurface(sptr surface, bool isPrivacyAuthorityEnabled) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); @@ -224,7 +210,6 @@ int32_t ScreenCaptureServiceStub::StartScreenCaptureWithSurface(sptr su int32_t ScreenCaptureServiceStub::UpdateSurface(sptr surface) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->UpdateSurface(surface); @@ -232,7 +217,6 @@ int32_t ScreenCaptureServiceStub::UpdateSurface(sptr surface) int32_t ScreenCaptureServiceStub::StopScreenCapture() { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->StopScreenCapture(); @@ -248,7 +232,6 @@ int32_t ScreenCaptureServiceStub::SetListenerObject(const sptr &o std::shared_ptr callback = std::make_shared(listener); CHECK_AND_RETURN_RET_LOG(callback != nullptr, MSERR_NO_MEMORY, "failed to new ScreenCaptureCallBack"); - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_NO_MEMORY, "screen capture server is nullptr"); (void)screenCaptureServer_->SetScreenCaptureCallback(callback); return MSERR_OK; @@ -256,7 +239,6 @@ int32_t ScreenCaptureServiceStub::SetListenerObject(const sptr &o int32_t ScreenCaptureServiceStub::ExcludeContent(ScreenCaptureContentFilter &contentFilter) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->ExcludeContent(contentFilter); @@ -264,7 +246,6 @@ int32_t ScreenCaptureServiceStub::ExcludeContent(ScreenCaptureContentFilter &con int32_t ScreenCaptureServiceStub::SetMicrophoneEnabled(bool isMicrophone) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetMicrophoneEnabled(isMicrophone); @@ -272,7 +253,6 @@ int32_t ScreenCaptureServiceStub::SetMicrophoneEnabled(bool isMicrophone) int32_t ScreenCaptureServiceStub::SetCanvasRotation(bool canvasRotation) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetCanvasRotation(canvasRotation); @@ -280,7 +260,6 @@ int32_t ScreenCaptureServiceStub::SetCanvasRotation(bool canvasRotation) int32_t ScreenCaptureServiceStub::ShowCursor(bool showCursor) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->ShowCursor(showCursor); @@ -288,7 +267,6 @@ int32_t ScreenCaptureServiceStub::ShowCursor(bool showCursor) int32_t ScreenCaptureServiceStub::ResizeCanvas(int32_t width, int32_t height) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->ResizeCanvas(width, height); @@ -296,7 +274,6 @@ int32_t ScreenCaptureServiceStub::ResizeCanvas(int32_t width, int32_t height) int32_t ScreenCaptureServiceStub::SkipPrivacyMode(std::vector &windowIDsVec) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SkipPrivacyMode(windowIDsVec); @@ -304,7 +281,6 @@ int32_t ScreenCaptureServiceStub::SkipPrivacyMode(std::vector &windowI int32_t ScreenCaptureServiceStub::SetMaxVideoFrameRate(int32_t frameRate) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetMaxVideoFrameRate(frameRate); @@ -313,7 +289,6 @@ int32_t ScreenCaptureServiceStub::SetMaxVideoFrameRate(int32_t frameRate) int32_t ScreenCaptureServiceStub::AcquireAudioBuffer(std::shared_ptr &audioBuffer, AudioCaptureSourceType type) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->AcquireAudioBuffer(audioBuffer, type); @@ -322,7 +297,6 @@ int32_t ScreenCaptureServiceStub::AcquireAudioBuffer(std::shared_ptr &surfaceBuffer, int32_t &fence, int64_t ×tamp, OHOS::Rect &damage) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->AcquireVideoBuffer(surfaceBuffer, fence, timestamp, damage); @@ -330,7 +304,6 @@ int32_t ScreenCaptureServiceStub::AcquireVideoBuffer(sptr & int32_t ScreenCaptureServiceStub::ReleaseAudioBuffer(AudioCaptureSourceType type) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->ReleaseAudioBuffer(type); @@ -338,7 +311,6 @@ int32_t ScreenCaptureServiceStub::ReleaseAudioBuffer(AudioCaptureSourceType type int32_t ScreenCaptureServiceStub::ReleaseVideoBuffer() { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->ReleaseVideoBuffer(); @@ -346,7 +318,6 @@ int32_t ScreenCaptureServiceStub::ReleaseVideoBuffer() int32_t ScreenCaptureServiceStub::SetScreenCaptureStrategy(ScreenCaptureStrategy strategy) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetScreenCaptureStrategy(strategy); @@ -354,7 +325,6 @@ int32_t ScreenCaptureServiceStub::SetScreenCaptureStrategy(ScreenCaptureStrategy int32_t ScreenCaptureServiceStub::SetCaptureArea(uint64_t displayId, OHOS::Rect area) { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_RET_LOG(screenCaptureServer_ != nullptr, MSERR_INVALID_STATE, "screen capture server is nullptr"); return screenCaptureServer_->SetCaptureArea(displayId, area); @@ -719,7 +689,6 @@ int32_t ScreenCaptureServiceStub::SetListenerObject(MessageParcel &data, Message void ScreenCaptureServiceStub::Release() { - std::shared_lock read_lock(rw_lock_); CHECK_AND_RETURN_LOG(screenCaptureServer_ != nullptr, "screen capture server is nullptr"); return screenCaptureServer_->Release(); } diff --git a/services/services/screen_capture/ipc/screen_capture_service_stub.h b/services/services/screen_capture/ipc/screen_capture_service_stub.h index e4ad70b83..e459ca60a 100644 --- a/services/services/screen_capture/ipc/screen_capture_service_stub.h +++ b/services/services/screen_capture/ipc/screen_capture_service_stub.h @@ -96,7 +96,6 @@ private: int32_t DestroyStub(MessageParcel &data, MessageParcel &reply); std::mutex mutex_; - mutable std::shared_mutex rw_lock_; std::shared_ptr screenCaptureServer_ = nullptr; using screenCaptureStubFuncs = int32_t(ScreenCaptureServiceStub::*)(MessageParcel &data, MessageParcel &reply); std::map screenCaptureStubFuncs_; -- Gitee From e4e75fe961a30d6b7c6f6ad8875f5d1a201ac5d0 Mon Sep 17 00:00:00 2001 From: zeng Date: Sat, 30 Aug 2025 11:13:35 +0800 Subject: [PATCH 06/13] update Signed-off-by: zeng --- .../services/screen_capture/server/screen_capture_server.cpp | 5 ----- .../services/screen_capture/server/screen_capture_server.h | 1 - 2 files changed, 6 deletions(-) diff --git a/services/services/screen_capture/server/screen_capture_server.cpp b/services/services/screen_capture/server/screen_capture_server.cpp index cca564faa..3fa90234b 100644 --- a/services/services/screen_capture/server/screen_capture_server.cpp +++ b/services/services/screen_capture/server/screen_capture_server.cpp @@ -1047,7 +1047,6 @@ void ScreenCaptureServer::SetDisplayId(uint64_t displayId) void ScreenCaptureServer::SetMissionId(uint64_t missionId) { - std::unique_lock write_lock_(rw_lock_); missionIds_.emplace_back(missionId); } @@ -2021,7 +2020,6 @@ void ScreenCaptureServer::PostStartScreenCapture(bool isSuccess) RegisterPrivateWindowListener(); RegisterScreenConnectListener(); RegisterLanguageSwitchListener(); - std::shared_lock read_lock_(rw_lock_); if (captureConfig_.captureMode == CAPTURE_SPECIFIED_WINDOW && missionIds_.size() == 1) { SetWindowIdList(missionIds_.front()); SetDefaultDisplayIdOfWindows(); @@ -2910,7 +2908,6 @@ int32_t ScreenCaptureServer::CreateVirtualScreen(const std::string &name, sptrGetHeight(), display->GetVirtualPixelRatio()); virScrOption.density_ = display->GetVirtualPixelRatio(); } - std::shared_lock read_lock_(rw_lock_); if (missionIds_.size() > 0 && captureConfig_.captureMode == CAPTURE_SPECIFIED_WINDOW) { virScrOption.missionIds_ = missionIds_; } else if (captureConfig_.videoInfo.videoCapInfo.taskIDs.size() > 0 && @@ -2990,7 +2987,6 @@ int32_t ScreenCaptureServer::PrepareVirtualScreenMirror() uint64_t ScreenCaptureServer::GetDisplayIdOfWindows(uint64_t displayId) { uint64_t defaultDisplayIdValue = displayId; - std::shared_lock read_lock_(rw_lock_); if (missionIds_.size() > 0) { std::unordered_map windowDisplayIdMap; auto ret = WindowManager::GetInstance().GetDisplayIdByWindowId(missionIds_, windowDisplayIdMap); @@ -3211,7 +3207,6 @@ VirtualScreenOption ScreenCaptureServer::InitVirtualScreenOption(const std::stri MediaTrace trace("ScreenCaptureServer::InitVirtualScreenOption"); MEDIA_LOGI("ScreenCaptureServer: 0x%{public}06" PRIXPTR " InitVirtualScreenOption start, name:%{public}s.", FAKE_POINTER(this), name.c_str()); - std::unique_lock write_lock_(rw_lock_); VirtualScreenOption virScrOption = { .name_ = name, .width_ = captureConfig_.videoInfo.videoCapInfo.videoFrameWidth, diff --git a/services/services/screen_capture/server/screen_capture_server.h b/services/services/screen_capture/server/screen_capture_server.h index c87f193ef..d952083e7 100644 --- a/services/services/screen_capture/server/screen_capture_server.h +++ b/services/services/screen_capture/server/screen_capture_server.h @@ -284,7 +284,6 @@ private: std::mutex mutex_; std::mutex cbMutex_; std::mutex inCallMutex_; - mutable std::shared_mutex rw_lock_; std::shared_ptr screenCaptureObserverCb_ = nullptr; std::shared_ptr screenCaptureCb_ = nullptr; bool canvasRotation_ = false; -- Gitee From f90bddcecf395159e863852c591465ec2812194b Mon Sep 17 00:00:00 2001 From: zeng Date: Mon, 1 Sep 2025 22:39:09 +0800 Subject: [PATCH 07/13] update missionId_lock Signed-off-by: zeng --- .../screen_capture/server/screen_capture_server.cpp | 6 ++++++ .../services/screen_capture/server/screen_capture_server.h | 1 + 2 files changed, 7 insertions(+) diff --git a/services/services/screen_capture/server/screen_capture_server.cpp b/services/services/screen_capture/server/screen_capture_server.cpp index 3fa90234b..07d9586c7 100644 --- a/services/services/screen_capture/server/screen_capture_server.cpp +++ b/services/services/screen_capture/server/screen_capture_server.cpp @@ -383,6 +383,7 @@ void ScreenCaptureServer::SetDefaultDisplayIdOfWindows() uint64_t defaultDisplayId = defaultDisplay->GetScreenId(); std::unordered_map windowDisplayIdMap; + std::shared_lock read_lock(rw_lock_); auto ret = WindowManager::GetInstance().GetDisplayIdByWindowId(missionIds_, windowDisplayIdMap); CHECK_AND_RETURN_LOG(ret == Rosen::WMError::WM_OK, "SetDefaultDisplayIdOfWindows GetDisplayIdByWindowId failed"); MEDIA_LOGI("SetDefaultDisplayIdOfWindows GetDisplayIdByWindowId ret: %{public}d", ret); @@ -1047,6 +1048,7 @@ void ScreenCaptureServer::SetDisplayId(uint64_t displayId) void ScreenCaptureServer::SetMissionId(uint64_t missionId) { + std::unique_lock write_lock(rw_lock_); missionIds_.emplace_back(missionId); } @@ -2020,6 +2022,7 @@ void ScreenCaptureServer::PostStartScreenCapture(bool isSuccess) RegisterPrivateWindowListener(); RegisterScreenConnectListener(); RegisterLanguageSwitchListener(); + std::shared_lock read_lock(rw_lock_); if (captureConfig_.captureMode == CAPTURE_SPECIFIED_WINDOW && missionIds_.size() == 1) { SetWindowIdList(missionIds_.front()); SetDefaultDisplayIdOfWindows(); @@ -2908,6 +2911,7 @@ int32_t ScreenCaptureServer::CreateVirtualScreen(const std::string &name, sptrGetHeight(), display->GetVirtualPixelRatio()); virScrOption.density_ = display->GetVirtualPixelRatio(); } + std::shared_lock read_lock(rw_lock_); if (missionIds_.size() > 0 && captureConfig_.captureMode == CAPTURE_SPECIFIED_WINDOW) { virScrOption.missionIds_ = missionIds_; } else if (captureConfig_.videoInfo.videoCapInfo.taskIDs.size() > 0 && @@ -2987,6 +2991,7 @@ int32_t ScreenCaptureServer::PrepareVirtualScreenMirror() uint64_t ScreenCaptureServer::GetDisplayIdOfWindows(uint64_t displayId) { uint64_t defaultDisplayIdValue = displayId; + std::shared_lock read_lock(rw_lock_); if (missionIds_.size() > 0) { std::unordered_map windowDisplayIdMap; auto ret = WindowManager::GetInstance().GetDisplayIdByWindowId(missionIds_, windowDisplayIdMap); @@ -3207,6 +3212,7 @@ VirtualScreenOption ScreenCaptureServer::InitVirtualScreenOption(const std::stri MediaTrace trace("ScreenCaptureServer::InitVirtualScreenOption"); MEDIA_LOGI("ScreenCaptureServer: 0x%{public}06" PRIXPTR " InitVirtualScreenOption start, name:%{public}s.", FAKE_POINTER(this), name.c_str()); + std::unique_lock write_lock(rw_lock_); VirtualScreenOption virScrOption = { .name_ = name, .width_ = captureConfig_.videoInfo.videoCapInfo.videoFrameWidth, diff --git a/services/services/screen_capture/server/screen_capture_server.h b/services/services/screen_capture/server/screen_capture_server.h index d952083e7..c87f193ef 100644 --- a/services/services/screen_capture/server/screen_capture_server.h +++ b/services/services/screen_capture/server/screen_capture_server.h @@ -284,6 +284,7 @@ private: std::mutex mutex_; std::mutex cbMutex_; std::mutex inCallMutex_; + mutable std::shared_mutex rw_lock_; std::shared_ptr screenCaptureObserverCb_ = nullptr; std::shared_ptr screenCaptureCb_ = nullptr; bool canvasRotation_ = false; -- Gitee From 048a162f9caafba2ddc89f4d77e65d016c27666b Mon Sep 17 00:00:00 2001 From: zeng Date: Tue, 2 Sep 2025 11:22:38 +0800 Subject: [PATCH 08/13] update Signed-off-by: zeng --- .../server/screen_capture_server.cpp | 26 +++++++++++-------- .../server/screen_capture_server.h | 1 + 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/services/services/screen_capture/server/screen_capture_server.cpp b/services/services/screen_capture/server/screen_capture_server.cpp index 07d9586c7..a6a137c0b 100644 --- a/services/services/screen_capture/server/screen_capture_server.cpp +++ b/services/services/screen_capture/server/screen_capture_server.cpp @@ -2006,17 +2006,7 @@ void ScreenCaptureServer::PostStartScreenCapture(bool isSuccess) MEDIA_LOGI("PostStartScreenCaptureSuccessAction START."); PostStartScreenCaptureSuccessAction(); } else { - MEDIA_LOGE("PostStartScreenCapture handle failure"); - if (isPrivacyAuthorityEnabled_) { - screenCaptureCb_->OnError(ScreenCaptureErrorType::SCREEN_CAPTURE_ERROR_INTERNAL, - AVScreenCaptureErrorCode::SCREEN_CAPTURE_ERR_UNKNOWN); - } - StopScreenCaptureInner(AVScreenCaptureStateCode::SCREEN_CAPTURE_STATE_INVLID); - isPrivacyAuthorityEnabled_ = false; - isSurfaceMode_ = false; - captureState_ = AVScreenCaptureState::STOPPED; - SetErrorInfo(MSERR_UNKNOWN, "PostStartScreenCapture handle failure", - StopReason::POST_START_SCREENCAPTURE_HANDLE_FAILURE, IsUserPrivacyAuthorityNeeded()); + PostStartScreenCaptureFaile(); return; } RegisterPrivateWindowListener(); @@ -2031,6 +2021,20 @@ void ScreenCaptureServer::PostStartScreenCapture(bool isSuccess) MEDIA_LOGI("ScreenCaptureServer: 0x%{public}06" PRIXPTR " PostStartScreenCapture end.", FAKE_POINTER(this)); } +void ScreenCaptureServer::PostStartScreenCaptureFaile(){ + MEDIA_LOGE("PostStartScreenCapture handle failure"); + if (isPrivacyAuthorityEnabled_) { + screenCaptureCb_->OnError(ScreenCaptureErrorType::SCREEN_CAPTURE_ERROR_INTERNAL, + AVScreenCaptureErrorCode::SCREEN_CAPTURE_ERR_UNKNOWN); + } + StopScreenCaptureInner(AVScreenCaptureStateCode::SCREEN_CAPTURE_STATE_INVLID); + isPrivacyAuthorityEnabled_ = false; + isSurfaceMode_ = false; + captureState_ = AVScreenCaptureState::STOPPED; + SetErrorInfo(MSERR_UNKNOWN, "PostStartScreenCapture handle failure", + StopReason::POST_START_SCREENCAPTURE_HANDLE_FAILURE, IsUserPrivacyAuthorityNeeded()); +} + #ifdef SUPPORT_SCREEN_CAPTURE_WINDOW_NOTIFICATION int32_t ScreenCaptureServer::TryStartNotification() { diff --git a/services/services/screen_capture/server/screen_capture_server.h b/services/services/screen_capture/server/screen_capture_server.h index c87f193ef..daa75e1f9 100644 --- a/services/services/screen_capture/server/screen_capture_server.h +++ b/services/services/screen_capture/server/screen_capture_server.h @@ -161,6 +161,7 @@ private: bool IsFirstStartPidInstance(int32_t pid); bool FirstPidUpdatePrivacyUsingPermissionState(int32_t pid); void PostStartScreenCapture(bool isSuccess); + void PostStartScreenCaptureFaile(); void PostStartScreenCaptureSuccessAction(); int32_t InitRecorderInfo(std::shared_ptr &recorder, AudioCaptureInfo audioInfo); int32_t InitRecorderMix(); -- Gitee From 56b0c7b7252aeda170468f65bc2088e912a10e39 Mon Sep 17 00:00:00 2001 From: zeng Date: Tue, 2 Sep 2025 14:06:47 +0800 Subject: [PATCH 09/13] update Signed-off-by: zeng --- .../services/screen_capture/server/screen_capture_server.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/services/screen_capture/server/screen_capture_server.cpp b/services/services/screen_capture/server/screen_capture_server.cpp index a6a137c0b..443a88635 100644 --- a/services/services/screen_capture/server/screen_capture_server.cpp +++ b/services/services/screen_capture/server/screen_capture_server.cpp @@ -2021,7 +2021,8 @@ void ScreenCaptureServer::PostStartScreenCapture(bool isSuccess) MEDIA_LOGI("ScreenCaptureServer: 0x%{public}06" PRIXPTR " PostStartScreenCapture end.", FAKE_POINTER(this)); } -void ScreenCaptureServer::PostStartScreenCaptureFaile(){ +void ScreenCaptureServer::PostStartScreenCaptureFaile() +{ MEDIA_LOGE("PostStartScreenCapture handle failure"); if (isPrivacyAuthorityEnabled_) { screenCaptureCb_->OnError(ScreenCaptureErrorType::SCREEN_CAPTURE_ERROR_INTERNAL, -- Gitee From b440971bd2a8fe0b2932522fe6898bdab18e145d Mon Sep 17 00:00:00 2001 From: zeng Date: Tue, 2 Sep 2025 19:52:46 +0800 Subject: [PATCH 10/13] update Signed-off-by: zeng --- .../services/screen_capture/server/screen_capture_server.cpp | 2 +- services/services/screen_capture/server/screen_capture_server.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/services/services/screen_capture/server/screen_capture_server.cpp b/services/services/screen_capture/server/screen_capture_server.cpp index 443a88635..0e5371786 100644 --- a/services/services/screen_capture/server/screen_capture_server.cpp +++ b/services/services/screen_capture/server/screen_capture_server.cpp @@ -2021,7 +2021,7 @@ void ScreenCaptureServer::PostStartScreenCapture(bool isSuccess) MEDIA_LOGI("ScreenCaptureServer: 0x%{public}06" PRIXPTR " PostStartScreenCapture end.", FAKE_POINTER(this)); } -void ScreenCaptureServer::PostStartScreenCaptureFaile() +void ScreenCaptureServer::PostStartScreenCaptureFail() { MEDIA_LOGE("PostStartScreenCapture handle failure"); if (isPrivacyAuthorityEnabled_) { diff --git a/services/services/screen_capture/server/screen_capture_server.h b/services/services/screen_capture/server/screen_capture_server.h index daa75e1f9..5329431e6 100644 --- a/services/services/screen_capture/server/screen_capture_server.h +++ b/services/services/screen_capture/server/screen_capture_server.h @@ -161,7 +161,7 @@ private: bool IsFirstStartPidInstance(int32_t pid); bool FirstPidUpdatePrivacyUsingPermissionState(int32_t pid); void PostStartScreenCapture(bool isSuccess); - void PostStartScreenCaptureFaile(); + void PostStartScreenCaptureFail(); void PostStartScreenCaptureSuccessAction(); int32_t InitRecorderInfo(std::shared_ptr &recorder, AudioCaptureInfo audioInfo); int32_t InitRecorderMix(); -- Gitee From 26c846a0e3ab6128e7940cfedd64bff9ef12efc8 Mon Sep 17 00:00:00 2001 From: zeng Date: Tue, 2 Sep 2025 19:55:17 +0800 Subject: [PATCH 11/13] update Signed-off-by: zeng --- .../services/screen_capture/server/screen_capture_server.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/services/screen_capture/server/screen_capture_server.cpp b/services/services/screen_capture/server/screen_capture_server.cpp index 0e5371786..c346fda1c 100644 --- a/services/services/screen_capture/server/screen_capture_server.cpp +++ b/services/services/screen_capture/server/screen_capture_server.cpp @@ -2006,7 +2006,7 @@ void ScreenCaptureServer::PostStartScreenCapture(bool isSuccess) MEDIA_LOGI("PostStartScreenCaptureSuccessAction START."); PostStartScreenCaptureSuccessAction(); } else { - PostStartScreenCaptureFaile(); + PostStartScreenCaptureFail(); return; } RegisterPrivateWindowListener(); -- Gitee From 3df92fe040a163037e257378f0e05f7ee0e1be20 Mon Sep 17 00:00:00 2001 From: zeng Date: Tue, 2 Sep 2025 21:49:20 +0800 Subject: [PATCH 12/13] update Signed-off-by: zeng --- .../screen_capture/server/screen_capture_server.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/services/services/screen_capture/server/screen_capture_server.cpp b/services/services/screen_capture/server/screen_capture_server.cpp index c346fda1c..122705d34 100644 --- a/services/services/screen_capture/server/screen_capture_server.cpp +++ b/services/services/screen_capture/server/screen_capture_server.cpp @@ -383,10 +383,12 @@ void ScreenCaptureServer::SetDefaultDisplayIdOfWindows() uint64_t defaultDisplayId = defaultDisplay->GetScreenId(); std::unordered_map windowDisplayIdMap; - std::shared_lock read_lock(rw_lock_); - auto ret = WindowManager::GetInstance().GetDisplayIdByWindowId(missionIds_, windowDisplayIdMap); - CHECK_AND_RETURN_LOG(ret == Rosen::WMError::WM_OK, "SetDefaultDisplayIdOfWindows GetDisplayIdByWindowId failed"); - MEDIA_LOGI("SetDefaultDisplayIdOfWindows GetDisplayIdByWindowId ret: %{public}d", ret); + { + std::shared_lock read_lock(rw_lock_); + auto ret = WindowManager::GetInstance().GetDisplayIdByWindowId(missionIds_, windowDisplayIdMap); + CHECK_AND_RETURN_LOG(ret == Rosen::WMError::WM_OK, "SetDefaultDisplayIdOfWindows GetDisplayIdByWindowId failed"); + MEDIA_LOGI("SetDefaultDisplayIdOfWindows GetDisplayIdByWindowId ret: %{public}d", ret); + } for (const auto& pair : windowDisplayIdMap) { MEDIA_LOGD("SetDefaultDisplayIdOfWindows 0x%{public}06" PRIXPTR " WindowId:%{public}" PRIu64 " in DisplayId:%{public}" PRIu64, FAKE_POINTER(this), pair.first, pair.second); -- Gitee From 7c02718c09efd6a2750acf01974e6c8e2fb1b699 Mon Sep 17 00:00:00 2001 From: zeng Date: Tue, 2 Sep 2025 22:42:37 +0800 Subject: [PATCH 13/13] update Signed-off-by: zeng --- .../services/screen_capture/server/screen_capture_server.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/services/screen_capture/server/screen_capture_server.cpp b/services/services/screen_capture/server/screen_capture_server.cpp index 122705d34..a1a6707ce 100644 --- a/services/services/screen_capture/server/screen_capture_server.cpp +++ b/services/services/screen_capture/server/screen_capture_server.cpp @@ -386,7 +386,8 @@ void ScreenCaptureServer::SetDefaultDisplayIdOfWindows() { std::shared_lock read_lock(rw_lock_); auto ret = WindowManager::GetInstance().GetDisplayIdByWindowId(missionIds_, windowDisplayIdMap); - CHECK_AND_RETURN_LOG(ret == Rosen::WMError::WM_OK, "SetDefaultDisplayIdOfWindows GetDisplayIdByWindowId failed"); + CHECK_AND_RETURN_LOG(ret == Rosen::WMError::WM_OK, + "SetDefaultDisplayIdOfWindows GetDisplayIdByWindowId failed"); MEDIA_LOGI("SetDefaultDisplayIdOfWindows GetDisplayIdByWindowId ret: %{public}d", ret); } for (const auto& pair : windowDisplayIdMap) { -- Gitee