diff --git a/brightness_manager/include/brightness_dimming.h b/brightness_manager/include/brightness_dimming.h index f2275c4fec820d2e09ee7b5b99b390d8406d2463..a7ca40af47a7d35435fc589e72bbabf4f17e55ae 100644 --- a/brightness_manager/include/brightness_dimming.h +++ b/brightness_manager/include/brightness_dimming.h @@ -20,6 +20,7 @@ #include #include #include +#include "ffrt_utils.h" #include #include #include @@ -42,6 +43,8 @@ public: void StopDimming(); bool IsDimming() const; uint32_t GetDimmingUpdateTime() const; + bool Init(); + void Reset(); private: static const uint32_t DEFAULT_UPDATE_TIME = 32; static const int32_t STRIDE_ABSOLUTE_MIN = 1; @@ -59,6 +62,7 @@ private: std::atomic_int32_t mStride{}; std::atomic_uint32_t mCurrentBrightness{}; std::atomic_uint32_t mCurrentStep{}; + std::shared_ptr mQueue; }; } // namespace DisplayPowerMgr } // namespace OHOS diff --git a/brightness_manager/src/brightness_dimming.cpp b/brightness_manager/src/brightness_dimming.cpp index 68697b3490e991ffb13c45f53c9541752bff87c1..a71de6cf8fda1ebe10d7b5b7568069f8b27dd827 100644 --- a/brightness_manager/src/brightness_dimming.cpp +++ b/brightness_manager/src/brightness_dimming.cpp @@ -23,7 +23,6 @@ namespace OHOS { namespace DisplayPowerMgr { using namespace PowerMgr; namespace { -FFRTQueue g_animatorQueue("brightness_animator_queue"); FFRTHandle g_animatorTaskHandle; } @@ -39,6 +38,25 @@ BrightnessDimming::BrightnessDimming(const std::string& name, std::shared_ptr
("brightness_animator_queue"); + if (mQueue == nullptr) { + return false; + } + return true; +} + +void BrightnessDimming::Reset() +{ + DISPLAY_HILOGI(FEAT_BRIGHTNESS, "start dimming queue"); + if (mQueue) { + mQueue.reset(); + g_animatorTaskHandle = nullptr; + DISPLAY_HILOGI(FEAT_BRIGHTNESS, "destruct dimming_queue"); + } +} + void BrightnessDimming::StartDimming(uint32_t from, uint32_t to, uint32_t duration) { if (mDimming) { @@ -76,13 +94,13 @@ void BrightnessDimming::StartDimming(uint32_t from, uint32_t to, uint32_t durati mCurrentStep = 0; mDimming = true; FFRTTask task = std::bind(&BrightnessDimming::NextStep, this); - g_animatorTaskHandle = FFRTUtils::SubmitDelayTask(task, mUpdateTime, g_animatorQueue); + g_animatorTaskHandle = FFRTUtils::SubmitDelayTask(task, mUpdateTime, mQueue); } void BrightnessDimming::StopDimming() { mDimming = false; - FFRTUtils::CancelTask(g_animatorTaskHandle, g_animatorQueue); + FFRTUtils::CancelTask(g_animatorTaskHandle, mQueue); if (mCallback == nullptr) { DISPLAY_HILOGW(FEAT_BRIGHTNESS, "Callback is nullptr"); return; @@ -131,7 +149,7 @@ void BrightnessDimming::NextStep() mCurrentBrightness = nextBrightness; mCallback->OnChanged(mCurrentBrightness); FFRTTask task = std::bind(&BrightnessDimming::NextStep, this); - g_animatorTaskHandle = FFRTUtils::SubmitDelayTask(task, mUpdateTime, g_animatorQueue); + g_animatorTaskHandle = FFRTUtils::SubmitDelayTask(task, mUpdateTime, mQueue); } } else { DISPLAY_HILOGD(FEAT_BRIGHTNESS, "next step last mCurrentBrightness=%{public}u, mToBrightness=%{public}u", diff --git a/brightness_manager/src/brightness_service.cpp b/brightness_manager/src/brightness_service.cpp index b7470fb8a8c04ef4aeb649b592f086810bbca3f0..bf34f72706ed558e2089dfe6222a8849b83705f1 100644 --- a/brightness_manager/src/brightness_service.cpp +++ b/brightness_manager/src/brightness_service.cpp @@ -95,6 +95,9 @@ void BrightnessService::Init() if (queue_ == nullptr) { return; } + if (!mDimming->Init()) { + return; + } #ifdef ENABLE_SENSOR_PART InitSensors(); mIsFoldDevice = Rosen::DisplayManager::GetInstance().IsFoldable(); @@ -123,6 +126,8 @@ void BrightnessService::DeInit() g_cancelBoostTaskHandle = nullptr; DISPLAY_HILOGI(FEAT_BRIGHTNESS, "destruct brightness ffrt queue"); } + + mDimming->Reset(); } void BrightnessService::FoldStatusLisener::OnFoldStatusChanged(Rosen::FoldStatus foldStatus)