summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author ramindani <ramindani@google.com> 2024-10-29 09:20:23 -0700
committer ramindani <ramindani@google.com> 2024-11-20 17:03:32 -0800
commit7dad2b0710d2a81be74bdd37c7c29be17c6ee0a6 (patch)
tree77c8138882ecf8c0caebbf921836db6631db2c62
parent2ede2ad0f544b802b0c84d9fe499ee819b3cb82b (diff)
Update getSupportedRefreshRates api
Un-deprecated getSupportedRefreshRates Framework supports more render rates than display modes using the features such as frame rate override. resurfacing the api inorder to support all the render rates in the framework. Test: atest android.display.cts.DisplayTest BUG: 365163968 Flag: com.android.server.display.feature.flags.enable_get_supported_refresh_rates Change-Id: I54750c5f5aeb67e086c7052698c2fd745574b32f
-rw-r--r--core/api/current.txt2
-rw-r--r--core/api/test-current.txt2
-rw-r--r--core/java/android/view/Display.java37
-rw-r--r--core/java/android/view/DisplayInfo.java31
-rw-r--r--core/java/android/view/SurfaceControl.java7
-rw-r--r--core/jni/android_view_SurfaceControl.cpp18
-rw-r--r--services/core/java/com/android/server/display/DisplayDeviceInfo.java10
-rw-r--r--services/core/java/com/android/server/display/LocalDisplayAdapter.java18
-rw-r--r--services/core/java/com/android/server/display/LogicalDisplay.java2
-rw-r--r--services/core/java/com/android/server/display/feature/DisplayManagerFlags.java13
-rw-r--r--services/core/java/com/android/server/wm/DeferredDisplayUpdater.java1
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/DeferredDisplayUpdaterDiffTest.java3
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/FrameRateSelectionPriorityTests.java12
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/RefreshRatePolicyTest.java2
14 files changed, 142 insertions, 16 deletions
diff --git a/core/api/current.txt b/core/api/current.txt
index 45f6a3fbe0cb..45c75e3a0e63 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -51925,7 +51925,7 @@ package android.view {
method public int getState();
method @FlaggedApi("com.android.server.display.feature.flags.enable_get_suggested_frame_rate") public float getSuggestedFrameRate(int);
method public android.view.Display.Mode[] getSupportedModes();
- method @Deprecated public float[] getSupportedRefreshRates();
+ method @FlaggedApi("com.android.server.display.feature.flags.enable_get_supported_refresh_rates") @NonNull public float[] getSupportedRefreshRates();
method @Deprecated public int getWidth();
method @FlaggedApi("com.android.server.display.feature.flags.enable_has_arr_support") public boolean hasArrSupport();
method public boolean isHdr();
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index 1a97f7beb7fa..967f6194969e 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -3730,6 +3730,7 @@ package android.view {
method @NonNull public android.view.Display.Mode getDefaultMode();
method public int getRemoveMode();
method @NonNull public int[] getReportedHdrTypes();
+ method @NonNull public float[] getSupportedRefreshRatesLegacy();
method @NonNull public android.graphics.ColorSpace[] getSupportedWideColorGamut();
method @Nullable public android.view.Display.Mode getSystemPreferredDisplayMode();
method public int getType();
@@ -3752,6 +3753,7 @@ package android.view {
public static final class Display.Mode implements android.os.Parcelable {
ctor public Display.Mode(int, int, float);
+ method public float getVsyncRate();
method public boolean isSynthetic();
method public boolean matches(int, int, float);
}
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index a1a9fc697271..6f38ad59cbb2 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -20,6 +20,7 @@ import static android.Manifest.permission.CONFIGURE_DISPLAY_COLOR_MODE;
import static android.Manifest.permission.CONTROL_DISPLAY_BRIGHTNESS;
import static android.hardware.flags.Flags.FLAG_OVERLAYPROPERTIES_CLASS_API;
+import static com.android.server.display.feature.flags.Flags.FLAG_ENABLE_GET_SUPPORTED_REFRESH_RATES;
import static com.android.server.display.feature.flags.Flags.FLAG_HIGHEST_HDR_SDR_RATIO_API;
import static com.android.server.display.feature.flags.Flags.FLAG_ENABLE_HAS_ARR_SUPPORT;
import static com.android.server.display.feature.flags.Flags.FLAG_ENABLE_GET_SUGGESTED_FRAME_RATE;
@@ -63,6 +64,7 @@ import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Objects;
import java.util.concurrent.Executor;
import java.util.function.Consumer;
@@ -1207,17 +1209,36 @@ public final class Display {
/**
* Get the supported refresh rates of this display in frames per second.
- * <p>
- * This method only returns refresh rates for the display's default modes. For more options, use
- * {@link #getSupportedModes()}.
*
- * @deprecated use {@link #getSupportedModes()} instead
+ * <ul>
+ * <li> Android version {@link Build.VERSION_CODES#BAKLAVA} and above:
+ * returns display supported render rates.
+ * <li> Android version {@link Build.VERSION_CODES#VANILLA_ICE_CREAM} and below:
+ * This method only returns refresh rates for the display's default modes. For more options,
+ * use {@link #getSupportedModes()}.
+ * </ul>
*/
- @Deprecated
- public float[] getSupportedRefreshRates() {
+ @FlaggedApi(FLAG_ENABLE_GET_SUPPORTED_REFRESH_RATES)
+ public @NonNull float[] getSupportedRefreshRates() {
synchronized (mLock) {
updateDisplayInfoLocked();
- return mDisplayInfo.getDefaultRefreshRates();
+ final float[] refreshRates = mDisplayInfo.getDefaultRefreshRates();
+ Objects.requireNonNull(refreshRates);
+ return refreshRates;
+ }
+ }
+
+ /**
+ * @hide
+ */
+ @TestApi
+ @SuppressLint({"UnflaggedApi"}) // Usage in the CTS to test backward compatibility.
+ public @NonNull float[] getSupportedRefreshRatesLegacy() {
+ synchronized (mLock) {
+ updateDisplayInfoLocked();
+ final float[] refreshRates = mDisplayInfo.getDefaultRefreshRatesLegacy();
+ Objects.requireNonNull(refreshRates);
+ return refreshRates;
}
}
@@ -2438,6 +2459,8 @@ public final class Display {
* constrained by the system.
* @hide
*/
+ @SuppressWarnings("UnflaggedApi") // For testing only
+ @TestApi
public float getVsyncRate() {
return mVsyncRate;
}
diff --git a/core/java/android/view/DisplayInfo.java b/core/java/android/view/DisplayInfo.java
index 4ff04d5c1fa6..8b6458a54c43 100644
--- a/core/java/android/view/DisplayInfo.java
+++ b/core/java/android/view/DisplayInfo.java
@@ -210,6 +210,11 @@ public final class DisplayInfo implements Parcelable {
public FrameRateCategoryRate frameRateCategoryRate;
/**
+ * All the refresh rates supported in the active mode.
+ */
+ public float[] supportedRefreshRates = new float[0];
+
+ /**
* The default display mode.
*/
public int defaultModeId;
@@ -449,6 +454,7 @@ public final class DisplayInfo implements Parcelable {
&& modeId == other.modeId
&& hasArrSupport == other.hasArrSupport
&& Objects.equals(frameRateCategoryRate, other.frameRateCategoryRate)
+ && Arrays.equals(supportedRefreshRates, other.supportedRefreshRates)
&& defaultModeId == other.defaultModeId
&& userPreferredModeId == other.userPreferredModeId
&& Arrays.equals(supportedModes, other.supportedModes)
@@ -512,6 +518,8 @@ public final class DisplayInfo implements Parcelable {
renderFrameRate = other.renderFrameRate;
hasArrSupport = other.hasArrSupport;
frameRateCategoryRate = other.frameRateCategoryRate;
+ supportedRefreshRates = Arrays.copyOf(
+ other.supportedRefreshRates, other.supportedRefreshRates.length);
defaultModeId = other.defaultModeId;
userPreferredModeId = other.userPreferredModeId;
supportedModes = Arrays.copyOf(other.supportedModes, other.supportedModes.length);
@@ -571,6 +579,11 @@ public final class DisplayInfo implements Parcelable {
hasArrSupport = source.readBoolean();
frameRateCategoryRate = source.readParcelable(null,
android.view.FrameRateCategoryRate.class);
+ int numOfSupportedRefreshRates = source.readInt();
+ supportedRefreshRates = new float[numOfSupportedRefreshRates];
+ for (int i = 0; i < numOfSupportedRefreshRates; i++) {
+ supportedRefreshRates[i] = source.readFloat();
+ }
defaultModeId = source.readInt();
userPreferredModeId = source.readInt();
int nModes = source.readInt();
@@ -646,6 +659,10 @@ public final class DisplayInfo implements Parcelable {
dest.writeFloat(renderFrameRate);
dest.writeBoolean(hasArrSupport);
dest.writeParcelable(frameRateCategoryRate, flags);
+ dest.writeInt(supportedRefreshRates.length);
+ for (float supportedRefreshRate : supportedRefreshRates) {
+ dest.writeFloat(supportedRefreshRate);
+ }
dest.writeInt(defaultModeId);
dest.writeInt(userPreferredModeId);
dest.writeInt(supportedModes.length);
@@ -750,9 +767,19 @@ public final class DisplayInfo implements Parcelable {
}
/**
- * Returns the list of supported refresh rates in the default mode.
+ * Returns the list of supported refresh rates in the active mode.
*/
public float[] getDefaultRefreshRates() {
+ if (supportedRefreshRates.length == 0) {
+ return getDefaultRefreshRatesLegacy();
+ }
+ return Arrays.copyOf(supportedRefreshRates, supportedRefreshRates.length);
+ }
+
+ /**
+ * Returns the list of supported refresh rates in the default mode.
+ */
+ public float[] getDefaultRefreshRatesLegacy() {
Display.Mode[] modes = appsSupportedModes;
ArraySet<Float> rates = new ArraySet<>();
Display.Mode defaultMode = getDefaultMode();
@@ -898,6 +925,8 @@ public final class DisplayInfo implements Parcelable {
sb.append(hasArrSupport);
sb.append(", frameRateCategoryRate ");
sb.append(frameRateCategoryRate);
+ sb.append(", supportedRefreshRates ");
+ sb.append(Arrays.toString(supportedRefreshRates));
sb.append(", defaultMode ");
sb.append(defaultModeId);
sb.append(", userPreferredModeId ");
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index 68674dd402b4..dd9a95e58bd1 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -1932,6 +1932,7 @@ public final class SurfaceControl implements Parcelable {
public float renderFrameRate;
public boolean hasArrSupport;
public FrameRateCategoryRate frameRateCategoryRate;
+ public float[] supportedRefreshRates;
public int[] supportedColorModes;
public int activeColorMode;
@@ -1951,6 +1952,7 @@ public final class SurfaceControl implements Parcelable {
+ ", renderFrameRate=" + renderFrameRate
+ ", hasArrSupport=" + hasArrSupport
+ ", frameRateCategoryRate=" + frameRateCategoryRate
+ + ", supportedRefreshRates=" + Arrays.toString(supportedRefreshRates)
+ ", supportedColorModes=" + Arrays.toString(supportedColorModes)
+ ", activeColorMode=" + activeColorMode
+ ", hdrCapabilities=" + hdrCapabilities
@@ -1972,14 +1974,15 @@ public final class SurfaceControl implements Parcelable {
&& Objects.equals(hdrCapabilities, that.hdrCapabilities)
&& preferredBootDisplayMode == that.preferredBootDisplayMode
&& hasArrSupport == that.hasArrSupport
- && Objects.equals(frameRateCategoryRate, that.frameRateCategoryRate);
+ && Objects.equals(frameRateCategoryRate, that.frameRateCategoryRate)
+ && Arrays.equals(supportedRefreshRates, that.supportedRefreshRates);
}
@Override
public int hashCode() {
return Objects.hash(Arrays.hashCode(supportedDisplayModes), activeDisplayModeId,
renderFrameRate, activeColorMode, hdrCapabilities, hasArrSupport,
- frameRateCategoryRate);
+ frameRateCategoryRate, Arrays.hashCode(supportedRefreshRates));
}
}
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index 68e642086636..0c243d1dc185 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -119,6 +119,7 @@ static struct {
jfieldID renderFrameRate;
jfieldID hasArrSupport;
jfieldID frameRateCategoryRate;
+ jfieldID supportedRefreshRates;
jfieldID supportedColorModes;
jfieldID activeColorMode;
jfieldID hdrCapabilities;
@@ -1508,6 +1509,21 @@ static jobject nativeGetDynamicDisplayInfo(JNIEnv* env, jclass clazz, jlong disp
env->SetBooleanField(object, gDynamicDisplayInfoClassInfo.hasArrSupport, info.hasArrSupport);
env->SetObjectField(object, gDynamicDisplayInfoClassInfo.frameRateCategoryRate,
convertFrameRateCategoryRateToJavaObject(env, info.frameRateCategoryRate));
+
+ jfloatArray supportedRefreshRatesArray = env->NewFloatArray(info.supportedRefreshRates.size());
+ if (supportedRefreshRatesArray == NULL) {
+ jniThrowException(env, "java/lang/OutOfMemoryError", NULL);
+ return NULL;
+ }
+ jfloat* supportedRefreshRatesArrayValues =
+ env->GetFloatArrayElements(supportedRefreshRatesArray, 0);
+ for (size_t i = 0; i < info.supportedRefreshRates.size(); i++) {
+ supportedRefreshRatesArrayValues[i] = static_cast<jfloat>(info.supportedRefreshRates[i]);
+ }
+ env->ReleaseFloatArrayElements(supportedRefreshRatesArray, supportedRefreshRatesArrayValues, 0);
+ env->SetObjectField(object, gDynamicDisplayInfoClassInfo.supportedRefreshRates,
+ supportedRefreshRatesArray);
+
jintArray colorModesArray = env->NewIntArray(info.supportedColorModes.size());
if (colorModesArray == NULL) {
jniThrowException(env, "java/lang/OutOfMemoryError", NULL);
@@ -2766,6 +2782,8 @@ int register_android_view_SurfaceControl(JNIEnv* env)
gFrameRateCategoryRateClassInfo.ctor =
GetMethodIDOrDie(env, frameRateCategoryRateClazz, "<init>", "(FF)V");
+ gDynamicDisplayInfoClassInfo.supportedRefreshRates =
+ GetFieldIDOrDie(env, dynamicInfoClazz, "supportedRefreshRates", "[F");
gDynamicDisplayInfoClassInfo.supportedColorModes =
GetFieldIDOrDie(env, dynamicInfoClazz, "supportedColorModes", "[I");
gDynamicDisplayInfoClassInfo.activeColorMode =
diff --git a/services/core/java/com/android/server/display/DisplayDeviceInfo.java b/services/core/java/com/android/server/display/DisplayDeviceInfo.java
index d2c044fdbb5e..1c1bdad01034 100644
--- a/services/core/java/com/android/server/display/DisplayDeviceInfo.java
+++ b/services/core/java/com/android/server/display/DisplayDeviceInfo.java
@@ -311,6 +311,11 @@ final class DisplayDeviceInfo {
*/
public FrameRateCategoryRate frameRateCategoryRate;
/**
+ * All the refresh rates supported for the default display mode.
+ */
+ public float[] supportedRefreshRates = new float[0];
+
+ /**
* The default mode of the display.
*/
public int defaultModeId;
@@ -562,7 +567,8 @@ final class DisplayDeviceInfo {
|| installOrientation != other.installOrientation
|| !Objects.equals(displayShape, other.displayShape)
|| hasArrSupport != other.hasArrSupport
- || !Objects.equals(frameRateCategoryRate, other.frameRateCategoryRate)) {
+ || !Objects.equals(frameRateCategoryRate, other.frameRateCategoryRate)
+ || !Arrays.equals(supportedRefreshRates, other.supportedRefreshRates)) {
diff |= DIFF_OTHER;
}
return diff;
@@ -582,6 +588,7 @@ final class DisplayDeviceInfo {
renderFrameRate = other.renderFrameRate;
hasArrSupport = other.hasArrSupport;
frameRateCategoryRate = other.frameRateCategoryRate;
+ supportedRefreshRates = other.supportedRefreshRates;
defaultModeId = other.defaultModeId;
userPreferredModeId = other.userPreferredModeId;
supportedModes = other.supportedModes;
@@ -628,6 +635,7 @@ final class DisplayDeviceInfo {
sb.append(", renderFrameRate ").append(renderFrameRate);
sb.append(", hasArrSupport ").append(hasArrSupport);
sb.append(", frameRateCategoryRate ").append(frameRateCategoryRate);
+ sb.append(", supportedRefreshRates ").append(Arrays.toString(supportedRefreshRates));
sb.append(", defaultModeId ").append(defaultModeId);
sb.append(", userPreferredModeId ").append(userPreferredModeId);
sb.append(", supportedModes ").append(Arrays.toString(supportedModes));
diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
index a4bb8c348d3f..0b8f7d5ef2cf 100644
--- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
@@ -249,6 +249,7 @@ final class LocalDisplayAdapter extends DisplayAdapter {
private int mActiveColorMode;
private boolean mHasArrSupport;
private FrameRateCategoryRate mFrameRateCategoryRate;
+ private float[] mSupportedRefreshRates = new float[0];
private Display.HdrCapabilities mHdrCapabilities;
private boolean mAllmSupported;
private boolean mGameContentTypeSupported;
@@ -316,6 +317,7 @@ final class LocalDisplayAdapter extends DisplayAdapter {
changed |= updateGameContentTypeSupport(dynamicInfo.gameContentTypeSupported);
changed |= updateHasArrSupportLocked(dynamicInfo.hasArrSupport);
changed |= updateFrameRateCategoryRatesLocked(dynamicInfo.frameRateCategoryRate);
+ changed |= updateSupportedRefreshatesLocked(dynamicInfo.supportedRefreshRates);
if (changed) {
mHavePendingChanges = true;
@@ -624,6 +626,20 @@ final class LocalDisplayAdapter extends DisplayAdapter {
return true;
}
+ private boolean updateSupportedRefreshatesLocked(float[] supportedRefreshRates) {
+ if (!getFeatureFlags().enableGetSupportedRefreshRates()) {
+ return false;
+ }
+ if (supportedRefreshRates == null) {
+ return false;
+ }
+ if (Arrays.equals(mSupportedRefreshRates, supportedRefreshRates)) {
+ return false;
+ }
+ mSupportedRefreshRates = supportedRefreshRates;
+ return true;
+ }
+
private boolean updateAllmSupport(boolean supported) {
if (mAllmSupported == supported) {
return false;
@@ -708,6 +724,7 @@ final class LocalDisplayAdapter extends DisplayAdapter {
mInfo.hdrCapabilities = mHdrCapabilities;
mInfo.hasArrSupport = mHasArrSupport;
mInfo.frameRateCategoryRate = mFrameRateCategoryRate;
+ mInfo.supportedRefreshRates = mSupportedRefreshRates;
mInfo.appVsyncOffsetNanos = mActiveSfDisplayMode.appVsyncOffsetNanos;
mInfo.presentationDeadlineNanos = mActiveSfDisplayMode.presentationDeadlineNanos;
mInfo.state = mState;
@@ -1299,6 +1316,7 @@ final class LocalDisplayAdapter extends DisplayAdapter {
pw.println("mDefaultModeId=" + mDefaultModeId);
pw.println("mUserPreferredModeId=" + mUserPreferredModeId);
pw.println("mHasArrSupport=" + mHasArrSupport);
+ pw.println("mSupportedRefreshRates=" + Arrays.toString(mSupportedRefreshRates));
pw.println("mState=" + Display.stateToString(mState));
pw.println("mCommittedState=" + Display.stateToString(mCommittedState));
pw.println("mBrightnessState=" + mBrightnessState);
diff --git a/services/core/java/com/android/server/display/LogicalDisplay.java b/services/core/java/com/android/server/display/LogicalDisplay.java
index 7cfdcafcb610..85465981c473 100644
--- a/services/core/java/com/android/server/display/LogicalDisplay.java
+++ b/services/core/java/com/android/server/display/LogicalDisplay.java
@@ -508,6 +508,8 @@ final class LogicalDisplay {
mBaseDisplayInfo.renderFrameRate = deviceInfo.renderFrameRate;
mBaseDisplayInfo.hasArrSupport = deviceInfo.hasArrSupport;
mBaseDisplayInfo.frameRateCategoryRate = deviceInfo.frameRateCategoryRate;
+ mBaseDisplayInfo.supportedRefreshRates = Arrays.copyOf(
+ deviceInfo.supportedRefreshRates, deviceInfo.supportedRefreshRates.length);
mBaseDisplayInfo.defaultModeId = deviceInfo.defaultModeId;
mBaseDisplayInfo.userPreferredModeId = deviceInfo.userPreferredModeId;
mBaseDisplayInfo.supportedModes = Arrays.copyOf(
diff --git a/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java b/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java
index 7f46bbbf0507..e273c6862fe0 100644
--- a/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java
+++ b/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java
@@ -243,6 +243,11 @@ public class DisplayManagerFlags {
Flags::autoBrightnessModeBedtimeWear
);
+ private final FlagState mGetSupportedRefreshRatesFlagState = new FlagState(
+ Flags.FLAG_ENABLE_GET_SUPPORTED_REFRESH_RATES,
+ Flags::enableGetSupportedRefreshRates
+ );
+
private final FlagState mEnablePluginManagerFlagState = new FlagState(
Flags.FLAG_ENABLE_PLUGIN_MANAGER,
Flags::enablePluginManager
@@ -528,6 +533,13 @@ public class DisplayManagerFlags {
return mAutoBrightnessModeBedtimeWearFlagState.isEnabled();
}
+ /**
+ * @return {@code true} if supported refresh rate api is enabled.
+ */
+ public boolean enableGetSupportedRefreshRates() {
+ return mGetSupportedRefreshRatesFlagState.isEnabled();
+ }
+
public boolean isPluginManagerEnabled() {
return mEnablePluginManagerFlagState.isEnabled();
}
@@ -590,6 +602,7 @@ public class DisplayManagerFlags {
pw.println(" " + mIsUserRefreshRateForExternalDisplayEnabled);
pw.println(" " + mHasArrSupport);
pw.println(" " + mAutoBrightnessModeBedtimeWearFlagState);
+ pw.println(" " + mGetSupportedRefreshRatesFlagState);
pw.println(" " + mEnablePluginManagerFlagState);
pw.println(" " + mDisplayListenerPerformanceImprovementsFlagState);
}
diff --git a/services/core/java/com/android/server/wm/DeferredDisplayUpdater.java b/services/core/java/com/android/server/wm/DeferredDisplayUpdater.java
index 6f8c17a9ac75..4e79e377a2a3 100644
--- a/services/core/java/com/android/server/wm/DeferredDisplayUpdater.java
+++ b/services/core/java/com/android/server/wm/DeferredDisplayUpdater.java
@@ -403,6 +403,7 @@ class DeferredDisplayUpdater {
|| first.renderFrameRate != second.renderFrameRate
|| first.hasArrSupport != second.hasArrSupport
|| !Objects.equals(first.frameRateCategoryRate, second.frameRateCategoryRate)
+ || !Arrays.equals(first.supportedRefreshRates, second.supportedRefreshRates)
|| first.defaultModeId != second.defaultModeId
|| first.userPreferredModeId != second.userPreferredModeId
|| !Arrays.equals(first.supportedModes, second.supportedModes)
diff --git a/services/tests/wmtests/src/com/android/server/wm/DeferredDisplayUpdaterDiffTest.java b/services/tests/wmtests/src/com/android/server/wm/DeferredDisplayUpdaterDiffTest.java
index c9c31dfe5307..a0f4ae77452c 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DeferredDisplayUpdaterDiffTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DeferredDisplayUpdaterDiffTest.java
@@ -239,6 +239,9 @@ public class DeferredDisplayUpdaterDiffTest {
} else if (type.equals(FrameRateCategoryRate.class)) {
field.set(first, new FrameRateCategoryRate(16666667, 11111111));
field.set(second, new FrameRateCategoryRate(11111111, 8333333));
+ } else if (type.isArray() && type.getComponentType().equals(float.class)) {
+ field.set(first, new float[]{60.0f});
+ field.set(second, new float[]{120.0f});
} else {
throw new IllegalArgumentException("Field " + field
+ " is not supported by this test, please add implementation of setting "
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 a0c5b54603f9..c016c5ead23c 100644
--- a/services/tests/wmtests/src/com/android/server/wm/FrameRateSelectionPriorityTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/FrameRateSelectionPriorityTests.java
@@ -69,7 +69,9 @@ public class FrameRateSelectionPriorityTests extends WindowTestsBase {
private static final FrameRateVote FRAME_RATE_VOTE_60_PREFERRED =
new FrameRateVote(60, Surface.FRAME_RATE_COMPATIBILITY_DEFAULT,
SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN);
-
+ private static final float HI_REFRESH_RATE = 90;
+ private static final float MID_REFRESH_RATE = 70;
+ private static final float LOW_REFRESH_RATE = 60;
WindowState createWindow(String name) {
WindowState window = createWindow(null, TYPE_APPLICATION, name);
when(window.mWmService.mDisplayManagerInternal.getRefreshRateSwitchingType())
@@ -82,14 +84,16 @@ public class FrameRateSelectionPriorityTests extends WindowTestsBase {
DisplayInfo di = new DisplayInfo(mDisplayInfo);
Mode defaultMode = di.getDefaultMode();
Mode hiMode = new Mode(1,
- defaultMode.getPhysicalWidth(), defaultMode.getPhysicalHeight(), 90);
+ defaultMode.getPhysicalWidth(), defaultMode.getPhysicalHeight(), HI_REFRESH_RATE);
Mode midMode = new Mode(2,
- defaultMode.getPhysicalWidth(), defaultMode.getPhysicalHeight(), 70);
+ defaultMode.getPhysicalWidth(), defaultMode.getPhysicalHeight(), MID_REFRESH_RATE);
Mode lowMode = new Mode(LOW_MODE_ID,
- defaultMode.getPhysicalWidth(), defaultMode.getPhysicalHeight(), 60);
+ defaultMode.getPhysicalWidth(), defaultMode.getPhysicalHeight(), LOW_REFRESH_RATE);
di.supportedModes = new Mode[] { hiMode, midMode };
di.appsSupportedModes = new Mode[] { hiMode, midMode, lowMode };
+ di.supportedRefreshRates = new float[] {HI_REFRESH_RATE, MID_REFRESH_RATE,
+ LOW_REFRESH_RATE};
di.defaultModeId = 1;
mRefreshRatePolicy = new RefreshRatePolicy(mWm, di, mDenylist);
when(mDisplayPolicy.getRefreshRatePolicy()).thenReturn(mRefreshRatePolicy);
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 cc38f02ccc4c..73e5f58fa7e0 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RefreshRatePolicyTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RefreshRatePolicyTest.java
@@ -101,6 +101,8 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
defaultMode.getPhysicalWidth(), defaultMode.getPhysicalHeight(), LOW_REFRESH_RATE);
mDisplayInfo.supportedModes = new Mode[] { hiMode, midMode };
mDisplayInfo.appsSupportedModes = new Mode[] { hiMode, midMode, lowMode };
+ mDisplayInfo.supportedRefreshRates = new float[] {HI_REFRESH_RATE, MID_REFRESH_RATE,
+ LOW_REFRESH_RATE};
mDisplayInfo.defaultModeId = HI_MODE_ID;
mPolicy = new RefreshRatePolicy(mWm, mDisplayInfo, mDenylist);
}