Revert "Introducing Display Sythetic modes - used for app request refresh rate/resolution selection"
This reverts commit 533736817330c3bdbf4d8fbaf6c03468e795c711.
Reason for revert: DroidMonitor: Potential culprit for Bug b/341892125 - verifying through ABTD before revert submission. This is part of the standard investigation process, and does not mean your CL will be reverted.
Change-Id: I9d0007261dc197a6c4e453676d8c272086241f95
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index 4244771..4475418 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -1223,7 +1223,7 @@
public Mode[] getSupportedModes() {
synchronized (mLock) {
updateDisplayInfoLocked();
- final Display.Mode[] modes = mDisplayInfo.appsSupportedModes;
+ final Display.Mode[] modes = mDisplayInfo.supportedModes;
return Arrays.copyOf(modes, modes.length);
}
}
@@ -2206,7 +2206,6 @@
@NonNull
@HdrCapabilities.HdrType
private final int[] mSupportedHdrTypes;
- private final boolean mIsSynthetic;
/**
* @hide
@@ -2220,6 +2219,13 @@
/**
* @hide
*/
+ public Mode(int width, int height, float refreshRate, float vsyncRate) {
+ this(INVALID_MODE_ID, width, height, refreshRate, vsyncRate, new float[0], new int[0]);
+ }
+
+ /**
+ * @hide
+ */
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public Mode(int modeId, int width, int height, float refreshRate) {
this(modeId, width, height, refreshRate, refreshRate, new float[0], new int[0]);
@@ -2240,21 +2246,11 @@
*/
public Mode(int modeId, int width, int height, float refreshRate, float vsyncRate,
float[] alternativeRefreshRates, @HdrCapabilities.HdrType int[] supportedHdrTypes) {
- this(modeId, width, height, refreshRate, vsyncRate, false, alternativeRefreshRates,
- supportedHdrTypes);
- }
- /**
- * @hide
- */
- public Mode(int modeId, int width, int height, float refreshRate, float vsyncRate,
- boolean isSynthetic, float[] alternativeRefreshRates,
- @HdrCapabilities.HdrType int[] supportedHdrTypes) {
mModeId = modeId;
mWidth = width;
mHeight = height;
mPeakRefreshRate = refreshRate;
mVsyncRate = vsyncRate;
- mIsSynthetic = isSynthetic;
mAlternativeRefreshRates =
Arrays.copyOf(alternativeRefreshRates, alternativeRefreshRates.length);
Arrays.sort(mAlternativeRefreshRates);
@@ -2319,15 +2315,6 @@
}
/**
- * Returns true if mode is synthetic and does not have corresponding
- * SurfaceControl.DisplayMode
- * @hide
- */
- public boolean isSynthetic() {
- return mIsSynthetic;
- }
-
- /**
* Returns an array of refresh rates which can be switched to seamlessly.
* <p>
* A seamless switch is one without visual interruptions, such as a black screen for
@@ -2462,7 +2449,6 @@
.append(", height=").append(mHeight)
.append(", fps=").append(mPeakRefreshRate)
.append(", vsync=").append(mVsyncRate)
- .append(", synthetic=").append(mIsSynthetic)
.append(", alternativeRefreshRates=")
.append(Arrays.toString(mAlternativeRefreshRates))
.append(", supportedHdrTypes=")
@@ -2478,7 +2464,7 @@
private Mode(Parcel in) {
this(in.readInt(), in.readInt(), in.readInt(), in.readFloat(), in.readFloat(),
- in.readBoolean(), in.createFloatArray(), in.createIntArray());
+ in.createFloatArray(), in.createIntArray());
}
@Override
@@ -2488,7 +2474,6 @@
out.writeInt(mHeight);
out.writeFloat(mPeakRefreshRate);
out.writeFloat(mVsyncRate);
- out.writeBoolean(mIsSynthetic);
out.writeFloatArray(mAlternativeRefreshRates);
out.writeIntArray(mSupportedHdrTypes);
}
diff --git a/core/java/android/view/DisplayInfo.java b/core/java/android/view/DisplayInfo.java
index da86e2d..5654bc1 100644
--- a/core/java/android/view/DisplayInfo.java
+++ b/core/java/android/view/DisplayInfo.java
@@ -211,12 +211,6 @@
*/
public Display.Mode[] supportedModes = Display.Mode.EMPTY_ARRAY;
- /**
- * The supported modes that will be exposed externally.
- * Might have different set of modes that supportedModes for VRR displays
- */
- public Display.Mode[] appsSupportedModes = Display.Mode.EMPTY_ARRAY;
-
/** The active color mode. */
public int colorMode;
@@ -435,7 +429,6 @@
&& defaultModeId == other.defaultModeId
&& userPreferredModeId == other.userPreferredModeId
&& Arrays.equals(supportedModes, other.supportedModes)
- && Arrays.equals(appsSupportedModes, other.appsSupportedModes)
&& colorMode == other.colorMode
&& Arrays.equals(supportedColorModes, other.supportedColorModes)
&& Objects.equals(hdrCapabilities, other.hdrCapabilities)
@@ -495,8 +488,6 @@
defaultModeId = other.defaultModeId;
userPreferredModeId = other.userPreferredModeId;
supportedModes = Arrays.copyOf(other.supportedModes, other.supportedModes.length);
- appsSupportedModes = Arrays.copyOf(
- other.appsSupportedModes, other.appsSupportedModes.length);
colorMode = other.colorMode;
supportedColorModes = Arrays.copyOf(
other.supportedColorModes, other.supportedColorModes.length);
@@ -554,11 +545,6 @@
for (int i = 0; i < nModes; i++) {
supportedModes[i] = Display.Mode.CREATOR.createFromParcel(source);
}
- int nAppModes = source.readInt();
- appsSupportedModes = new Display.Mode[nAppModes];
- for (int i = 0; i < nAppModes; i++) {
- appsSupportedModes[i] = Display.Mode.CREATOR.createFromParcel(source);
- }
colorMode = source.readInt();
int nColorModes = source.readInt();
supportedColorModes = new int[nColorModes];
@@ -625,10 +611,6 @@
for (int i = 0; i < supportedModes.length; i++) {
supportedModes[i].writeToParcel(dest, flags);
}
- dest.writeInt(appsSupportedModes.length);
- for (int i = 0; i < appsSupportedModes.length; i++) {
- appsSupportedModes[i].writeToParcel(dest, flags);
- }
dest.writeInt(colorMode);
dest.writeInt(supportedColorModes.length);
for (int i = 0; i < supportedColorModes.length; i++) {
@@ -867,10 +849,8 @@
sb.append(defaultModeId);
sb.append(", userPreferredModeId ");
sb.append(userPreferredModeId);
- sb.append(", supportedModes ");
+ sb.append(", modes ");
sb.append(Arrays.toString(supportedModes));
- sb.append(", appsSupportedModes ");
- sb.append(Arrays.toString(appsSupportedModes));
sb.append(", hdrCapabilities ");
sb.append(hdrCapabilities);
sb.append(", userDisabledHdrTypes ");
diff --git a/services/core/java/com/android/server/display/DisplayAdapter.java b/services/core/java/com/android/server/display/DisplayAdapter.java
index 5690a9e..c26118e 100644
--- a/services/core/java/com/android/server/display/DisplayAdapter.java
+++ b/services/core/java/com/android/server/display/DisplayAdapter.java
@@ -135,7 +135,7 @@
float[] alternativeRefreshRates,
@Display.HdrCapabilities.HdrType int[] supportedHdrTypes) {
return new Display.Mode(NEXT_DISPLAY_MODE_ID.getAndIncrement(), width, height, refreshRate,
- vsyncRate, false, alternativeRefreshRates, supportedHdrTypes);
+ vsyncRate, alternativeRefreshRates, supportedHdrTypes);
}
public interface Listener {
diff --git a/services/core/java/com/android/server/display/LogicalDisplay.java b/services/core/java/com/android/server/display/LogicalDisplay.java
index 5d55d190..189e366 100644
--- a/services/core/java/com/android/server/display/LogicalDisplay.java
+++ b/services/core/java/com/android/server/display/LogicalDisplay.java
@@ -35,7 +35,6 @@
import com.android.server.display.layout.Layout;
import com.android.server.display.mode.DisplayModeDirector;
-import com.android.server.display.mode.SyntheticModeManager;
import com.android.server.wm.utils.InsetUtils;
import java.io.PrintWriter;
@@ -409,8 +408,7 @@
*
* @param deviceRepo Repository of active {@link DisplayDevice}s.
*/
- public void updateLocked(DisplayDeviceRepository deviceRepo,
- SyntheticModeManager syntheticModeManager) {
+ public void updateLocked(DisplayDeviceRepository deviceRepo) {
// Nothing to update if already invalid.
if (mPrimaryDisplayDevice == null) {
return;
@@ -428,7 +426,6 @@
// logical display that they are sharing. (eg. Adjust size for pixel-perfect
// mirroring over HDMI.)
DisplayDeviceInfo deviceInfo = mPrimaryDisplayDevice.getDisplayDeviceInfoLocked();
- DisplayDeviceConfig config = mPrimaryDisplayDevice.getDisplayDeviceConfig();
if (!Objects.equals(mPrimaryDisplayDeviceInfo, deviceInfo) || mDirty) {
mBaseDisplayInfo.layerStack = mLayerStack;
mBaseDisplayInfo.flags = 0;
@@ -510,9 +507,6 @@
mBaseDisplayInfo.userPreferredModeId = deviceInfo.userPreferredModeId;
mBaseDisplayInfo.supportedModes = Arrays.copyOf(
deviceInfo.supportedModes, deviceInfo.supportedModes.length);
- mBaseDisplayInfo.appsSupportedModes = syntheticModeManager.createAppSupportedModes(
- config, mBaseDisplayInfo.supportedModes
- );
mBaseDisplayInfo.colorMode = deviceInfo.colorMode;
mBaseDisplayInfo.supportedColorModes = Arrays.copyOf(
deviceInfo.supportedColorModes,
diff --git a/services/core/java/com/android/server/display/LogicalDisplayMapper.java b/services/core/java/com/android/server/display/LogicalDisplayMapper.java
index 01485cb..bca53cf 100644
--- a/services/core/java/com/android/server/display/LogicalDisplayMapper.java
+++ b/services/core/java/com/android/server/display/LogicalDisplayMapper.java
@@ -45,7 +45,6 @@
import com.android.server.display.feature.DisplayManagerFlags;
import com.android.server.display.layout.DisplayIdProducer;
import com.android.server.display.layout.Layout;
-import com.android.server.display.mode.SyntheticModeManager;
import com.android.server.display.utils.DebugUtils;
import com.android.server.policy.WindowManagerPolicy;
import com.android.server.utils.FoldSettingProvider;
@@ -205,7 +204,6 @@
private boolean mBootCompleted = false;
private boolean mInteractive;
private final DisplayManagerFlags mFlags;
- private final SyntheticModeManager mSyntheticModeManager;
LogicalDisplayMapper(@NonNull Context context, FoldSettingProvider foldSettingProvider,
FoldGracePeriodProvider foldGracePeriodProvider,
@@ -215,8 +213,7 @@
this(context, foldSettingProvider, foldGracePeriodProvider, repo, listener, syncRoot,
handler,
new DeviceStateToLayoutMap((isDefault) -> isDefault ? DEFAULT_DISPLAY
- : sNextNonDefaultDisplayId++, flags), flags,
- new SyntheticModeManager(flags));
+ : sNextNonDefaultDisplayId++, flags), flags);
}
LogicalDisplayMapper(@NonNull Context context, FoldSettingProvider foldSettingProvider,
@@ -224,7 +221,7 @@
@NonNull DisplayDeviceRepository repo,
@NonNull Listener listener, @NonNull DisplayManagerService.SyncRoot syncRoot,
@NonNull Handler handler, @NonNull DeviceStateToLayoutMap deviceStateToLayoutMap,
- DisplayManagerFlags flags, SyntheticModeManager syntheticModeManager) {
+ DisplayManagerFlags flags) {
mSyncRoot = syncRoot;
mPowerManager = context.getSystemService(PowerManager.class);
mInteractive = mPowerManager.isInteractive();
@@ -244,7 +241,6 @@
mDisplayDeviceRepo.addListener(this);
mDeviceStateToLayoutMap = deviceStateToLayoutMap;
mFlags = flags;
- mSyntheticModeManager = syntheticModeManager;
}
@Override
@@ -741,7 +737,7 @@
mTempDisplayInfo.copyFrom(display.getDisplayInfoLocked());
display.getNonOverrideDisplayInfoLocked(mTempNonOverrideDisplayInfo);
- display.updateLocked(mDisplayDeviceRepo, mSyntheticModeManager);
+ display.updateLocked(mDisplayDeviceRepo);
final DisplayInfo newDisplayInfo = display.getDisplayInfoLocked();
final int updateState = mUpdatedLogicalDisplays.get(displayId, UPDATE_STATE_NEW);
final boolean wasPreviouslyUpdated = updateState != UPDATE_STATE_NEW;
@@ -1181,7 +1177,7 @@
final LogicalDisplay display = new LogicalDisplay(displayId, layerStack, device,
mFlags.isPixelAnisotropyCorrectionInLogicalDisplayEnabled(),
mFlags.isAlwaysRotateDisplayDeviceEnabled());
- display.updateLocked(mDisplayDeviceRepo, mSyntheticModeManager);
+ display.updateLocked(mDisplayDeviceRepo);
final DisplayInfo info = display.getDisplayInfoLocked();
if (info.type == Display.TYPE_INTERNAL && mDeviceStateToLayoutMap.size() > 1) {
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 a5414fc..cd07f5a 100644
--- a/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java
+++ b/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java
@@ -164,11 +164,6 @@
Flags::ignoreAppPreferredRefreshRateRequest
);
- private final FlagState mSynthetic60hzModes = new FlagState(
- Flags.FLAG_ENABLE_SYNTHETIC_60HZ_MODES,
- Flags::enableSynthetic60hzModes
- );
-
/**
* @return {@code true} if 'port' is allowed in display layout configuration file.
*/
@@ -338,10 +333,6 @@
return mIgnoreAppPreferredRefreshRate.isEnabled();
}
- public boolean isSynthetic60HzModesEnabled() {
- return mSynthetic60hzModes.isEnabled();
- }
-
/**
* dumps all flagstates
* @param pw printWriter
@@ -374,8 +365,6 @@
pw.println(" " + mResolutionBackupRestore);
pw.println(" " + mUseFusionProxSensor);
pw.println(" " + mPeakRefreshRatePhysicalLimit);
- pw.println(" " + mIgnoreAppPreferredRefreshRate);
- pw.println(" " + mSynthetic60hzModes);
}
private static class FlagState {
diff --git a/services/core/java/com/android/server/display/feature/display_flags.aconfig b/services/core/java/com/android/server/display/feature/display_flags.aconfig
index 316b6db..a15a8e8 100644
--- a/services/core/java/com/android/server/display/feature/display_flags.aconfig
+++ b/services/core/java/com/android/server/display/feature/display_flags.aconfig
@@ -266,15 +266,3 @@
purpose: PURPOSE_BUGFIX
}
}
-
-flag {
- name: "enable_synthetic_60hz_modes"
- namespace: "display_manager"
- description: "Feature flag for DisplayManager to enable synthetic 60Hz modes for vrr displays"
- bug: "338183249"
- is_fixed_read_only: true
- metadata {
- purpose: PURPOSE_BUGFIX
- }
-}
-
diff --git a/services/core/java/com/android/server/display/mode/DisplayModeDirector.java b/services/core/java/com/android/server/display/mode/DisplayModeDirector.java
index e20ac73..846ee23 100644
--- a/services/core/java/com/android/server/display/mode/DisplayModeDirector.java
+++ b/services/core/java/com/android/server/display/mode/DisplayModeDirector.java
@@ -147,9 +147,6 @@
// A map from the display ID to the supported modes on that display.
private SparseArray<Display.Mode[]> mSupportedModesByDisplay;
- // A map from the display ID to the app supported modes on that display, might be different from
- // mSupportedModesByDisplay for VRR displays, used in app mode requests.
- private SparseArray<Display.Mode[]> mAppSupportedModesByDisplay;
// A map from the display ID to the default mode of that display.
private SparseArray<Display.Mode> mDefaultModeByDisplay;
// a map from display id to display device config
@@ -225,7 +222,6 @@
mVotesStatsReporter = injector.getVotesStatsReporter(
displayManagerFlags.isRefreshRateVotingTelemetryEnabled());
mSupportedModesByDisplay = new SparseArray<>();
- mAppSupportedModesByDisplay = new SparseArray<>();
mDefaultModeByDisplay = new SparseArray<>();
mAppRequestObserver = new AppRequestObserver(displayManagerFlags);
mConfigParameterProvider = new DeviceConfigParameterProvider(injector.getDeviceConfig());
@@ -577,12 +573,6 @@
final Display.Mode[] modes = mSupportedModesByDisplay.valueAt(i);
pw.println(" " + id + " -> " + Arrays.toString(modes));
}
- pw.println(" mAppSupportedModesByDisplay:");
- for (int i = 0; i < mAppSupportedModesByDisplay.size(); i++) {
- final int id = mAppSupportedModesByDisplay.keyAt(i);
- final Display.Mode[] modes = mAppSupportedModesByDisplay.valueAt(i);
- pw.println(" " + id + " -> " + Arrays.toString(modes));
- }
pw.println(" mDefaultModeByDisplay:");
for (int i = 0; i < mDefaultModeByDisplay.size(); i++) {
final int id = mDefaultModeByDisplay.keyAt(i);
@@ -648,11 +638,6 @@
}
@VisibleForTesting
- void injectAppSupportedModesByDisplay(SparseArray<Display.Mode[]> appSupportedModesByDisplay) {
- mAppSupportedModesByDisplay = appSupportedModesByDisplay;
- }
-
- @VisibleForTesting
void injectDefaultModeByDisplay(SparseArray<Display.Mode> defaultModeByDisplay) {
mDefaultModeByDisplay = defaultModeByDisplay;
}
@@ -1291,7 +1276,7 @@
Display.Mode[] modes;
Display.Mode defaultMode;
synchronized (mLock) {
- modes = mAppSupportedModesByDisplay.get(displayId);
+ modes = mSupportedModesByDisplay.get(displayId);
defaultMode = mDefaultModeByDisplay.get(displayId);
}
for (int i = 0; i < modes.length; i++) {
@@ -1304,7 +1289,7 @@
}
private void setAppRequestedModeLocked(int displayId, int modeId) {
- final Display.Mode requestedMode = findAppModeByIdLocked(displayId, modeId);
+ final Display.Mode requestedMode = findModeByIdLocked(displayId, modeId);
if (Objects.equals(requestedMode, mAppRequestedModeByDisplay.get(displayId))) {
return;
}
@@ -1312,17 +1297,10 @@
final Vote sizeVote;
if (requestedMode != null) {
mAppRequestedModeByDisplay.put(displayId, requestedMode);
+ baseModeRefreshRateVote =
+ Vote.forBaseModeRefreshRate(requestedMode.getRefreshRate());
sizeVote = Vote.forSize(requestedMode.getPhysicalWidth(),
requestedMode.getPhysicalHeight());
- if (requestedMode.isSynthetic()) {
- // TODO: for synthetic mode we should not limit frame rate, we must ensure
- // that frame rate is reachable within other Votes constraints
- baseModeRefreshRateVote = Vote.forRenderFrameRates(
- requestedMode.getRefreshRate(), requestedMode.getRefreshRate());
- } else {
- baseModeRefreshRateVote =
- Vote.forBaseModeRefreshRate(requestedMode.getRefreshRate());
- }
} else {
mAppRequestedModeByDisplay.remove(displayId);
baseModeRefreshRateVote = null;
@@ -1366,8 +1344,8 @@
vote);
}
- private Display.Mode findAppModeByIdLocked(int displayId, int modeId) {
- Display.Mode[] modes = mAppSupportedModesByDisplay.get(displayId);
+ private Display.Mode findModeByIdLocked(int displayId, int modeId) {
+ Display.Mode[] modes = mSupportedModesByDisplay.get(displayId);
if (modes == null) {
return null;
}
@@ -1446,14 +1424,12 @@
// Populate existing displays
SparseArray<Display.Mode[]> modes = new SparseArray<>();
- SparseArray<Display.Mode[]> appModes = new SparseArray<>();
SparseArray<Display.Mode> defaultModes = new SparseArray<>();
Display[] displays = mInjector.getDisplays();
for (Display d : displays) {
final int displayId = d.getDisplayId();
DisplayInfo info = getDisplayInfo(displayId);
modes.put(displayId, info.supportedModes);
- appModes.put(displayId, info.appsSupportedModes);
defaultModes.put(displayId, info.getDefaultMode());
}
DisplayDeviceConfig defaultDisplayConfig = mDisplayDeviceConfigProvider
@@ -1462,7 +1438,6 @@
final int size = modes.size();
for (int i = 0; i < size; i++) {
mSupportedModesByDisplay.put(modes.keyAt(i), modes.valueAt(i));
- mAppSupportedModesByDisplay.put(appModes.keyAt(i), appModes.valueAt(i));
mDefaultModeByDisplay.put(defaultModes.keyAt(i), defaultModes.valueAt(i));
}
mDisplayDeviceConfigByDisplay.put(Display.DEFAULT_DISPLAY, defaultDisplayConfig);
@@ -1484,7 +1459,6 @@
public void onDisplayRemoved(int displayId) {
synchronized (mLock) {
mSupportedModesByDisplay.remove(displayId);
- mAppSupportedModesByDisplay.remove(displayId);
mDefaultModeByDisplay.remove(displayId);
mDisplayDeviceConfigByDisplay.remove(displayId);
mSettingsObserver.removeRefreshRateSetting(displayId);
@@ -1645,11 +1619,6 @@
mSupportedModesByDisplay.put(displayId, info.supportedModes);
changed = true;
}
- if (!Arrays.equals(mAppSupportedModesByDisplay.get(displayId),
- info.appsSupportedModes)) {
- mAppSupportedModesByDisplay.put(displayId, info.appsSupportedModes);
- changed = true;
- }
if (!Objects.equals(mDefaultModeByDisplay.get(displayId), info.getDefaultMode())) {
changed = true;
mDefaultModeByDisplay.put(displayId, info.getDefaultMode());
diff --git a/services/core/java/com/android/server/display/mode/SyntheticModeManager.java b/services/core/java/com/android/server/display/mode/SyntheticModeManager.java
deleted file mode 100644
index 5b6bbc5..0000000
--- a/services/core/java/com/android/server/display/mode/SyntheticModeManager.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.display.mode;
-
-import android.util.Size;
-import android.view.Display;
-
-import com.android.server.display.DisplayDeviceConfig;
-import com.android.server.display.feature.DisplayManagerFlags;
-
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * When selected by app synthetic modes will only affect render rate switch rather than mode switch
- */
-public class SyntheticModeManager {
- private static final float FLOAT_TOLERANCE = 0.01f;
- private static final float SYNTHETIC_MODE_HIGH_BOUNDARY = 60f + FLOAT_TOLERANCE;
-
- private final boolean mSynthetic60HzModesEnabled;
-
- public SyntheticModeManager(DisplayManagerFlags flags) {
- mSynthetic60HzModesEnabled = flags.isSynthetic60HzModesEnabled();
- }
-
- /**
- * creates display supportedModes array, exposed to applications
- */
- public Display.Mode[] createAppSupportedModes(DisplayDeviceConfig config,
- Display.Mode[] modes) {
- if (!config.isVrrSupportEnabled() || !mSynthetic60HzModesEnabled) {
- return modes;
- }
- List<Display.Mode> appSupportedModes = new ArrayList<>();
- Map<Size, int[]> sizes = new LinkedHashMap<>();
- int nextModeId = 0;
- // exclude "real" 60Hz modes and below for VRR displays,
- // they will be replaced with synthetic 60Hz mode
- // for VRR display there should be "real" mode with rr > 60Hz
- for (Display.Mode mode : modes) {
- if (mode.getRefreshRate() > SYNTHETIC_MODE_HIGH_BOUNDARY) {
- appSupportedModes.add(mode);
- }
- if (mode.getModeId() > nextModeId) {
- nextModeId = mode.getModeId();
- }
-
- float divisor = mode.getVsyncRate() / 60f;
- boolean is60HzAchievable = Math.abs(divisor - Math.round(divisor)) < FLOAT_TOLERANCE;
- if (is60HzAchievable) {
- sizes.put(new Size(mode.getPhysicalWidth(), mode.getPhysicalHeight()),
- mode.getSupportedHdrTypes());
- }
- }
- // even if VRR display does not have 60Hz mode, we are still adding synthetic 60Hz mode
- // for each screen size
- // vsync rate, alternativeRates and hdrTypes are not important for synthetic mode,
- // only refreshRate and size are used for DisplayModeDirector votes.
- for (Map.Entry<Size, int[]> entry: sizes.entrySet()) {
- nextModeId++;
- Size size = entry.getKey();
- int[] hdrTypes = entry.getValue();
- appSupportedModes.add(
- new Display.Mode(nextModeId, size.getWidth(), size.getHeight(), 60f, 60f, true,
- new float[0], hdrTypes));
- }
- Display.Mode[] appSupportedModesArr = new Display.Mode[appSupportedModes.size()];
- return appSupportedModes.toArray(appSupportedModesArr);
- }
-}
diff --git a/services/core/java/com/android/server/wm/DeferredDisplayUpdater.java b/services/core/java/com/android/server/wm/DeferredDisplayUpdater.java
index 125eb2a..ca5f26a 100644
--- a/services/core/java/com/android/server/wm/DeferredDisplayUpdater.java
+++ b/services/core/java/com/android/server/wm/DeferredDisplayUpdater.java
@@ -28,6 +28,7 @@
import android.graphics.Rect;
import android.os.Message;
import android.os.Trace;
+import android.util.Log;
import android.util.Slog;
import android.view.DisplayInfo;
import android.window.DisplayAreaInfo;
@@ -390,7 +391,6 @@
|| first.defaultModeId != second.defaultModeId
|| first.userPreferredModeId != second.userPreferredModeId
|| !Arrays.equals(first.supportedModes, second.supportedModes)
- || !Arrays.equals(first.appsSupportedModes, second.appsSupportedModes)
|| first.colorMode != second.colorMode
|| !Arrays.equals(first.supportedColorModes, second.supportedColorModes)
|| !Objects.equals(first.hdrCapabilities, second.hdrCapabilities)
diff --git a/services/core/java/com/android/server/wm/RefreshRatePolicy.java b/services/core/java/com/android/server/wm/RefreshRatePolicy.java
index 8cab7d9..03574029 100644
--- a/services/core/java/com/android/server/wm/RefreshRatePolicy.java
+++ b/services/core/java/com/android/server/wm/RefreshRatePolicy.java
@@ -275,7 +275,7 @@
if (refreshRateSwitchingType != SWITCHING_TYPE_RENDER_FRAME_RATE_ONLY) {
final int preferredModeId = w.mAttrs.preferredDisplayModeId;
if (preferredModeId > 0) {
- for (Display.Mode mode : mDisplayInfo.appsSupportedModes) {
+ for (Display.Mode mode : mDisplayInfo.supportedModes) {
if (preferredModeId == mode.getModeId()) {
return w.mFrameRateVote.update(mode.getRefreshRate(),
Surface.FRAME_RATE_COMPATIBILITY_EXACT,
diff --git a/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayMapperTest.java b/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayMapperTest.java
index 6d138c5..1a03e78 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayMapperTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayMapperTest.java
@@ -50,7 +50,6 @@
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
@@ -81,10 +80,10 @@
import com.android.internal.foldables.FoldGracePeriodProvider;
import com.android.internal.util.test.LocalServiceKeeperRule;
+import com.android.server.LocalServices;
import com.android.server.display.feature.DisplayManagerFlags;
import com.android.server.display.layout.DisplayIdProducer;
import com.android.server.display.layout.Layout;
-import com.android.server.display.mode.SyntheticModeManager;
import com.android.server.policy.WindowManagerPolicy;
import com.android.server.utils.FoldSettingProvider;
@@ -92,7 +91,6 @@
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.AdditionalAnswers;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
@@ -143,8 +141,6 @@
@Mock DisplayManagerFlags mFlagsMock;
@Mock DisplayAdapter mDisplayAdapterMock;
@Mock WindowManagerPolicy mWindowManagerPolicy;
- @Mock
- SyntheticModeManager mSyntheticModeManagerMock;
@Captor ArgumentCaptor<LogicalDisplay> mDisplayCaptor;
@Captor ArgumentCaptor<Integer> mDisplayEventCaptor;
@@ -200,8 +196,6 @@
when(mResourcesMock.getIntArray(
com.android.internal.R.array.config_deviceStatesOnWhichToSleep))
.thenReturn(new int[]{0});
- when(mSyntheticModeManagerMock.createAppSupportedModes(any(), any())).thenAnswer(
- AdditionalAnswers.returnsSecondArg());
when(mFlagsMock.isConnectedDisplayManagementEnabled()).thenReturn(false);
mLooper = new TestLooper();
@@ -210,7 +204,7 @@
mFoldGracePeriodProvider,
mDisplayDeviceRepo,
mListenerMock, new DisplayManagerService.SyncRoot(), mHandler,
- mDeviceStateToLayoutMapSpy, mFlagsMock, mSyntheticModeManagerMock);
+ mDeviceStateToLayoutMapSpy, mFlagsMock);
mLogicalDisplayMapper.onWindowManagerReady();
}
diff --git a/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayTest.java b/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayTest.java
index 8936f06..779445e 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayTest.java
@@ -16,7 +16,6 @@
package com.android.server.display;
-import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
@@ -41,11 +40,9 @@
import androidx.test.filters.SmallTest;
import com.android.server.display.layout.Layout;
-import com.android.server.display.mode.SyntheticModeManager;
import org.junit.Before;
import org.junit.Test;
-import org.mockito.AdditionalAnswers;
import java.io.InputStream;
import java.io.OutputStream;
@@ -57,7 +54,6 @@
private static final int DISPLAY_WIDTH = 100;
private static final int DISPLAY_HEIGHT = 200;
private static final int MODE_ID = 1;
- private static final int OTHER_MODE_ID = 2;
private LogicalDisplay mLogicalDisplay;
private DisplayDevice mDisplayDevice;
@@ -65,7 +61,6 @@
private Context mContext;
private IBinder mDisplayToken;
private DisplayDeviceRepository mDeviceRepo;
- private SyntheticModeManager mSyntheticModeManager;
private final DisplayDeviceInfo mDisplayDeviceInfo = new DisplayDeviceInfo();
@Before
@@ -76,7 +71,6 @@
mDisplayAdapter = mock(DisplayAdapter.class);
mContext = mock(Context.class);
mDisplayToken = mock(IBinder.class);
- mSyntheticModeManager = mock(SyntheticModeManager.class);
mLogicalDisplay = new LogicalDisplay(DISPLAY_ID, LAYER_STACK, mDisplayDevice);
mDisplayDeviceInfo.copyFrom(new DisplayDeviceInfo());
@@ -87,8 +81,6 @@
mDisplayDeviceInfo.supportedModes = new Display.Mode[] {new Display.Mode(MODE_ID,
DISPLAY_WIDTH, DISPLAY_HEIGHT, /* refreshRate= */ 60)};
when(mDisplayDevice.getDisplayDeviceInfoLocked()).thenReturn(mDisplayDeviceInfo);
- when(mSyntheticModeManager.createAppSupportedModes(any(), any())).thenAnswer(
- AdditionalAnswers.returnsSecondArg());
// Disable binder caches in this process.
PropertyInvalidatedCache.disableForTestMode();
@@ -110,7 +102,7 @@
public void finishWrite(OutputStream os, boolean success) {}
}));
mDeviceRepo.onDisplayDeviceEvent(mDisplayDevice, DisplayAdapter.DISPLAY_DEVICE_EVENT_ADDED);
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ mLogicalDisplay.updateLocked(mDeviceRepo);
}
@Test
@@ -119,7 +111,7 @@
mDisplayDeviceInfo.xDpi = 0.5f;
mDisplayDeviceInfo.yDpi = 1.0f;
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ mLogicalDisplay.updateLocked(mDeviceRepo);
var originalDisplayInfo = mLogicalDisplay.getDisplayInfoLocked();
assertEquals(DISPLAY_WIDTH, originalDisplayInfo.logicalWidth);
assertEquals(DISPLAY_HEIGHT, originalDisplayInfo.logicalHeight);
@@ -164,7 +156,7 @@
mDisplayDeviceInfo.xDpi = 0.5f;
mDisplayDeviceInfo.yDpi = 1.0f;
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ mLogicalDisplay.updateLocked(mDeviceRepo);
var originalDisplayInfo = mLogicalDisplay.getDisplayInfoLocked();
// Content width not scaled
assertEquals(DISPLAY_WIDTH, originalDisplayInfo.logicalWidth);
@@ -193,7 +185,7 @@
mDisplayDeviceInfo.xDpi = 0.5f;
mDisplayDeviceInfo.yDpi = 1.0f;
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ mLogicalDisplay.updateLocked(mDeviceRepo);
var originalDisplayInfo = mLogicalDisplay.getDisplayInfoLocked();
// Content width re-scaled
assertEquals(DISPLAY_WIDTH * 2, originalDisplayInfo.logicalWidth);
@@ -222,7 +214,7 @@
mDisplayDeviceInfo.xDpi = 1.0f;
mDisplayDeviceInfo.yDpi = 0.5f;
mLogicalDisplay.setDisplayInfoOverrideFromWindowManagerLocked(displayInfo);
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ mLogicalDisplay.updateLocked(mDeviceRepo);
SurfaceControl.Transaction t = mock(SurfaceControl.Transaction.class);
mLogicalDisplay.configureDisplayLocked(t, mDisplayDevice, false);
@@ -242,7 +234,7 @@
displayInfo.logicalHeight = DISPLAY_HEIGHT;
mDisplayDeviceInfo.flags = DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT;
mLogicalDisplay.setDisplayInfoOverrideFromWindowManagerLocked(displayInfo);
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ mLogicalDisplay.updateLocked(mDeviceRepo);
var updatedDisplayInfo = mLogicalDisplay.getDisplayInfoLocked();
assertEquals(Surface.ROTATION_90, updatedDisplayInfo.rotation);
@@ -285,7 +277,7 @@
mDisplayDeviceInfo.xDpi = 0.5f;
mDisplayDeviceInfo.yDpi = 1.0f;
mLogicalDisplay.setDisplayInfoOverrideFromWindowManagerLocked(displayInfo);
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ mLogicalDisplay.updateLocked(mDeviceRepo);
SurfaceControl.Transaction t = mock(SurfaceControl.Transaction.class);
mLogicalDisplay.configureDisplayLocked(t, mDisplayDevice, false);
@@ -309,7 +301,7 @@
mDisplayDeviceInfo.xDpi = 1.0f;
mDisplayDeviceInfo.yDpi = 0.5f;
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ mLogicalDisplay.updateLocked(mDeviceRepo);
var originalDisplayInfo = mLogicalDisplay.getDisplayInfoLocked();
// Content width re-scaled
assertEquals(DISPLAY_WIDTH, originalDisplayInfo.logicalWidth);
@@ -349,7 +341,7 @@
expectedPosition.set(40, -20);
mDisplayDeviceInfo.flags = DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT;
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ mLogicalDisplay.updateLocked(mDeviceRepo);
displayInfo.logicalWidth = DISPLAY_HEIGHT;
displayInfo.logicalHeight = DISPLAY_WIDTH;
displayInfo.rotation = Surface.ROTATION_90;
@@ -364,7 +356,7 @@
mLogicalDisplay = new LogicalDisplay(DISPLAY_ID, LAYER_STACK, mDisplayDevice,
/*isAnisotropyCorrectionEnabled=*/ true,
/*isAlwaysRotateDisplayDeviceEnabled=*/ true);
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ mLogicalDisplay.updateLocked(mDeviceRepo);
Point expectedPosition = new Point();
SurfaceControl.Transaction t = mock(SurfaceControl.Transaction.class);
@@ -391,7 +383,7 @@
expectedPosition.set(40, -20);
mDisplayDeviceInfo.flags = DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT;
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ mLogicalDisplay.updateLocked(mDeviceRepo);
displayInfo.logicalWidth = DISPLAY_HEIGHT;
displayInfo.logicalHeight = DISPLAY_WIDTH;
displayInfo.rotation = Surface.ROTATION_90;
@@ -452,7 +444,7 @@
// Update position and test to see that it's been updated to a rear, presentation display
// that destroys content on removal
mLogicalDisplay.setDevicePositionLocked(Layout.Display.POSITION_REAR);
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ mLogicalDisplay.updateLocked(mDeviceRepo);
assertEquals(Display.FLAG_REAR | Display.FLAG_PRESENTATION,
mLogicalDisplay.getDisplayInfoLocked().flags);
assertEquals(Display.REMOVE_MODE_DESTROY_CONTENT,
@@ -460,7 +452,7 @@
// And then check the unsetting the position resets both
mLogicalDisplay.setDevicePositionLocked(Layout.Display.POSITION_UNKNOWN);
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ mLogicalDisplay.updateLocked(mDeviceRepo);
assertEquals(0, mLogicalDisplay.getDisplayInfoLocked().flags);
assertEquals(Display.REMOVE_MODE_MOVE_CONTENT_TO_PRIMARY,
mLogicalDisplay.getDisplayInfoLocked().removeMode);
@@ -476,7 +468,7 @@
// Display info should only be updated when updateLocked is called
assertEquals(info2, info1);
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ mLogicalDisplay.updateLocked(mDeviceRepo);
DisplayInfo info3 = mLogicalDisplay.getDisplayInfoLocked();
assertNotEquals(info3, info2);
assertEquals(layoutLimitedRefreshRate, info3.layoutLimitedRefreshRate);
@@ -491,7 +483,7 @@
mLogicalDisplay.updateLayoutLimitedRefreshRateLocked(layoutLimitedRefreshRate);
assertTrue(mLogicalDisplay.isDirtyLocked());
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ mLogicalDisplay.updateLocked(mDeviceRepo);
assertFalse(mLogicalDisplay.isDirtyLocked());
}
@@ -505,7 +497,7 @@
// Display info should only be updated when updateLocked is called
assertEquals(info2, info1);
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ mLogicalDisplay.updateLocked(mDeviceRepo);
DisplayInfo info3 = mLogicalDisplay.getDisplayInfoLocked();
assertNotEquals(info3, info2);
assertTrue(refreshRanges.contentEquals(info3.thermalRefreshRateThrottling));
@@ -520,7 +512,7 @@
mLogicalDisplay.updateThermalRefreshRateThrottling(refreshRanges);
assertTrue(mLogicalDisplay.isDirtyLocked());
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ mLogicalDisplay.updateLocked(mDeviceRepo);
assertFalse(mLogicalDisplay.isDirtyLocked());
}
@@ -533,7 +525,7 @@
// Display info should only be updated when updateLocked is called
assertEquals(info2, info1);
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ mLogicalDisplay.updateLocked(mDeviceRepo);
DisplayInfo info3 = mLogicalDisplay.getDisplayInfoLocked();
assertNotEquals(info3, info2);
assertEquals(newId, info3.displayGroupId);
@@ -546,7 +538,7 @@
mLogicalDisplay.updateDisplayGroupIdLocked(99);
assertTrue(mLogicalDisplay.isDirtyLocked());
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ mLogicalDisplay.updateLocked(mDeviceRepo);
assertFalse(mLogicalDisplay.isDirtyLocked());
}
@@ -559,7 +551,7 @@
// Display info should only be updated when updateLocked is called
assertEquals(info2, info1);
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ mLogicalDisplay.updateLocked(mDeviceRepo);
DisplayInfo info3 = mLogicalDisplay.getDisplayInfoLocked();
assertNotEquals(info3, info2);
assertEquals(brightnessThrottlingDataId, info3.thermalBrightnessThrottlingDataId);
@@ -572,20 +564,7 @@
mLogicalDisplay.setThermalBrightnessThrottlingDataIdLocked("99");
assertTrue(mLogicalDisplay.isDirtyLocked());
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ mLogicalDisplay.updateLocked(mDeviceRepo);
assertFalse(mLogicalDisplay.isDirtyLocked());
}
-
- @Test
- public void testGetsAppSupportedModesFromSyntheticModeManager() {
- mLogicalDisplay = new LogicalDisplay(DISPLAY_ID, LAYER_STACK, mDisplayDevice);
- Display.Mode[] appSupportedModes = new Display.Mode[] {new Display.Mode(OTHER_MODE_ID,
- DISPLAY_WIDTH, DISPLAY_HEIGHT, /* refreshRate= */ 45)};
- when(mSyntheticModeManager.createAppSupportedModes(
- any(), eq(mDisplayDeviceInfo.supportedModes))).thenReturn(appSupportedModes);
-
- mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
- DisplayInfo info = mLogicalDisplay.getDisplayInfoLocked();
- assertArrayEquals(appSupportedModes, info.appsSupportedModes);
- }
}
diff --git a/services/tests/displayservicetests/src/com/android/server/display/mode/AppRequestObserverTest.kt b/services/tests/displayservicetests/src/com/android/server/display/mode/AppRequestObserverTest.kt
index cf6146f..f0abcd2 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/mode/AppRequestObserverTest.kt
+++ b/services/tests/displayservicetests/src/com/android/server/display/mode/AppRequestObserverTest.kt
@@ -58,14 +58,11 @@
val modes = arrayOf(
Display.Mode(1, 1000, 1000, 60f),
Display.Mode(2, 1000, 1000, 90f),
- Display.Mode(3, 1000, 1000, 120f),
- Display.Mode(99, 1000, 1000, 45f, 45f, true, floatArrayOf(), intArrayOf())
+ Display.Mode(3, 1000, 1000, 120f)
)
-
- displayModeDirector.injectAppSupportedModesByDisplay(
- SparseArray<Array<Display.Mode>>().apply {
- append(Display.DEFAULT_DISPLAY, modes)
- })
+ displayModeDirector.injectSupportedModesByDisplay(SparseArray<Array<Display.Mode>>().apply {
+ append(Display.DEFAULT_DISPLAY, modes)
+ })
displayModeDirector.injectDefaultModeByDisplay(SparseArray<Display.Mode>().apply {
append(Display.DEFAULT_DISPLAY, modes[0])
})
@@ -119,9 +116,7 @@
BaseModeRefreshRateVote(60f), SizeVote(1000, 1000, 1000, 1000), null),
PREFERRED_REFRESH_RATE_IGNORED(true, 0, 60f, 0f, 0f,
null, null, null),
- PREFERRED_REFRESH_RATE_INVALID(false, 0, 25f, 0f, 0f,
+ PREFERRED_REFRESH_RATE_INVALID(false, 0, 45f, 0f, 0f,
null, null, null),
- SYNTHETIC_MODE(false, 99, 0f, 0f, 0f,
- RenderVote(45f, 45f), SizeVote(1000, 1000, 1000, 1000), null),
}
}
\ No newline at end of file
diff --git a/services/tests/displayservicetests/src/com/android/server/display/mode/SyntheticModeManagerTest.kt b/services/tests/displayservicetests/src/com/android/server/display/mode/SyntheticModeManagerTest.kt
deleted file mode 100644
index 5cd3a33..0000000
--- a/services/tests/displayservicetests/src/com/android/server/display/mode/SyntheticModeManagerTest.kt
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.display.mode
-
-import android.view.Display.Mode
-import com.android.server.display.DisplayDeviceConfig
-import com.android.server.display.feature.DisplayManagerFlags
-import androidx.test.filters.SmallTest
-import com.google.common.truth.Truth.assertThat
-import com.google.testing.junit.testparameterinjector.TestParameter
-import com.google.testing.junit.testparameterinjector.TestParameterInjector
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.whenever
-
-private val DISPLAY_MODES = arrayOf(
- Mode(1, 100, 100, 60f),
- Mode(2, 100, 100, 120f)
-)
-
-@SmallTest
-@RunWith(TestParameterInjector::class)
-class SyntheticModeManagerTest {
-
- private val mockFlags = mock<DisplayManagerFlags>()
- private val mockConfig = mock<DisplayDeviceConfig>()
-
- @Test
- fun `test app supported modes`(@TestParameter testCase: AppSupportedModesTestCase) {
- whenever(mockFlags.isSynthetic60HzModesEnabled).thenReturn(testCase.syntheticModesEnabled)
- whenever(mockConfig.isVrrSupportEnabled).thenReturn(testCase.vrrSupported)
- val syntheticModeManager = SyntheticModeManager(mockFlags)
-
- val result = syntheticModeManager.createAppSupportedModes(
- mockConfig, testCase.supportedModes)
-
- assertThat(result).isEqualTo(testCase.expectedAppModes)
- }
-
- enum class AppSupportedModesTestCase(
- val syntheticModesEnabled: Boolean,
- val vrrSupported: Boolean,
- val supportedModes: Array<Mode>,
- val expectedAppModes: Array<Mode>
- ) {
- SYNTHETIC_MODES_NOT_SUPPORTED(false, true, DISPLAY_MODES, DISPLAY_MODES),
- VRR_NOT_SUPPORTED(true, false, DISPLAY_MODES, DISPLAY_MODES),
- VRR_SYNTHETIC_NOT_SUPPORTED(false, false, DISPLAY_MODES, DISPLAY_MODES),
- SINGLE_RESOLUTION_MODES(true, true, DISPLAY_MODES, arrayOf(
- Mode(2, 100, 100, 120f),
- Mode(3, 100, 100, 60f, 60f, true, floatArrayOf(), intArrayOf())
- )),
- NO_60HZ_MODES(true, true, arrayOf(Mode(2, 100, 100, 120f)),
- arrayOf(
- Mode(2, 100, 100, 120f),
- Mode(3, 100, 100, 60f, 60f, true, floatArrayOf(), intArrayOf())
- )
- ),
- MULTI_RESOLUTION_MODES(true, true,
- arrayOf(
- Mode(1, 100, 100, 120f),
- Mode(2, 200, 200, 60f),
- Mode(3, 300, 300, 60f),
- Mode(4, 300, 300, 90f),
- ),
- arrayOf(
- Mode(1, 100, 100, 120f),
- Mode(4, 300, 300, 90f),
- Mode(5, 100, 100, 60f, 60f, true, floatArrayOf(), intArrayOf()),
- Mode(6, 200, 200, 60f, 60f, true, floatArrayOf(), intArrayOf()),
- Mode(7, 300, 300, 60f, 60f, true, floatArrayOf(), intArrayOf())
- )
- ),
- WITH_HDR_TYPES(true, true,
- arrayOf(
- Mode(1, 100, 100, 120f, 120f, false, floatArrayOf(), intArrayOf(1, 2)),
- Mode(2, 200, 200, 60f, 120f, false, floatArrayOf(), intArrayOf(3, 4)),
- Mode(3, 200, 200, 120f, 120f, false, floatArrayOf(), intArrayOf(5, 6)),
- ),
- arrayOf(
- Mode(1, 100, 100, 120f, 120f, false, floatArrayOf(), intArrayOf(1, 2)),
- Mode(3, 200, 200, 120f, 120f, false, floatArrayOf(), intArrayOf(5, 6)),
- Mode(4, 100, 100, 60f, 60f, true, floatArrayOf(), intArrayOf(1, 2)),
- Mode(5, 200, 200, 60f, 60f, true, floatArrayOf(), intArrayOf(5, 6)),
- )
- ),
- UNACHIEVABLE_60HZ(true, true,
- arrayOf(
- Mode(1, 100, 100, 90f),
- ),
- arrayOf(
- Mode(1, 100, 100, 90f),
- )
- ),
- MULTI_RESOLUTION_MODES_WITH_UNACHIEVABLE_60HZ(true, true,
- arrayOf(
- Mode(1, 100, 100, 120f),
- Mode(2, 200, 200, 90f),
- ),
- arrayOf(
- Mode(1, 100, 100, 120f),
- Mode(2, 200, 200, 90f),
- Mode(3, 100, 100, 60f, 60f, true, floatArrayOf(), intArrayOf()),
- )
- ),
- LOWER_THAN_60HZ_MODES(true, true,
- arrayOf(
- Mode(1, 100, 100, 30f),
- Mode(2, 100, 100, 45f),
- Mode(3, 100, 100, 90f),
- ),
- arrayOf(
- Mode(3, 100, 100, 90f),
- )
- ),
- }
-}
\ No newline at end of file
diff --git a/services/tests/displayservicetests/src/com/android/server/display/mode/VoteSummaryTest.kt b/services/tests/displayservicetests/src/com/android/server/display/mode/VoteSummaryTest.kt
index 5da1bb6..04b35f1 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/mode/VoteSummaryTest.kt
+++ b/services/tests/displayservicetests/src/com/android/server/display/mode/VoteSummaryTest.kt
@@ -154,7 +154,7 @@
}
}
private fun createMode(modeId: Int, refreshRate: Float, vsyncRate: Float): Display.Mode {
- return Display.Mode(modeId, 600, 800, refreshRate, vsyncRate, false,
+ return Display.Mode(modeId, 600, 800, refreshRate, vsyncRate,
FloatArray(0), IntArray(0))
}
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 7ebf9ac..c9a83b0 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RefreshRatePolicyTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RefreshRatePolicyTest.java
@@ -109,7 +109,6 @@
defaultMode.getPhysicalWidth(), defaultMode.getPhysicalHeight(),
LOW_REFRESH_RATE),
};
- mDisplayInfo.appsSupportedModes = mDisplayInfo.supportedModes;
mDisplayInfo.defaultModeId = HI_MODE_ID;
mPolicy = new RefreshRatePolicy(mWm, mDisplayInfo, mDenylist);
}