summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ady Abraham <adyabr@google.com> 2021-06-29 15:48:11 -0700
committer Ady Abraham <adyabr@google.com> 2021-07-02 16:23:45 -0700
commit1e5c50bbe3fab2558e1dd8f6061be0c6ad1b8569 (patch)
treef2c47a4a01d9d7028fdfbdbe764b9dbe32648143
parentd003be936938a26283eeea0c50a38cad134e62bc (diff)
RefreshRatePolicy: getPreferredRefreshRate should consider preferredRefreshRate
If an app set the WindowManager.LayoutParams#preferredRefreshRate, refresh rate policy should return it the the preferred refresh rate of the window if all the other signals (preferredDisplayModeId or deny list) doesn't have a vote. Test: atest RefreshRatePolicyTest FrameRateSelectionPriorityTests Bug: 192413241 Change-Id: I55dc5c2acc8b66cfedbd0c0f0fb66c57eeaa36fe
-rw-r--r--services/core/java/com/android/server/wm/RefreshRatePolicy.java4
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/FrameRateSelectionPriorityTests.java30
2 files changed, 33 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/RefreshRatePolicy.java b/services/core/java/com/android/server/wm/RefreshRatePolicy.java
index 6bc42af2bb68..a7c1b578700e 100644
--- a/services/core/java/com/android/server/wm/RefreshRatePolicy.java
+++ b/services/core/java/com/android/server/wm/RefreshRatePolicy.java
@@ -151,6 +151,10 @@ class RefreshRatePolicy {
}
}
+ if (w.mAttrs.preferredRefreshRate != 0) {
+ return w.mAttrs.preferredRefreshRate;
+ }
+
return 0;
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/FrameRateSelectionPriorityTests.java b/services/tests/wmtests/src/com/android/server/wm/FrameRateSelectionPriorityTests.java
index e6348a50566c..13ebc932fcef 100644
--- a/services/tests/wmtests/src/com/android/server/wm/FrameRateSelectionPriorityTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/FrameRateSelectionPriorityTests.java
@@ -228,7 +228,7 @@ public class FrameRateSelectionPriorityTests extends WindowTestsBase {
}
@Test
- public void testPreferredRefreshRate() {
+ public void testDenyListPreferredRefreshRate() {
final WindowState appWindow = createWindow("appWindow");
assertNotNull("Window state is created", appWindow);
when(appWindow.getDisplayContent().getDisplayPolicy()).thenReturn(mDisplayPolicy);
@@ -281,4 +281,32 @@ public class FrameRateSelectionPriorityTests extends WindowTestsBase {
verify(appWindow.getPendingTransaction(), never()).setFrameRate(
any(SurfaceControl.class), anyInt(), anyInt(), anyInt());
}
+
+ @Test
+ public void testAppPreferredRefreshRate() {
+ final WindowState appWindow = createWindow("appWindow");
+ assertNotNull("Window state is created", appWindow);
+ when(appWindow.getDisplayContent().getDisplayPolicy()).thenReturn(mDisplayPolicy);
+
+ appWindow.mAttrs.packageName = "com.android.test";
+ appWindow.mAttrs.preferredRefreshRate = 60;
+
+ assertEquals(0, mRefreshRatePolicy.getPreferredModeId(appWindow));
+ assertEquals(60, mRefreshRatePolicy.getPreferredRefreshRate(appWindow), FLOAT_TOLERANCE);
+
+ appWindow.updateFrameRateSelectionPriorityIfNeeded();
+ assertEquals(RefreshRatePolicy.LAYER_PRIORITY_UNSET, appWindow.mFrameRateSelectionPriority);
+ assertEquals(60, appWindow.mAppPreferredFrameRate, FLOAT_TOLERANCE);
+
+ // Call the function a few times.
+ appWindow.updateFrameRateSelectionPriorityIfNeeded();
+ appWindow.updateFrameRateSelectionPriorityIfNeeded();
+
+ // Since nothing changed in the priority state, the transaction should not be updating.
+ verify(appWindow.getPendingTransaction(), never()).setFrameRateSelectionPriority(
+ any(SurfaceControl.class), anyInt());
+ verify(appWindow.getPendingTransaction(), times(1)).setFrameRate(
+ appWindow.getSurfaceControl(), 60,
+ Surface.FRAME_RATE_COMPATIBILITY_EXACT, Surface.CHANGE_FRAME_RATE_ALWAYS);
+ }
}