From c4fadfa5e6038492cf320c98d73780546c477e86 Mon Sep 17 00:00:00 2001 From: suozhipeng Date: Fri, 23 Feb 2024 14:03:58 +0800 Subject: [PATCH] fix: delete dimming ffrt queue Signed-off-by: suozhipeng --- .../include/brightness_dimming.h | 4 +++ brightness_manager/src/brightness_dimming.cpp | 26 ++++++++++++++++--- brightness_manager/src/brightness_service.cpp | 5 ++++ 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/brightness_manager/include/brightness_dimming.h b/brightness_manager/include/brightness_dimming.h index f2275c4..a7ca40a 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 68697b3..a71de6c 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 b7470fb..bf34f72 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) -- Gitee