From 4ce623536daea3d37c91f5bcacea7f00816ea499 Mon Sep 17 00:00:00 2001 From: yangziyong Date: Thu, 20 Jul 2023 13:53:50 +0800 Subject: [PATCH] fix: reduce the frequency of auto-brightness adjustment accessing the setting database Signed-off-by: yangziyong --- service/native/include/screen_controller.h | 5 ++++- .../native/src/display_power_mgr_service.cpp | 2 +- service/native/src/screen_controller.cpp | 19 ++++++++++++++----- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/service/native/include/screen_controller.h b/service/native/include/screen_controller.h index 6a5e54d..8a96311 100644 --- a/service/native/include/screen_controller.h +++ b/service/native/include/screen_controller.h @@ -34,7 +34,8 @@ public: class AnimateCallbackImpl : public AnimateCallback { public: - explicit AnimateCallbackImpl(const std::shared_ptr& action); + explicit AnimateCallbackImpl(const std::shared_ptr& action, + std::function callback); ~AnimateCallbackImpl() override = default; void OnStart() override; void OnChanged(uint32_t currentValue) override; @@ -42,6 +43,7 @@ public: void DiscountBrightness(double discount) override; private: const std::shared_ptr& action_; + std::function callback_; double discount_ {1.0}; }; @@ -54,6 +56,7 @@ public: bool SetBrightness(uint32_t value, uint32_t gradualDuration = 0); uint32_t GetBrightness(); uint32_t GetDeviceBrightness(); + uint32_t GetCachedSettingBrightness() const; bool DiscountBrightness(double discount, uint32_t gradualDuration = 0); bool OverrideBrightness(uint32_t value, uint32_t gradualDuration = 0); diff --git a/service/native/src/display_power_mgr_service.cpp b/service/native/src/display_power_mgr_service.cpp index f55c7fa..fd1f011 100644 --- a/service/native/src/display_power_mgr_service.cpp +++ b/service/native/src/display_power_mgr_service.cpp @@ -579,7 +579,7 @@ void DisplayPowerMgrService::AmbientLightCallback(SensorEvent* event) return; } AmbientLightData* data = (AmbientLightData*) event->data; - int32_t brightness = static_cast(mainDisp->second->GetBrightness()); + int32_t brightness = static_cast(mainDisp->second->GetCachedSettingBrightness()); uint32_t animationUpdateTime = mainDisp->second->GetAnimationUpdateTime(); int32_t changeBrightness = 0; if (pms->CalculateBrightness(data->intensity, brightness, changeBrightness)) { diff --git a/service/native/src/screen_controller.cpp b/service/native/src/screen_controller.cpp index d620c0c..5c93a46 100644 --- a/service/native/src/screen_controller.cpp +++ b/service/native/src/screen_controller.cpp @@ -44,13 +44,16 @@ ScreenController::ScreenController(uint32_t displayId) string name = "BrightnessController_" + to_string(displayId); if (animateCallback_ == nullptr) { - animateCallback_ = make_shared(action_); + animateCallback_ = make_shared(action_, [this](uint32_t brightness) { + SetSettingBrightness(brightness); + }); } animator_ = make_shared(name, animateCallback_); } -ScreenController::AnimateCallbackImpl::AnimateCallbackImpl(const std::shared_ptr& action) - : action_(action) +ScreenController::AnimateCallbackImpl::AnimateCallbackImpl(const std::shared_ptr& action, + std::function callback) + : action_(action), callback_(callback) { } @@ -64,7 +67,8 @@ void ScreenController::AnimateCallbackImpl::OnChanged(uint32_t currentValue) auto brightness = DisplayPowerMgrService::GetSafeBrightness(static_cast(currentValue * discount_)); bool isSucc = action_->SetBrightness(brightness); if (isSucc) { - FFRTUtils::SubmitTask(std::bind(&DisplaySettingHelper::SetSettingBrightness, currentValue)); + FFRTTask task = std::bind([this](uint32_t value) { callback_(value); }, currentValue); + FFRTUtils::SubmitTask(task); DISPLAY_HILOGD(FEAT_BRIGHTNESS, "Update brightness, brightness=%{public}u", currentValue); } else { DISPLAY_HILOGD(FEAT_BRIGHTNESS, "Update brightness failed, brightness=%{public}d", currentValue); @@ -165,6 +169,11 @@ uint32_t ScreenController::GetDeviceBrightness() return action_->GetBrightness(); } +uint32_t ScreenController::GetCachedSettingBrightness() const +{ + return cachedSettingBrightness_; +} + bool ScreenController::DiscountBrightness(double discount, uint32_t gradualDuration) { if (!CanDiscountBrightness()) { @@ -310,7 +319,7 @@ bool ScreenController::UpdateBrightness(uint32_t value, uint32_t gradualDuration DISPLAY_HILOGD(FEAT_BRIGHTNESS, "Updated brightness is %{public}s, brightness: %{public}u", isSucc ? "succ" : "failed", brightness); if (isSucc && updateSetting) { - FFRTUtils::SubmitTask(std::bind(&DisplaySettingHelper::SetSettingBrightness, value)); + FFRTUtils::SubmitTask(std::bind(&ScreenController::SetSettingBrightness, this, value)); } return isSucc; } -- Gitee