diff options
author | Safayat Ullah <safayat@google.com> | 2023-07-07 10:41:33 +0000 |
---|---|---|
committer | Safayat Ullah <safayat@google.com> | 2023-08-29 12:36:07 +0000 |
commit | 237752a978a1b06a880ae01e323bfa2aef6c188a (patch) | |
tree | 160c2a5f48af288925ab75cabf41927353d3ad29 | |
parent | 2ccf04c16d30086931e02220fd24ed38f341c181 (diff) | |
download | zuma-237752a978a1b06a880ae01e323bfa2aef6c188a.tar.gz |
libhwc2.1: enter ns mode after boot when smooth display off
If smooth display is disabled, after reboot device will enter
NS mode without a suspend-resume first if
For first boot:
vendor.primarydisplay.op.peak_refresh_rate=60
For later boot:
persist.vendor.primarydisplay.op.peak_refresh_rate=60
Bug: 290162920
Test: The following scenarios
1. Set smooth display on/off and reboot
2. After turn on and off smooth display, device will enter ns after
suspend-resume
3. Factory reset
Change-Id: I7154bbdd47c1a773c2a5ddbf7395ebc875226562
Signed-off-by: Safayat Ullah <safayat@google.com>
-rw-r--r-- | libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp index 36d3f93..fc2ac33 100644 --- a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp +++ b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp @@ -96,8 +96,14 @@ ExynosPrimaryDisplayModule::OperationRateManager::~OperationRateManager() {} int32_t ExynosPrimaryDisplayModule::OperationRateManager::onPeakRefreshRate(uint32_t rate) { Mutex::Autolock lock(mLock); + char rateStr[PROP_VALUE_MAX]; + std::sprintf(rateStr, "%d", rate); + OP_MANAGER_LOGD("rate=%d", rate); mDisplayPeakRefreshRate = rate; + if (property_set("persist.vendor.primarydisplay.op.peak_refresh_rate", rateStr) < 0) { + OP_MANAGER_LOGE("failed to set property persist.primarydisplay.op.peak_refresh_rate"); + } return 0; } @@ -121,6 +127,29 @@ int32_t ExynosPrimaryDisplayModule::OperationRateManager::onBrightness(uint32_t if (dbv == 0 || mDisplayLastDbv == dbv) return 0; OP_MANAGER_LOGD("dbv=%d", dbv); mDisplayDbv = dbv; + + /* + Update peak_refresh_rate from persist/vendor prop after a brightness change. + 1. Otherwise there will be NS-HS-NS switch during the onPowerMode. + 2. When constructor is called, persist property is not ready yet and returns 0. + */ + if (!mDisplayPeakRefreshRate) { + char rateStr[PROP_VALUE_MAX]; + int32_t vendorPeakRefreshRate = 0, persistPeakRefreshRate = 0; + if (property_get("persist.vendor.primarydisplay.op.peak_refresh_rate", rateStr, "0") >= 0 && + atoi(rateStr) > 0) { + persistPeakRefreshRate = atoi(rateStr); + mDisplayPeakRefreshRate = persistPeakRefreshRate; + } else { + vendorPeakRefreshRate = + property_get_int32("vendor.primarydisplay.op.peak_refresh_rate", 0); + mDisplayPeakRefreshRate = vendorPeakRefreshRate; + } + + OP_MANAGER_LOGD("peak_refresh_rate=%d[vendor: %d|persist %d]", mDisplayPeakRefreshRate, + vendorPeakRefreshRate, persistPeakRefreshRate); + } + return updateOperationRateLocked(DispOpCondition::SET_DBV); } |