From 38567b98d43380025d5a0c13a063e5f86deba4b7 Mon Sep 17 00:00:00 2001 From: Ben Murdoch Date: Fri, 19 Feb 2021 18:02:57 +0000 Subject: [PATCH] Correctly select peak refresh rate. Currently we will get an arbitrary value that is greater than the default depending on the order returned by the Display. Bug: 180723012 Test: make RunSettingsRoboTests ROBOTEST_FILTER="com.android.settings.display.PeakRefreshRatePreferenceControllerTest" Change-Id: Id2c99f2bea9c6b2814d82a9db3a417e4a93ee06d --- ...ForcePeakRefreshRatePreferenceController.java | 2 +- .../PeakRefreshRatePreferenceController.java | 5 +++-- .../PeakRefreshRatePreferenceControllerTest.java | 16 ++++++++++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java b/src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java index 78352d33cd1..d5d40254fa8 100644 --- a/src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java +++ b/src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java @@ -122,7 +122,7 @@ public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPr private float findPeakRefreshRate(Display.Mode[] modes) { float peakRefreshRate = DEFAULT_REFRESH_RATE; for (Display.Mode mode : modes) { - if (Math.round(mode.getRefreshRate()) > DEFAULT_REFRESH_RATE) { + if (Math.round(mode.getRefreshRate()) > peakRefreshRate) { peakRefreshRate = mode.getRefreshRate(); } } diff --git a/src/com/android/settings/display/PeakRefreshRatePreferenceController.java b/src/com/android/settings/display/PeakRefreshRatePreferenceController.java index 10cab1c9e27..36e085a068f 100644 --- a/src/com/android/settings/display/PeakRefreshRatePreferenceController.java +++ b/src/com/android/settings/display/PeakRefreshRatePreferenceController.java @@ -129,10 +129,11 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl mDeviceConfigDisplaySettings.stopListening(); } - private float findPeakRefreshRate(Display.Mode[] modes) { + @VisibleForTesting + float findPeakRefreshRate(Display.Mode[] modes) { float peakRefreshRate = DEFAULT_REFRESH_RATE; for (Display.Mode mode : modes) { - if (Math.round(mode.getRefreshRate()) > DEFAULT_REFRESH_RATE) { + if (Math.round(mode.getRefreshRate()) > peakRefreshRate) { peakRefreshRate = mode.getRefreshRate(); } } diff --git a/tests/robotests/src/com/android/settings/display/PeakRefreshRatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/PeakRefreshRatePreferenceControllerTest.java index cae7d896916..aaeeea4f368 100644 --- a/tests/robotests/src/com/android/settings/display/PeakRefreshRatePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/PeakRefreshRatePreferenceControllerTest.java @@ -24,6 +24,7 @@ import static com.google.common.truth.Truth.assertThat; import android.content.Context; import android.provider.Settings; +import android.view.Display; import androidx.preference.SwitchPreference; @@ -102,6 +103,21 @@ public class PeakRefreshRatePreferenceControllerTest { assertThat(mController.isChecked()).isFalse(); } + @Test + public void findPeakRefreshRate_moreThanOneHigherThanDefault() { + Display.Mode lower = new Display.Mode(0, 0, 0, DEFAULT_REFRESH_RATE - 1); + Display.Mode def = new Display.Mode(0, 0, 0, DEFAULT_REFRESH_RATE); + Display.Mode higher = new Display.Mode(0, 0, 0, DEFAULT_REFRESH_RATE + 1); + Display.Mode higher1 = new Display.Mode(0, 0, 0, DEFAULT_REFRESH_RATE + 2); + + assertThat(mController.findPeakRefreshRate( + new Display.Mode[] {lower, def, higher, higher1})) + .isEqualTo(DEFAULT_REFRESH_RATE + 2); + assertThat(mController.findPeakRefreshRate( + new Display.Mode[] {lower, def, higher1, higher})) + .isEqualTo(DEFAULT_REFRESH_RATE + 2); + } + private void enableSmoothDisplayPreference() { mController.mPeakRefreshRate = 88f;