diff options
author | Chris Lu <luchris@google.com> | 2023-06-28 08:53:39 +0000 |
---|---|---|
committer | Chris Lu <luchris@google.com> | 2023-07-13 09:31:14 +0800 |
commit | fe4eba4783907fd17e4d38f7f34f50f8e8869616 (patch) | |
tree | ee9ade01edb60441315b8faf31316882ba1c575e | |
parent | 5516d1bb30682415058c04a04801603bcae46ab7 (diff) | |
download | zuma-fe4eba4783907fd17e4d38f7f34f50f8e8869616.tar.gz |
libhwc2.1: OperationRateManager: save target operation rate
Save target operation rate instead of writing to the sysfs node
since we will change it via atomic commit path.
Bug: 284094183
Bug: 289042122
Test: change operation rate via brightness/config/power mode
Change-Id: I106de21ec0bb4094542aefc7b7109ab4dd9f304c
Merged-In: I106de21ec0bb4094542aefc7b7109ab4dd9f304c
-rw-r--r-- | libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp | 47 | ||||
-rw-r--r-- | libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h | 7 |
2 files changed, 20 insertions, 34 deletions
diff --git a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp index 6917f16..36d3f93 100644 --- a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp +++ b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp @@ -55,35 +55,23 @@ int32_t ExynosPrimaryDisplayModule::validateWinConfigData() return ExynosDisplay::validateWinConfigData(); } -int32_t ExynosPrimaryDisplayModule::OperationRateManager::getOperationRate() { - std::string op_rate_str; - - ATRACE_CALL(); +int32_t ExynosPrimaryDisplayModule::OperationRateManager::getTargetOperationRate() { if (mDisplayPowerMode == HWC2_POWER_MODE_DOZE || mDisplayPowerMode == HWC2_POWER_MODE_DOZE_SUSPEND) { return LP_OP_RATE; + } else { + return mDisplayTargetOperationRate; } - - if (readLineFromFile(mSysfsPath, op_rate_str, '\n') != OK) { - OP_MANAGER_LOGE("failed to read %s", mSysfsPath.c_str()); - return 0; - } - return !op_rate_str.empty() ? std::atoi(op_rate_str.c_str()) : 0; } -int32_t ExynosPrimaryDisplayModule::OperationRateManager::setOperationRate(const int32_t rate) { - if (!mDisplayActiveOperationRate || mDisplayActiveOperationRate == rate) return NO_ERROR; +int32_t ExynosPrimaryDisplayModule::OperationRateManager::setTargetOperationRate( + const int32_t rate) { + if (mDisplayTargetOperationRate == rate) return NO_ERROR; - ATRACE_CALL(); - int32_t ret = writeIntToFile(mSysfsPath.c_str(), rate); - if (ret == NO_ERROR) { - mDisplayActiveOperationRate = rate; - OP_MANAGER_LOGI("succeed to write operation rate %d", rate); - } else { - OP_MANAGER_LOGE("failed to write operation rate %d", rate); - } + OP_MANAGER_LOGI("set target operation rate %d", rate); + mDisplayTargetOperationRate = rate; - return ret; + return NO_ERROR; } ExynosPrimaryDisplayModule::OperationRateManager::OperationRateManager( @@ -99,8 +87,7 @@ ExynosPrimaryDisplayModule::OperationRateManager::OperationRateManager( mDisplayPowerMode(HWC2_POWER_MODE_ON), mDisplayLowBatteryModeEnabled(false) { mDisplayNsMinDbv = property_get_int32("vendor.primarydisplay.op.ns_min_dbv", 0); - mDisplayActiveOperationRate = mDisplayHsOperationRate; - mSysfsPath = mDisplay->getPanelSysfsPath(DisplayType::DISPLAY_PRIMARY) + "op_hz"; + mDisplayTargetOperationRate = mDisplayHsOperationRate; OP_MANAGER_LOGI("Op Rate: NS=%d HS=%d NsMinDbv=%d", mDisplayNsOperationRate, mDisplayHsOperationRate, mDisplayNsMinDbv); } @@ -182,8 +169,8 @@ int32_t ExynosPrimaryDisplayModule::OperationRateManager::updateOperationRateLoc if (mDisplayPowerMode == HWC2_POWER_MODE_DOZE || mDisplayPowerMode == HWC2_POWER_MODE_DOZE_SUSPEND) { - mDisplayActiveOperationRate = LP_OP_RATE; - desiredOpRate = mDisplayActiveOperationRate; + mDisplayTargetOperationRate = LP_OP_RATE; + desiredOpRate = mDisplayTargetOperationRate; effectiveOpRate = desiredOpRate; } else if (mDisplayPowerMode != HWC2_POWER_MODE_ON) { return ret; @@ -196,7 +183,7 @@ int32_t ExynosPrimaryDisplayModule::OperationRateManager::updateOperationRateLoc effectiveOpRate = mDisplayHsOperationRate; } else if (cond == DispOpCondition::PANEL_SET_POWER) { if (mDisplayPowerMode == HWC2_POWER_MODE_ON) { - mDisplayActiveOperationRate = getOperationRate(); + mDisplayTargetOperationRate = getTargetOperationRate(); } effectiveOpRate = desiredOpRate; } else if (cond == DispOpCondition::SET_DBV) { @@ -206,7 +193,7 @@ int32_t ExynosPrimaryDisplayModule::OperationRateManager::updateOperationRateLoc effectiveOpRate = desiredOpRate; } mDisplayLastDbv = dbv; - if (effectiveOpRate > LP_OP_RATE && (effectiveOpRate != mDisplayActiveOperationRate)) { + if (effectiveOpRate > LP_OP_RATE && (effectiveOpRate != mDisplayTargetOperationRate)) { OP_MANAGER_LOGD("brightness delta=%d", delta); } else { return ret; @@ -217,11 +204,11 @@ int32_t ExynosPrimaryDisplayModule::OperationRateManager::updateOperationRateLoc OP_MANAGER_LOGI("rate switching is disabled, skip NS op rate update"); return ret; } else if (effectiveOpRate > LP_OP_RATE) { - ret = setOperationRate(effectiveOpRate); + ret = setTargetOperationRate(effectiveOpRate); } - OP_MANAGER_LOGI("Op@%d(desired:%d) | Refresh@%d(peak:%d), Battery:%s, DBV:%d(NsMin:%d)", - mDisplayActiveOperationRate, desiredOpRate, curRefreshRate, + OP_MANAGER_LOGI("Target@%d(desired:%d) | Refresh@%d(peak:%d), Battery:%s, DBV:%d(NsMin:%d)", + mDisplayTargetOperationRate, desiredOpRate, curRefreshRate, mDisplayPeakRefreshRate, mDisplayLowBatteryModeEnabled ? "Low" : "OK", mDisplayLastDbv, mDisplayNsMinDbv); return ret; diff --git a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h index b084b6c..9dc0673 100644 --- a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h +++ b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h @@ -43,7 +43,7 @@ class ExynosPrimaryDisplayModule : public gs201::ExynosPrimaryDisplayModule { int32_t onConfig(hwc2_config_t cfg) override; int32_t onBrightness(uint32_t dbv) override; int32_t onPowerMode(int32_t mode) override; - int32_t getOperationRate() override; + int32_t getTargetOperationRate() override; private: enum class DispOpCondition : uint32_t { @@ -54,12 +54,12 @@ class ExynosPrimaryDisplayModule : public gs201::ExynosPrimaryDisplayModule { }; int32_t updateOperationRateLocked(const DispOpCondition cond); - int32_t setOperationRate(const int32_t rate); + int32_t setTargetOperationRate(const int32_t rate); ExynosPrimaryDisplay* mDisplay; int32_t mDisplayHsOperationRate; int32_t mDisplayNsOperationRate; - int32_t mDisplayActiveOperationRate; + int32_t mDisplayTargetOperationRate; int32_t mDisplayNsMinDbv; int32_t mDisplayPeakRefreshRate; int32_t mDisplayRefreshRate; @@ -68,7 +68,6 @@ class ExynosPrimaryDisplayModule : public gs201::ExynosPrimaryDisplayModule { std::optional<hwc2_power_mode_t> mDisplayPowerMode; bool mDisplayLowBatteryModeEnabled; Mutex mLock; - std::string mSysfsPath; static constexpr uint32_t BRIGHTNESS_DELTA_THRESHOLD = 10; static constexpr uint32_t LP_OP_RATE = 30; |