diff options
| author | 2021-12-14 23:26:40 +0000 | |
|---|---|---|
| committer | 2021-12-14 23:26:40 +0000 | |
| commit | a800211ff812e8037ca537cbbc550bbd3c012c5f (patch) | |
| tree | bf19005158023548c329dcdf9f3f65f8b8585dc0 | |
| parent | e768d3d44af00ec9074f3692335f05a4f0699cdd (diff) | |
| parent | 744da388dbcc97d817683c8ca760cafc218e955e (diff) | |
Merge "RefreshRatePolicy: set both min and max refresh rate when camera is used" am: 744da388db
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1917897
Change-Id: I2752ea54c72b745c16be7eda944b6f35de9994dd
| -rw-r--r-- | services/core/java/com/android/server/wm/RefreshRatePolicy.java | 14 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/RefreshRatePolicyTest.java | 12 |
2 files changed, 21 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/RefreshRatePolicy.java b/services/core/java/com/android/server/wm/RefreshRatePolicy.java index b63843dd20d4..7bddb620c94d 100644 --- a/services/core/java/com/android/server/wm/RefreshRatePolicy.java +++ b/services/core/java/com/android/server/wm/RefreshRatePolicy.java @@ -164,7 +164,19 @@ class RefreshRatePolicy { return 0; } - return w.mAttrs.preferredMinDisplayRefreshRate; + if (w.mAttrs.preferredMinDisplayRefreshRate > 0) { + return w.mAttrs.preferredMinDisplayRefreshRate; + } + + String packageName = w.getOwningPackage(); + // If app is using Camera, we set both the min and max refresh rate to the camera's + // preferred refresh rate to make sure we don't end up with a refresh rate lower + // than the camera capture rate, which will lead to dropping camera frames. + if (mNonHighRefreshRatePackages.contains(packageName)) { + return mLowRefreshRateMode.getRefreshRate(); + } + + return 0; } float getPreferredMaxRefreshRate(WindowState w) { diff --git a/services/tests/wmtests/src/com/android/server/wm/RefreshRatePolicyTest.java b/services/tests/wmtests/src/com/android/server/wm/RefreshRatePolicyTest.java index c4cccf022322..19247604ad10 100644 --- a/services/tests/wmtests/src/com/android/server/wm/RefreshRatePolicyTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/RefreshRatePolicyTest.java @@ -104,7 +104,8 @@ public class RefreshRatePolicyTest extends WindowTestsBase { mPolicy.addNonHighRefreshRatePackage("com.android.test"); assertEquals(0, mPolicy.getPreferredModeId(cameraUsingWindow)); assertEquals(0, mPolicy.getPreferredRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE); - assertEquals(0, mPolicy.getPreferredMinRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE); + assertEquals(LOW_REFRESH_RATE, + mPolicy.getPreferredMinRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE); assertEquals(LOW_REFRESH_RATE, mPolicy.getPreferredMaxRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE); mPolicy.removeNonHighRefreshRatePackage("com.android.test"); @@ -165,7 +166,8 @@ public class RefreshRatePolicyTest extends WindowTestsBase { assertEquals(HI_MODE_ID, mPolicy.getPreferredModeId(overrideWindow)); assertEquals(HI_REFRESH_RATE, mPolicy.getPreferredRefreshRate(overrideWindow), FLOAT_TOLERANCE); - assertEquals(0, mPolicy.getPreferredMinRefreshRate(overrideWindow), FLOAT_TOLERANCE); + assertEquals(LOW_REFRESH_RATE, + mPolicy.getPreferredMinRefreshRate(overrideWindow), FLOAT_TOLERANCE); assertEquals(LOW_REFRESH_RATE, mPolicy.getPreferredMaxRefreshRate(overrideWindow), FLOAT_TOLERANCE); } @@ -180,7 +182,8 @@ public class RefreshRatePolicyTest extends WindowTestsBase { assertEquals(0, mPolicy.getPreferredModeId(overrideWindow)); assertEquals(HI_REFRESH_RATE, mPolicy.getPreferredRefreshRate(overrideWindow), FLOAT_TOLERANCE); - assertEquals(0, mPolicy.getPreferredMinRefreshRate(overrideWindow), FLOAT_TOLERANCE); + assertEquals(LOW_REFRESH_RATE, + mPolicy.getPreferredMinRefreshRate(overrideWindow), FLOAT_TOLERANCE); assertEquals(LOW_REFRESH_RATE, mPolicy.getPreferredMaxRefreshRate(overrideWindow), FLOAT_TOLERANCE); } @@ -257,7 +260,8 @@ public class RefreshRatePolicyTest extends WindowTestsBase { mPolicy.addNonHighRefreshRatePackage("com.android.test"); assertEquals(0, mPolicy.getPreferredModeId(cameraUsingWindow)); assertEquals(0, mPolicy.getPreferredRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE); - assertEquals(0, mPolicy.getPreferredMinRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE); + assertEquals(LOW_REFRESH_RATE, + mPolicy.getPreferredMinRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE); assertEquals(LOW_REFRESH_RATE, mPolicy.getPreferredMaxRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE); |