diff options
author | Yingren Wang <yingrenw@codeaurora.org> | 2021-09-26 22:44:48 +0800 |
---|---|---|
committer | Yingren Wang <yingrenw@codeaurora.org> | 2021-10-25 00:17:26 +0000 |
commit | d91c7ab1994281b8f54448d6adb4b2bc6c5c4009 (patch) | |
tree | 1dc32aa5ccae4ee58b92b0e241dd5309144531c7 | |
parent | f0aa72a914d82645baf61ba98a2643a569aee321 (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-x | services/core/java/com/android/server/wm/ForceRefreshRatePackagelist.java | 23 | ||||
-rwxr-xr-x | services/core/java/com/android/server/wm/RefreshRatePolicy.java | 8 |
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; |