summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSafayat Ullah <safayat@google.com>2023-07-07 10:41:33 +0000
committerSafayat Ullah <safayat@google.com>2023-08-29 12:36:07 +0000
commit237752a978a1b06a880ae01e323bfa2aef6c188a (patch)
tree160c2a5f48af288925ab75cabf41927353d3ad29
parent2ccf04c16d30086931e02220fd24ed38f341c181 (diff)
downloadzuma-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.cpp29
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);
}