diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index 902af226c8b3af54bb63f201f19ff629875f6a61..4ccc1723168ab326dfaa4bc6c35b94d7afd86e58 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -1230,7 +1230,7 @@ private: SystemSessionConfig systemConfig_; float snapshotScale_ = 0.5; int32_t brightnessSessionId_ = INVALID_SESSION_ID; - float displayBrightness_ = UNDEFINED_BRIGHTNESS; + std::atomic displayBrightness_ = UNDEFINED_BRIGHTNESS; bool isScreenLocked_ { false }; bool isPrepareTerminateEnable_ { false }; diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 1a104d886fd6297ac12b78317480808ed51db06c..08d1da27cc7784b137f62d38e86557b33d212d63 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -6123,7 +6123,7 @@ WSError SceneSessionManager::SetBrightness(const sptr& sceneSessio #ifdef POWERMGR_DISPLAY_MANAGER_ENABLE if (GetDisplayBrightness() != brightness && GetFocusedSessionId() == sceneSession->GetPersistentId()) { - PostBrightnessTask(brightness); + PostBrightnessTask(sceneSession, brightness); } #else TLOGD(WmsLogTag::WMS_ATTRIBUTE, "Can not found the sub system of DisplayPowerMgr"); @@ -6132,21 +6132,40 @@ WSError SceneSessionManager::SetBrightness(const sptr& sceneSessio return WSError::WS_OK; } -void SceneSessionManager::PostBrightnessTask(float brightness) +void SceneSessionManager::PostBrightnessTask(const sptr& sceneSession, float brightness) { #ifdef POWERMGR_DISPLAY_MANAGER_ENABLE - bool postTaskRet = true; bool isPC = systemConfig_.IsPcWindow(); if (std::fabs(brightness - UNDEFINED_BRIGHTNESS) < std::numeric_limits::min()) { if (!isPC) { - auto task = [] { + wptr weakSceneSession(sceneSession); + auto task = [where = __func__, weakSceneSession] { + auto sceneSession = weakSceneSession.promote(); + if (sceneSession == nullptr) { + TLOGNE(WmsLogTag::WMS_ATTRIBUTE, "%{public}s sceneSession is null", where); + return; + } + if (!sceneSession->IsSessionForeground()) { + TLOGNW(WmsLogTag::WMS_ATTRIBUTE, "%{public}s sceneSession state is invalid", where); + return; + } DisplayPowerMgr::DisplayPowerMgrClient::GetInstance().RestoreBrightness(); + SetDisplayBrightness(UNDEFINED_BRIGHTNESS); // UNDEFINED_BRIGHTNESS means system default brightness }; - postTaskRet = eventHandler_->PostTask(task, "DisplayPowerMgr:RestoreBrightness", 0); + eventHandler_->AddExportTask("DisplayPowerMgr:RestoreBrightness", task); } - SetDisplayBrightness(UNDEFINED_BRIGHTNESS); // UNDEFINED_BRIGHTNESS means system default brightness } else { - auto task = [brightness, isPC] { + wptr weakSceneSession(sceneSession); + auto task = [where = __func__, weakSceneSession, brightness, isPC] { + auto sceneSession = weakSceneSession.promote(); + if (sceneSession == nullptr) { + TLOGNE(WmsLogTag::WMS_ATTRIBUTE, "%{public}s sceneSession is null", where); + return; + } + if (!sceneSession->IsSessionForeground()) { + TLOGNW(WmsLogTag::WMS_ATTRIBUTE, "%{public}s sceneSession state is invalid", where); + return; + } if (isPC) { DisplayPowerMgr::DisplayPowerMgrClient::GetInstance().SetBrightness( static_cast(brightness * MAX_BRIGHTNESS)); @@ -6154,12 +6173,9 @@ void SceneSessionManager::PostBrightnessTask(float brightness) DisplayPowerMgr::DisplayPowerMgrClient::GetInstance().OverrideBrightness( static_cast(brightness * MAX_BRIGHTNESS)); } + SetDisplayBrightness(brightness); }; - postTaskRet = eventHandler_->PostTask(task, "DisplayPowerMgr:OverrideBrightness", 0); - SetDisplayBrightness(brightness); - } - if (!postTaskRet) { - TLOGE(WmsLogTag::WMS_ATTRIBUTE, "post task failed. task is SetBrightness"); + eventHandler_->AddExportTask("DisplayPowerMgr:OverrideBrightness", task); } #endif } @@ -6185,17 +6201,23 @@ WSError SceneSessionManager::UpdateBrightness(int32_t persistentId) TLOGI(WmsLogTag::WMS_ATTRIBUTE, "Brightness: [%{public}f, %{public}f]", GetDisplayBrightness(), brightness); if (std::fabs(brightness - UNDEFINED_BRIGHTNESS) < std::numeric_limits::min()) { if (IsNeedUpdateBrightness(persistentId, brightness)) { - TLOGI(WmsLogTag::WMS_ATTRIBUTE, "adjust brightness with default value"); - DisplayPowerMgr::DisplayPowerMgrClient::GetInstance().RestoreBrightness(); - SetDisplayBrightness(UNDEFINED_BRIGHTNESS); // UNDEFINED_BRIGHTNESS means system default brightness + auto task = [where = __func__] { + TLOGNI(WmsLogTag::WMS_ATTRIBUTE, "%{public}s adjust brightness with default value", where); + DisplayPowerMgr::DisplayPowerMgrClient::GetInstance().RestoreBrightness(); + SetDisplayBrightness(UNDEFINED_BRIGHTNESS); // UNDEFINED_BRIGHTNESS means system default brightness + }; + eventHandler_->AddExportTask("DisplayPowerMgr:UpdateBrightness_RestoreBrightness", task); brightnessSessionId_ = INVALID_WINDOW_ID; } } else { if (std::fabs(brightness - GetDisplayBrightness()) > std::numeric_limits::min()) { - TLOGI(WmsLogTag::WMS_ATTRIBUTE, "adjust brightness with value"); - DisplayPowerMgr::DisplayPowerMgrClient::GetInstance().OverrideBrightness( - static_cast(brightness * MAX_BRIGHTNESS)); - SetDisplayBrightness(brightness); + auto task = [where = __func__, brightness] { + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "%{public}s adjust brightness with value", where); + DisplayPowerMgr::DisplayPowerMgrClient::GetInstance().OverrideBrightness( + static_cast(brightness * MAX_BRIGHTNESS)); + SetDisplayBrightness(brightness); + }; + eventHandler_->AddExportTask("DisplayPowerMgr:UpdateBrightness_OverrideBrightness", task); } brightnessSessionId_ = sceneSession->GetPersistentId(); }