diff --git a/brightness_manager/include/brightness_service.h b/brightness_manager/include/brightness_service.h index 59156125bb2581153042ceb6cd0ff655e931f695..f51af0ad5897b173b1fae13368eb925eb8b9f306 100644 --- a/brightness_manager/include/brightness_service.h +++ b/brightness_manager/include/brightness_service.h @@ -38,7 +38,7 @@ #include "iremote_object.h" #include "light_lux_manager.h" #include "refbase.h" - +#include "ffrt_utils.h" #ifdef ENABLE_SENSOR_PART #include "sensor_agent_type.h" #endif @@ -191,6 +191,7 @@ private: LightLuxManager mLightLuxManager{}; BrightnessCalculationManager mBrightnessCalculationManager{}; sptr mFoldStatusistener; + std::shared_ptr queue_; }; } // namespace DisplayPowerMgr } // namespace OHOS diff --git a/brightness_manager/src/brightness_service.cpp b/brightness_manager/src/brightness_service.cpp index c5d48002fb2e3525d9735305eff799355b3bc66c..663ed02d3bd999a6e25ab792c984896b82045bab 100644 --- a/brightness_manager/src/brightness_service.cpp +++ b/brightness_manager/src/brightness_service.cpp @@ -58,7 +58,6 @@ constexpr uint32_t DEFAULT_ANIMATING_DURATION = 500; constexpr uint32_t DEFAULT_BRIGHTEN_DURATION = 2000; constexpr uint32_t DEFAULT_DARKEN_DURATION = 5000; -FFRTQueue g_queue("brightness_manager"); FFRTHandle g_cancelBoostTaskHandle{}; } @@ -92,6 +91,10 @@ BrightnessService& BrightnessService::Get() void BrightnessService::Init() { + queue_ = std::make_shared ("brightness_manager"); + if (queue_ == nullptr) { + return; + } #ifdef ENABLE_SENSOR_PART InitSensors(); mIsFoldDevice = Rosen::DisplayManager::GetInstance().IsFoldable(); @@ -115,6 +118,11 @@ void BrightnessService::DeInit() if (isFoldable) { UnRegisterFoldStatusListener(); } + if (queue_) { + queue_.reset(); + g_cancelBoostTaskHandle = nullptr; + DISPLAY_HILOGI(FEAT_BRIGHTNESS, "destruct brightness ffrt queue"); + } } void BrightnessService::FoldStatusLisener::OnFoldStatusChanged(Rosen::FoldStatus foldStatus) @@ -563,9 +571,9 @@ bool BrightnessService::BoostBrightness(uint32_t timeoutMs, uint32_t gradualDura } // If boost multi-times, we will resend the cancel boost event. - FFRTUtils::CancelTask(g_cancelBoostTaskHandle, g_queue); + FFRTUtils::CancelTask(g_cancelBoostTaskHandle, queue_); FFRTTask task = std::bind(&BrightnessService::CancelBoostBrightness, this, gradualDuration); - g_cancelBoostTaskHandle = FFRTUtils::SubmitDelayTask(task, timeoutMs, g_queue); + g_cancelBoostTaskHandle = FFRTUtils::SubmitDelayTask(task, timeoutMs, queue_); DISPLAY_HILOGI(FEAT_BRIGHTNESS, "BoostBrightness update timeout=%{public}u, isSuccess=%{public}d", timeoutMs, isSuccess); return isSuccess; @@ -578,7 +586,7 @@ bool BrightnessService::CancelBoostBrightness(uint32_t gradualDuration) DISPLAY_HILOGD(FEAT_BRIGHTNESS, "Brightness is not boost, no need to restore"); return false; } - FFRTUtils::CancelTask(g_cancelBoostTaskHandle, g_queue); + FFRTUtils::CancelTask(g_cancelBoostTaskHandle, queue_); mIsBrightnessBoosted = false; return UpdateBrightness(mCachedSettingBrightness, gradualDuration, true); } diff --git a/state_manager/service/native/src/display_power_mgr_service.cpp b/state_manager/service/native/src/display_power_mgr_service.cpp index 6ae56b5984ebb2ae57aec840a57ffbe6b142889b..e0dfe34726bdcb70703cd0f8e28bcf2f361c6691 100644 --- a/state_manager/service/native/src/display_power_mgr_service.cpp +++ b/state_manager/service/native/src/display_power_mgr_service.cpp @@ -55,6 +55,9 @@ DisplayPowerMgrService::DisplayPowerMgrService() = default; void DisplayPowerMgrService::Init() { queue_ = std::make_shared ("display_power_mgr_service"); + if (queue_ == nullptr) { + return; + } DISPLAY_HILOGI(COMP_SVC, "DisplayPowerMgrService Create"); std::vector displayIds = ScreenAction::GetAllDisplayId(); uint32_t retryCount = GET_DISPLAY_ID_RETRY_COUNT; @@ -336,6 +339,9 @@ bool DisplayPowerMgrService::OverrideBrightness(uint32_t value, uint32_t display bool DisplayPowerMgrService::OverrideDisplayOffDelay(uint32_t delayMs) { + if (!Permission::IsSystem()) { + return false; + } if (GetDisplayState(GetMainDisplayId()) != DisplayState::DISPLAY_ON || delayMs == DELAY_TIME_UNSET) { isDisplayDelayOff_ = false; return isDisplayDelayOff_; diff --git a/state_manager/test/unittest/src/display_power_mgr_brightness_test.cpp b/state_manager/test/unittest/src/display_power_mgr_brightness_test.cpp index 8a269ee500fa99e923346aad53c5d33bd5c68a9f..c21367aa02fb9788001b71e2844cb370f65d0fe1 100644 --- a/state_manager/test/unittest/src/display_power_mgr_brightness_test.cpp +++ b/state_manager/test/unittest/src/display_power_mgr_brightness_test.cpp @@ -517,7 +517,7 @@ HWTEST_F(DisplayPowerMgrBrightnessTest, DisplayPowerMgrOverrideBrightness008, Te /** * @tc.name: DisplayPowerMgrOverrideBrightness009 * @tc.desc: Set brightness after override brightness, then exit override brightness, the - * restore brightness should be the latest set brightness + * restore brightness should be brightness value of thr current device * @tc.type: FUNC * @tc.require: issueI6ACLX */ @@ -526,12 +526,13 @@ HWTEST_F(DisplayPowerMgrBrightnessTest, DisplayPowerMgrOverrideBrightness009, Te DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrOverrideBrightness009: fun is start"); const uint32_t OVERRIDE_BRIGHTNESS = 156; const uint32_t SET_BRIGHTNESS = 66; + auto currentBrightness = DisplayPowerMgrClient::GetInstance().GetBrightness(); DisplayPowerMgrClient::GetInstance().OverrideBrightness(OVERRIDE_BRIGHTNESS); bool ret = DisplayPowerMgrClient::GetInstance().SetBrightness(SET_BRIGHTNESS); EXPECT_FALSE(ret); DisplayPowerMgrClient::GetInstance().RestoreBrightness(); uint32_t deviceBrightness = DisplayPowerMgrClient::GetInstance().GetDeviceBrightness(); - EXPECT_EQ(SET_BRIGHTNESS, deviceBrightness); + EXPECT_EQ(currentBrightness, deviceBrightness); DISPLAY_HILOGI(LABEL_TEST, "DisplayPowerMgrOverrideBrightness009: fun is end"); }