diff options
author | Midas Chien <midaschieh@google.com> | 2023-06-13 15:07:26 +0000 |
---|---|---|
committer | Midas Chien <midaschieh@google.com> | 2023-06-15 15:46:32 +0000 |
commit | c8122475f806e0f9c1e343172a002c172417def2 (patch) | |
tree | 9fa4bbbbef402f06a67371d033f73df5b53a6ce8 | |
parent | 3b71590c8128afe7dd03e81daca1339d5c89c703 (diff) | |
download | zuma-c8122475f806e0f9c1e343172a002c172417def2.tar.gz |
libhwc2.1: get active operation rate from kerenl when power on
Reading data from kernel sysfs node takes time. To avoid do it
frequently, update active operation rate from kernel when power on
display.
Bug: 287042355
Test: NS/HS switch, AOD
Change-Id: I0e9f0c8dec3c55ca3c13ed52105293c1ef0de62d
-rw-r--r-- | libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp index f036c45..6917f16 100644 --- a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp +++ b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp @@ -14,6 +14,8 @@ * limitations under the License. */ +#define ATRACE_TAG (ATRACE_TAG_GRAPHICS | ATRACE_TAG_HAL) + #include "ExynosPrimaryDisplayModule.h" #include <cutils/properties.h> @@ -56,10 +58,13 @@ int32_t ExynosPrimaryDisplayModule::validateWinConfigData() int32_t ExynosPrimaryDisplayModule::OperationRateManager::getOperationRate() { std::string op_rate_str; + ATRACE_CALL(); if (mDisplayPowerMode == HWC2_POWER_MODE_DOZE || mDisplayPowerMode == HWC2_POWER_MODE_DOZE_SUSPEND) { return LP_OP_RATE; - } else if (readLineFromFile(mSysfsPath, op_rate_str, '\n') != OK) { + } + + if (readLineFromFile(mSysfsPath, op_rate_str, '\n') != OK) { OP_MANAGER_LOGE("failed to read %s", mSysfsPath.c_str()); return 0; } @@ -69,6 +74,7 @@ int32_t ExynosPrimaryDisplayModule::OperationRateManager::getOperationRate() { int32_t ExynosPrimaryDisplayModule::OperationRateManager::setOperationRate(const int32_t rate) { if (!mDisplayActiveOperationRate || mDisplayActiveOperationRate == rate) return NO_ERROR; + ATRACE_CALL(); int32_t ret = writeIntToFile(mSysfsPath.c_str(), rate); if (ret == NO_ERROR) { mDisplayActiveOperationRate = rate; @@ -174,14 +180,12 @@ int32_t ExynosPrimaryDisplayModule::OperationRateManager::updateOperationRateLoc desiredOpRate = mDisplayHsOperationRate; } - if (mDisplayPowerMode == HWC2_POWER_MODE_ON) { - mDisplayActiveOperationRate = getOperationRate(); - } else if (mDisplayPowerMode == HWC2_POWER_MODE_DOZE || - mDisplayPowerMode == HWC2_POWER_MODE_DOZE_SUSPEND) { + if (mDisplayPowerMode == HWC2_POWER_MODE_DOZE || + mDisplayPowerMode == HWC2_POWER_MODE_DOZE_SUSPEND) { mDisplayActiveOperationRate = LP_OP_RATE; desiredOpRate = mDisplayActiveOperationRate; effectiveOpRate = desiredOpRate; - } else { + } else if (mDisplayPowerMode != HWC2_POWER_MODE_ON) { return ret; } @@ -191,6 +195,9 @@ int32_t ExynosPrimaryDisplayModule::OperationRateManager::updateOperationRateLoc (curRefreshRate <= mDisplayHsOperationRate)) effectiveOpRate = mDisplayHsOperationRate; } else if (cond == DispOpCondition::PANEL_SET_POWER) { + if (mDisplayPowerMode == HWC2_POWER_MODE_ON) { + mDisplayActiveOperationRate = getOperationRate(); + } effectiveOpRate = desiredOpRate; } else if (cond == DispOpCondition::SET_DBV) { // TODO: tune brightness delta for different brightness curve and values |