summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYingren Wang <yingrenw@codeaurora.org>2021-09-26 22:44:48 +0800
committerYingren Wang <yingrenw@codeaurora.org>2021-10-25 00:17:26 +0000
commitd91c7ab1994281b8f54448d6adb4b2bc6c5c4009 (patch)
tree1dc32aa5ccae4ee58b92b0e241dd5309144531c7
parentf0aa72a914d82645baf61ba98a2643a569aee321 (diff)
Enable force app refresh rate for frame rate override
Route force app refresh rate vote to SurfaceFlinger using the setFrameRate API to frame rate override to be enabled. Change-Id: I9a0383dec0b15fdcd485de4ffac34943d25bb92f CRs-Fixed: 2752753
-rwxr-xr-xservices/core/java/com/android/server/wm/ForceRefreshRatePackagelist.java23
-rwxr-xr-xservices/core/java/com/android/server/wm/RefreshRatePolicy.java8
2 files changed, 25 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/wm/ForceRefreshRatePackagelist.java b/services/core/java/com/android/server/wm/ForceRefreshRatePackagelist.java
index ee056b64af82..15d1e7df1f69 100755
--- a/services/core/java/com/android/server/wm/ForceRefreshRatePackagelist.java
+++ b/services/core/java/com/android/server/wm/ForceRefreshRatePackagelist.java
@@ -90,22 +90,35 @@ class ForceRefreshRatePackageList {
int getForceRefreshRateId(String packageName) {
synchronized (mLock) {
if(mForcedPackageList.containsKey(packageName)) {
- float refreshRate = mForcedPackageList.get(packageName).floatValue();
- return findModeByRefreshRate(refreshRate);
+ float refreshRate = mForcedPackageList.get(packageName).floatValue();
+ Display.Mode mode = findModeByRefreshRate(refreshRate);
+ return mode != null ? mode.getModeId() : 0;
}else {
return 0;
}
}
}
- int findModeByRefreshRate(float refreshRate) {
+ float getForceRefreshRate(String packageName) {
+ synchronized (mLock) {
+ if(mForcedPackageList.containsKey(packageName)) {
+ float refreshRate = mForcedPackageList.get(packageName).floatValue();
+ Display.Mode mode = findModeByRefreshRate(refreshRate);
+ return mode != null ? mode.getRefreshRate() : 0;
+ }else {
+ return 0;
+ }
+ }
+ }
+
+ private Display.Mode findModeByRefreshRate(float refreshRate) {
Display.Mode[] modes = mDisplayInfo.supportedModes;
for (int i = 0; i < modes.length; i++) {
if (Math.abs(modes[i].getRefreshRate() - refreshRate) < REFRESH_RATE_EPSILON) {
- return modes[i].getModeId();
+ return modes[i];
}
}
- return 0;
+ return null;
}
private class SettingsObserver extends ContentObserver {
diff --git a/services/core/java/com/android/server/wm/RefreshRatePolicy.java b/services/core/java/com/android/server/wm/RefreshRatePolicy.java
index aadddc53bff4..1aa1edc60656 100755
--- a/services/core/java/com/android/server/wm/RefreshRatePolicy.java
+++ b/services/core/java/com/android/server/wm/RefreshRatePolicy.java
@@ -97,7 +97,7 @@ class RefreshRatePolicy {
return 0;
}
- // If app is forced to specified refresh rate, return the specified refresh rate
+ // If app is forced to specified refresh rate, return the corresponding mode id.
int forceRefreshRateId = mForceList.getForceRefreshRateId(w.getOwningPackage());
if(forceRefreshRateId > 0) {
return forceRefreshRateId;
@@ -137,6 +137,12 @@ class RefreshRatePolicy {
return 0;
}
+ // If app is forced to specified refresh rate, return the specified refresh rate.
+ float forceRefreshRate = mForceList.getForceRefreshRate(w.getOwningPackage());
+ if(forceRefreshRate > 0) {
+ return forceRefreshRate;
+ }
+
// If the app set a preferredDisplayModeId, the preferred refresh rate is the refresh rate
// of that mode id.
final int preferredModeId = w.mAttrs.preferredDisplayModeId;