summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShiyong Li <shiyongli@google.com>2023-03-01 03:22:53 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-03-01 03:22:53 +0000
commitb7efc1dbb56c4111f788e2d707a91b8d696ea4ea (patch)
treed2cbbded3e9834ca3614ff7c9e159288b183751d
parent0d0c072b2dd886cd43723bc795ee6dcda5dd7136 (diff)
parentb5ae539e71744c85231b2f3cd3f6056667ecf244 (diff)
downloadzuma-b7efc1dbb56c4111f788e2d707a91b8d696ea4ea.tar.gz
libhwc2.1: don't switch operation rate on AOD or enabling LHBM am: b5ae539e71
Original change: https://googleplex-android-review.googlesource.com/c/platform/hardware/google/graphics/zuma/+/21656254 Change-Id: Icb2b1bc13e8eb07a5130a37b9d67868f953c9062 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp44
-rw-r--r--libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h1
2 files changed, 36 insertions, 9 deletions
diff --git a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp
index 89d4047..587b94c 100644
--- a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp
+++ b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp
@@ -56,7 +56,10 @@ int32_t ExynosPrimaryDisplayModule::validateWinConfigData()
int32_t ExynosPrimaryDisplayModule::OperationRateManager::getOperationRate() {
std::string op_rate_str;
- if (readLineFromFile(mSysfsPath, op_rate_str, '\n') != OK) {
+ 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) {
OP_MANAGER_LOGE("failed to read %s", mSysfsPath.c_str());
return 0;
}
@@ -132,9 +135,19 @@ int32_t ExynosPrimaryDisplayModule::OperationRateManager::onBrightness(uint32_t
mDisplayDbv = dbv;
return updateOperationRateLocked(DispOpCondition::SET_DBV);
}
+
int32_t ExynosPrimaryDisplayModule::OperationRateManager::onPowerMode(int32_t mode) {
+ std::string modeName = "Unknown";
+ if (mode == HWC2_POWER_MODE_ON) {
+ modeName = "On";
+ } else if (mode == HWC2_POWER_MODE_OFF) {
+ modeName = "Off";
+ } else if (mode == HWC2_POWER_MODE_DOZE || mode == HWC2_POWER_MODE_DOZE_SUSPEND) {
+ modeName = "LP";
+ }
+
Mutex::Autolock lock(mLock);
- OP_MANAGER_LOGD("mode=%d", mode);
+ OP_MANAGER_LOGD("mode=%s", modeName.c_str());
mDisplayPowerMode = static_cast<hwc2_power_mode_t>(mode);
return updateOperationRateLocked(DispOpCondition::PANEL_SET_POWER);
}
@@ -143,9 +156,6 @@ int32_t ExynosPrimaryDisplayModule::OperationRateManager::updateOperationRateLoc
const DispOpCondition cond) {
int32_t ret = HWC2_ERROR_NONE, dbv;
- // skip op rate update under AOD and power off
- if (mDisplayPowerMode != HWC2_POWER_MODE_ON) return ret;
-
ATRACE_CALL();
if (cond == DispOpCondition::SET_DBV) {
dbv = mDisplayDbv;
@@ -160,7 +170,7 @@ int32_t ExynosPrimaryDisplayModule::OperationRateManager::updateOperationRateLoc
mDisplayLowBatteryModeEnabled;
int32_t effectiveOpRate = 0;
- // check minimal opertion rate needed
+ // check minimal operation rate needed
if (isSteadyLowRefreshRate && curRefreshRate <= mDisplayNsOperationRate) {
desiredOpRate = mDisplayNsOperationRate;
}
@@ -168,7 +178,17 @@ int32_t ExynosPrimaryDisplayModule::OperationRateManager::updateOperationRateLoc
if (mDisplayLastDbv < mDisplayNsMinDbv || dbv < mDisplayNsMinDbv) {
desiredOpRate = mDisplayHsOperationRate;
}
- mDisplayActiveOperationRate = getOperationRate();
+
+ if (mDisplayPowerMode == HWC2_POWER_MODE_ON) {
+ mDisplayActiveOperationRate = getOperationRate();
+ } else if (mDisplayPowerMode == HWC2_POWER_MODE_DOZE ||
+ mDisplayPowerMode == HWC2_POWER_MODE_DOZE_SUSPEND) {
+ mDisplayActiveOperationRate = LP_OP_RATE;
+ desiredOpRate = mDisplayActiveOperationRate;
+ effectiveOpRate = desiredOpRate;
+ } else {
+ return ret;
+ }
if (cond == DispOpCondition::SET_CONFIG) {
curRefreshRate = mDisplayRefreshRate;
@@ -182,13 +202,19 @@ int32_t ExynosPrimaryDisplayModule::OperationRateManager::updateOperationRateLoc
int32_t delta = abs(dbv - mDisplayLastDbv);
if (delta > BRIGHTNESS_DELTA_THRESHOLD) effectiveOpRate = desiredOpRate;
mDisplayLastDbv = dbv;
- if (effectiveOpRate && (effectiveOpRate != mDisplayActiveOperationRate)) {
+ if (effectiveOpRate > LP_OP_RATE && (effectiveOpRate != mDisplayActiveOperationRate)) {
OP_MANAGER_LOGD("brightness delta=%d", delta);
} else {
return ret;
}
}
- if (effectiveOpRate) ret = setOperationRate(effectiveOpRate);
+
+ if (!mDisplay->isConfigSettingEnabled()) {
+ OP_MANAGER_LOGI("rate switching is disabled, skip op rate update");
+ return ret;
+ } else if (effectiveOpRate > LP_OP_RATE) {
+ ret = setOperationRate(effectiveOpRate);
+ }
OP_MANAGER_LOGI("Op@%d(desired:%d) | Refresh@%d(peak:%d), Battery:%s, DBV:%d(NsMin:%d)",
mDisplayActiveOperationRate, desiredOpRate, curRefreshRate,
diff --git a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h
index e45d27c..717964f 100644
--- a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h
+++ b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h
@@ -71,6 +71,7 @@ class ExynosPrimaryDisplayModule : public gs201::ExynosPrimaryDisplayModule {
std::string mSysfsPath;
static constexpr uint32_t BRIGHTNESS_DELTA_THRESHOLD = 10;
+ static constexpr uint32_t LP_OP_RATE = 30;
};
};