Loading core/java/com/android/internal/display/RefreshRateSettingsUtils.java +2 −13 Original line number Diff line number Diff line Loading @@ -37,22 +37,11 @@ public class RefreshRateSettingsUtils { * @return The highest refresh rate */ public static float findHighestRefreshRateForDefaultDisplay(Context context) { return findHighestRefreshRate(context, Display.DEFAULT_DISPLAY); } /** * Find the highest refresh rate among all the modes of the specified display. * * @param context The context * @param displayId The display ID * @return The highest refresh rate */ public static float findHighestRefreshRate(Context context, int displayId) { final DisplayManager dm = context.getSystemService(DisplayManager.class); final Display display = dm.getDisplay(displayId); final Display display = dm.getDisplay(Display.DEFAULT_DISPLAY); if (display == null) { Log.w(TAG, "No valid display device with ID = " + displayId); Log.w(TAG, "No valid default display device"); return DEFAULT_REFRESH_RATE; } Loading services/core/java/com/android/server/display/mode/DisplayModeDirector.java +10 −32 Original line number Diff line number Diff line Loading @@ -21,8 +21,8 @@ import static android.hardware.display.DisplayManagerInternal.REFRESH_RATE_LIMIT import static android.os.PowerManager.BRIGHTNESS_INVALID_FLOAT; import static android.view.Display.Mode.INVALID_MODE_ID; import static com.android.internal.display.RefreshRateSettingsUtils.findHighestRefreshRate; import static com.android.server.display.DisplayDeviceConfig.DEFAULT_LOW_REFRESH_RATE; import static com.android.internal.display.RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay; import android.annotation.IntegerRes; import android.annotation.NonNull; Loading Loading @@ -924,17 +924,12 @@ public class DisplayModeDirector { return mHbmObserver; } @VisibleForTesting DisplayObserver getDisplayObserver() { return mDisplayObserver; } @VisibleForTesting DesiredDisplayModeSpecs getDesiredDisplayModeSpecsWithInjectedFpsSettings( float minRefreshRate, float peakRefreshRate, float defaultRefreshRate) { synchronized (mLock) { mSettingsObserver.updateRefreshRateSettingLocked(minRefreshRate, peakRefreshRate, defaultRefreshRate, Display.DEFAULT_DISPLAY); mSettingsObserver.updateRefreshRateSettingLocked( minRefreshRate, peakRefreshRate, defaultRefreshRate); return getDesiredDisplayModeSpecs(Display.DEFAULT_DISPLAY); } } Loading Loading @@ -1268,23 +1263,9 @@ public class DisplayModeDirector { mBrightnessObserver.onLowPowerModeEnabledLocked(inLowPowerMode); } /** * Update refresh rate settings for all displays */ private void updateRefreshRateSettingLocked() { Display[] displays = mInjector.getDisplays(); for (int i = 0; i < displays.length; i++) { updateRefreshRateSettingLocked(displays[i].getDisplayId()); } } /** * Update refresh rate settings for a specific display * @param displayId The display ID */ private void updateRefreshRateSettingLocked(int displayId) { final ContentResolver cr = mContext.getContentResolver(); float highestRefreshRate = findHighestRefreshRate(mContext, displayId); float highestRefreshRate = findHighestRefreshRateForDefaultDisplay(mContext); float minRefreshRate = Settings.System.getFloatForUser(cr, Settings.System.MIN_REFRESH_RATE, 0f, cr.getUserId()); Loading Loading @@ -1312,12 +1293,11 @@ public class DisplayModeDirector { } } updateRefreshRateSettingLocked(minRefreshRate, peakRefreshRate, mDefaultRefreshRate, displayId); updateRefreshRateSettingLocked(minRefreshRate, peakRefreshRate, mDefaultRefreshRate); } private void updateRefreshRateSettingLocked(float minRefreshRate, float peakRefreshRate, float defaultRefreshRate, int displayId) { private void updateRefreshRateSettingLocked( float minRefreshRate, float peakRefreshRate, float defaultRefreshRate) { // TODO(b/156304339): The logic in here, aside from updating the refresh rate votes, is // used to predict if we're going to be doing frequent refresh rate switching, and if // so, enable the brightness observer. The logic here is more complicated and fragile Loading @@ -1325,9 +1305,9 @@ public class DisplayModeDirector { Vote peakVote = peakRefreshRate == 0f ? null : Vote.forRenderFrameRates(0f, Math.max(minRefreshRate, peakRefreshRate)); mVotesStorage.updateVote(displayId, Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE, mVotesStorage.updateGlobalVote(Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE, peakVote); mVotesStorage.updateVote(displayId, Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE, mVotesStorage.updateGlobalVote(Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE, Vote.forRenderFrameRates(minRefreshRate, Float.POSITIVE_INFINITY)); Vote defaultVote = defaultRefreshRate == 0f Loading Loading @@ -1484,8 +1464,7 @@ public class DisplayModeDirector { } } @VisibleForTesting public final class DisplayObserver implements DisplayManager.DisplayListener { private final class DisplayObserver implements DisplayManager.DisplayListener { // Note that we can never call into DisplayManager or any of the non-POD classes it // returns, while holding mLock since it may call into DMS, which might be simultaneously // calling into us already holding its own lock. Loading Loading @@ -1577,7 +1556,6 @@ public class DisplayModeDirector { updateDisplayModes(displayId, displayInfo); updateLayoutLimitedFrameRate(displayId, displayInfo); updateUserSettingDisplayPreferredSize(displayInfo); mSettingsObserver.updateRefreshRateSettingLocked(displayId); } @Nullable Loading services/tests/displayservicetests/src/com/android/server/display/RefreshRateSettingsUtilsTest.java +3 −16 Original line number Diff line number Diff line Loading @@ -72,27 +72,14 @@ public class RefreshRateSettingsUtilsTest { @Test public void testFindHighestRefreshRateForDefaultDisplay() { when(mDisplayManagerMock.getDisplay(Display.DEFAULT_DISPLAY)).thenReturn(mDisplayMock); assertEquals(120, when(mDisplayManagerMock.getDisplay(Display.DEFAULT_DISPLAY)).thenReturn(null); assertEquals(DEFAULT_REFRESH_RATE, RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay(mContext), /* delta= */ 0); } @Test public void testFindHighestRefreshRate() { int displayId = 13; when(mDisplayManagerMock.getDisplay(displayId)).thenReturn(mDisplayMock); when(mDisplayManagerMock.getDisplay(Display.DEFAULT_DISPLAY)).thenReturn(mDisplayMock); assertEquals(120, RefreshRateSettingsUtils.findHighestRefreshRate(mContext, displayId), /* delta= */ 0); } @Test public void testFindHighestRefreshRate_DisplayIsNull() { when(mDisplayManagerMock.getDisplay(Display.DEFAULT_DISPLAY)).thenReturn(null); assertEquals(DEFAULT_REFRESH_RATE, RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay(mContext), /* delta= */ 0); } } services/tests/displayservicetests/src/com/android/server/display/mode/DisplayModeDirectorTest.java +20 −98 Original line number Diff line number Diff line Loading @@ -290,7 +290,6 @@ public class DisplayModeDirectorTest { }; private static final int DISPLAY_ID = Display.DEFAULT_DISPLAY; private static final int DISPLAY_ID_2 = Display.DEFAULT_DISPLAY + 1; private static final int MODE_ID = 1; private static final float TRANSITION_POINT = 0.763f; Loading Loading @@ -1551,12 +1550,9 @@ public class DisplayModeDirectorTest { public void testPeakRefreshRate_FlagEnabled() { when(mDisplayManagerFlags.isBackUpSmoothDisplayAndForcePeakRefreshRateEnabled()) .thenReturn(true); float highestRefreshRate1 = 130; float highestRefreshRate2 = 132; doReturn(highestRefreshRate1).when(() -> RefreshRateSettingsUtils.findHighestRefreshRate(mContext, DISPLAY_ID)); doReturn(highestRefreshRate2).when(() -> RefreshRateSettingsUtils.findHighestRefreshRate(mContext, DISPLAY_ID_2)); float highestRefreshRate = 130; doReturn(highestRefreshRate).when(() -> RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay(mContext)); DisplayModeDirector director = createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0); director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON); Loading @@ -1567,14 +1563,10 @@ public class DisplayModeDirectorTest { setPeakRefreshRate(Float.POSITIVE_INFINITY); Vote vote1 = director.getVote(DISPLAY_ID, Vote vote = director.getVote(Display.DEFAULT_DISPLAY, Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE); Vote vote2 = director.getVote(DISPLAY_ID_2, Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE); assertVoteForRenderFrameRateRange(vote1, /* frameRateLow= */ 0, /* frameRateHigh= */ highestRefreshRate1); assertVoteForRenderFrameRateRange(vote2, /* frameRateLow= */ 0, /* frameRateHigh= */ highestRefreshRate2); assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */ highestRefreshRate); } @Test Loading @@ -1592,54 +1584,19 @@ public class DisplayModeDirectorTest { setPeakRefreshRate(peakRefreshRate); Vote vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE); assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */ peakRefreshRate); } @Test public void testPeakRefreshRate_DisplayChanged() { when(mDisplayManagerFlags.isBackUpSmoothDisplayAndForcePeakRefreshRateEnabled()) .thenReturn(true); float highestRefreshRate = 130; doReturn(highestRefreshRate).when(() -> RefreshRateSettingsUtils.findHighestRefreshRate(mContext, DISPLAY_ID)); DisplayModeDirector director = createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0); director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON); Sensor lightSensor = createLightSensor(); SensorManager sensorManager = createMockSensorManager(lightSensor); director.start(sensorManager); setPeakRefreshRate(Float.POSITIVE_INFINITY); Vote vote = director.getVote(DISPLAY_ID, Vote vote = director.getVote(Display.DEFAULT_DISPLAY, Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE); assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */ highestRefreshRate); // The highest refresh rate of the display changes highestRefreshRate = 140; doReturn(highestRefreshRate).when(() -> RefreshRateSettingsUtils.findHighestRefreshRate(mContext, DISPLAY_ID)); director.getDisplayObserver().onDisplayChanged(DISPLAY_ID); vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE); assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */ highestRefreshRate); assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */ peakRefreshRate); } @Test public void testMinRefreshRate_FlagEnabled() { when(mDisplayManagerFlags.isBackUpSmoothDisplayAndForcePeakRefreshRateEnabled()) .thenReturn(true); float highestRefreshRate1 = 130; float highestRefreshRate2 = 132; doReturn(highestRefreshRate1).when(() -> RefreshRateSettingsUtils.findHighestRefreshRate(mContext, DISPLAY_ID)); doReturn(highestRefreshRate2).when(() -> RefreshRateSettingsUtils.findHighestRefreshRate(mContext, DISPLAY_ID_2)); float highestRefreshRate = 130; doReturn(highestRefreshRate).when(() -> RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay(mContext)); DisplayModeDirector director = createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0); director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON); Loading @@ -1650,12 +1607,9 @@ public class DisplayModeDirectorTest { setMinRefreshRate(Float.POSITIVE_INFINITY); Vote vote1 = director.getVote(DISPLAY_ID, Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE); Vote vote2 = director.getVote(DISPLAY_ID_2, Vote vote = director.getVote(Display.DEFAULT_DISPLAY, Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE); assertVoteForRenderFrameRateRange(vote1, /* frameRateLow= */ highestRefreshRate1, /* frameRateHigh= */ Float.POSITIVE_INFINITY); assertVoteForRenderFrameRateRange(vote2, /* frameRateLow= */ highestRefreshRate2, assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ highestRefreshRate, /* frameRateHigh= */ Float.POSITIVE_INFINITY); } Loading @@ -1674,43 +1628,12 @@ public class DisplayModeDirectorTest { setMinRefreshRate(minRefreshRate); Vote vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE); Vote vote = director.getVote(Display.DEFAULT_DISPLAY, Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE); assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ minRefreshRate, /* frameRateHigh= */ Float.POSITIVE_INFINITY); } @Test public void testMinRefreshRate_DisplayChanged() { when(mDisplayManagerFlags.isBackUpSmoothDisplayAndForcePeakRefreshRateEnabled()) .thenReturn(true); float highestRefreshRate = 130; doReturn(highestRefreshRate).when(() -> RefreshRateSettingsUtils.findHighestRefreshRate(mContext, DISPLAY_ID)); DisplayModeDirector director = createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0); director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON); Sensor lightSensor = createLightSensor(); SensorManager sensorManager = createMockSensorManager(lightSensor); director.start(sensorManager); setMinRefreshRate(Float.POSITIVE_INFINITY); Vote vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE); assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ highestRefreshRate, /* frameRateHigh= */ Float.POSITIVE_INFINITY); // The highest refresh rate of the display changes highestRefreshRate = 140; doReturn(highestRefreshRate).when(() -> RefreshRateSettingsUtils.findHighestRefreshRate(mContext, DISPLAY_ID)); director.getDisplayObserver().onDisplayChanged(DISPLAY_ID); vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE); assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ highestRefreshRate, /* frameRateHigh= */ Float.POSITIVE_INFINITY); } @Test public void testSensorRegistration() { // First, configure brightness zones or DMD won't register for sensor data. Loading Loading @@ -3406,7 +3329,7 @@ public class DisplayModeDirectorTest { public static class FakesInjector implements DisplayModeDirector.Injector { private final FakeDeviceConfig mDeviceConfig; private final DisplayInfo mDisplayInfo; private final Map<Integer, Display> mDisplays; private final Display mDisplay; private boolean mDisplayInfoValid = true; private final DisplayManagerInternal mDisplayManagerInternal; private final StatusBarManagerInternal mStatusBarManagerInternal; Loading @@ -3427,8 +3350,7 @@ public class DisplayModeDirectorTest { mDisplayInfo.defaultModeId = MODE_ID; mDisplayInfo.supportedModes = new Display.Mode[] {new Display.Mode(MODE_ID, 800, 600, /* refreshRate= */ 60)}; mDisplays = Map.of(DISPLAY_ID, createDisplay(DISPLAY_ID), DISPLAY_ID_2, createDisplay(DISPLAY_ID_2)); mDisplay = createDisplay(DISPLAY_ID); mDisplayManagerInternal = displayManagerInternal; mStatusBarManagerInternal = statusBarManagerInternal; mSensorManagerInternal = sensorManagerInternal; Loading Loading @@ -3459,12 +3381,12 @@ public class DisplayModeDirectorTest { @Override public Display getDisplay(int displayId) { return mDisplays.get(displayId); return mDisplay; } @Override public Display[] getDisplays() { return mDisplays.values().toArray(new Display[0]); return new Display[] { mDisplay }; } @Override Loading Loading
core/java/com/android/internal/display/RefreshRateSettingsUtils.java +2 −13 Original line number Diff line number Diff line Loading @@ -37,22 +37,11 @@ public class RefreshRateSettingsUtils { * @return The highest refresh rate */ public static float findHighestRefreshRateForDefaultDisplay(Context context) { return findHighestRefreshRate(context, Display.DEFAULT_DISPLAY); } /** * Find the highest refresh rate among all the modes of the specified display. * * @param context The context * @param displayId The display ID * @return The highest refresh rate */ public static float findHighestRefreshRate(Context context, int displayId) { final DisplayManager dm = context.getSystemService(DisplayManager.class); final Display display = dm.getDisplay(displayId); final Display display = dm.getDisplay(Display.DEFAULT_DISPLAY); if (display == null) { Log.w(TAG, "No valid display device with ID = " + displayId); Log.w(TAG, "No valid default display device"); return DEFAULT_REFRESH_RATE; } Loading
services/core/java/com/android/server/display/mode/DisplayModeDirector.java +10 −32 Original line number Diff line number Diff line Loading @@ -21,8 +21,8 @@ import static android.hardware.display.DisplayManagerInternal.REFRESH_RATE_LIMIT import static android.os.PowerManager.BRIGHTNESS_INVALID_FLOAT; import static android.view.Display.Mode.INVALID_MODE_ID; import static com.android.internal.display.RefreshRateSettingsUtils.findHighestRefreshRate; import static com.android.server.display.DisplayDeviceConfig.DEFAULT_LOW_REFRESH_RATE; import static com.android.internal.display.RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay; import android.annotation.IntegerRes; import android.annotation.NonNull; Loading Loading @@ -924,17 +924,12 @@ public class DisplayModeDirector { return mHbmObserver; } @VisibleForTesting DisplayObserver getDisplayObserver() { return mDisplayObserver; } @VisibleForTesting DesiredDisplayModeSpecs getDesiredDisplayModeSpecsWithInjectedFpsSettings( float minRefreshRate, float peakRefreshRate, float defaultRefreshRate) { synchronized (mLock) { mSettingsObserver.updateRefreshRateSettingLocked(minRefreshRate, peakRefreshRate, defaultRefreshRate, Display.DEFAULT_DISPLAY); mSettingsObserver.updateRefreshRateSettingLocked( minRefreshRate, peakRefreshRate, defaultRefreshRate); return getDesiredDisplayModeSpecs(Display.DEFAULT_DISPLAY); } } Loading Loading @@ -1268,23 +1263,9 @@ public class DisplayModeDirector { mBrightnessObserver.onLowPowerModeEnabledLocked(inLowPowerMode); } /** * Update refresh rate settings for all displays */ private void updateRefreshRateSettingLocked() { Display[] displays = mInjector.getDisplays(); for (int i = 0; i < displays.length; i++) { updateRefreshRateSettingLocked(displays[i].getDisplayId()); } } /** * Update refresh rate settings for a specific display * @param displayId The display ID */ private void updateRefreshRateSettingLocked(int displayId) { final ContentResolver cr = mContext.getContentResolver(); float highestRefreshRate = findHighestRefreshRate(mContext, displayId); float highestRefreshRate = findHighestRefreshRateForDefaultDisplay(mContext); float minRefreshRate = Settings.System.getFloatForUser(cr, Settings.System.MIN_REFRESH_RATE, 0f, cr.getUserId()); Loading Loading @@ -1312,12 +1293,11 @@ public class DisplayModeDirector { } } updateRefreshRateSettingLocked(minRefreshRate, peakRefreshRate, mDefaultRefreshRate, displayId); updateRefreshRateSettingLocked(minRefreshRate, peakRefreshRate, mDefaultRefreshRate); } private void updateRefreshRateSettingLocked(float minRefreshRate, float peakRefreshRate, float defaultRefreshRate, int displayId) { private void updateRefreshRateSettingLocked( float minRefreshRate, float peakRefreshRate, float defaultRefreshRate) { // TODO(b/156304339): The logic in here, aside from updating the refresh rate votes, is // used to predict if we're going to be doing frequent refresh rate switching, and if // so, enable the brightness observer. The logic here is more complicated and fragile Loading @@ -1325,9 +1305,9 @@ public class DisplayModeDirector { Vote peakVote = peakRefreshRate == 0f ? null : Vote.forRenderFrameRates(0f, Math.max(minRefreshRate, peakRefreshRate)); mVotesStorage.updateVote(displayId, Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE, mVotesStorage.updateGlobalVote(Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE, peakVote); mVotesStorage.updateVote(displayId, Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE, mVotesStorage.updateGlobalVote(Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE, Vote.forRenderFrameRates(minRefreshRate, Float.POSITIVE_INFINITY)); Vote defaultVote = defaultRefreshRate == 0f Loading Loading @@ -1484,8 +1464,7 @@ public class DisplayModeDirector { } } @VisibleForTesting public final class DisplayObserver implements DisplayManager.DisplayListener { private final class DisplayObserver implements DisplayManager.DisplayListener { // Note that we can never call into DisplayManager or any of the non-POD classes it // returns, while holding mLock since it may call into DMS, which might be simultaneously // calling into us already holding its own lock. Loading Loading @@ -1577,7 +1556,6 @@ public class DisplayModeDirector { updateDisplayModes(displayId, displayInfo); updateLayoutLimitedFrameRate(displayId, displayInfo); updateUserSettingDisplayPreferredSize(displayInfo); mSettingsObserver.updateRefreshRateSettingLocked(displayId); } @Nullable Loading
services/tests/displayservicetests/src/com/android/server/display/RefreshRateSettingsUtilsTest.java +3 −16 Original line number Diff line number Diff line Loading @@ -72,27 +72,14 @@ public class RefreshRateSettingsUtilsTest { @Test public void testFindHighestRefreshRateForDefaultDisplay() { when(mDisplayManagerMock.getDisplay(Display.DEFAULT_DISPLAY)).thenReturn(mDisplayMock); assertEquals(120, when(mDisplayManagerMock.getDisplay(Display.DEFAULT_DISPLAY)).thenReturn(null); assertEquals(DEFAULT_REFRESH_RATE, RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay(mContext), /* delta= */ 0); } @Test public void testFindHighestRefreshRate() { int displayId = 13; when(mDisplayManagerMock.getDisplay(displayId)).thenReturn(mDisplayMock); when(mDisplayManagerMock.getDisplay(Display.DEFAULT_DISPLAY)).thenReturn(mDisplayMock); assertEquals(120, RefreshRateSettingsUtils.findHighestRefreshRate(mContext, displayId), /* delta= */ 0); } @Test public void testFindHighestRefreshRate_DisplayIsNull() { when(mDisplayManagerMock.getDisplay(Display.DEFAULT_DISPLAY)).thenReturn(null); assertEquals(DEFAULT_REFRESH_RATE, RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay(mContext), /* delta= */ 0); } }
services/tests/displayservicetests/src/com/android/server/display/mode/DisplayModeDirectorTest.java +20 −98 Original line number Diff line number Diff line Loading @@ -290,7 +290,6 @@ public class DisplayModeDirectorTest { }; private static final int DISPLAY_ID = Display.DEFAULT_DISPLAY; private static final int DISPLAY_ID_2 = Display.DEFAULT_DISPLAY + 1; private static final int MODE_ID = 1; private static final float TRANSITION_POINT = 0.763f; Loading Loading @@ -1551,12 +1550,9 @@ public class DisplayModeDirectorTest { public void testPeakRefreshRate_FlagEnabled() { when(mDisplayManagerFlags.isBackUpSmoothDisplayAndForcePeakRefreshRateEnabled()) .thenReturn(true); float highestRefreshRate1 = 130; float highestRefreshRate2 = 132; doReturn(highestRefreshRate1).when(() -> RefreshRateSettingsUtils.findHighestRefreshRate(mContext, DISPLAY_ID)); doReturn(highestRefreshRate2).when(() -> RefreshRateSettingsUtils.findHighestRefreshRate(mContext, DISPLAY_ID_2)); float highestRefreshRate = 130; doReturn(highestRefreshRate).when(() -> RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay(mContext)); DisplayModeDirector director = createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0); director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON); Loading @@ -1567,14 +1563,10 @@ public class DisplayModeDirectorTest { setPeakRefreshRate(Float.POSITIVE_INFINITY); Vote vote1 = director.getVote(DISPLAY_ID, Vote vote = director.getVote(Display.DEFAULT_DISPLAY, Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE); Vote vote2 = director.getVote(DISPLAY_ID_2, Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE); assertVoteForRenderFrameRateRange(vote1, /* frameRateLow= */ 0, /* frameRateHigh= */ highestRefreshRate1); assertVoteForRenderFrameRateRange(vote2, /* frameRateLow= */ 0, /* frameRateHigh= */ highestRefreshRate2); assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */ highestRefreshRate); } @Test Loading @@ -1592,54 +1584,19 @@ public class DisplayModeDirectorTest { setPeakRefreshRate(peakRefreshRate); Vote vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE); assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */ peakRefreshRate); } @Test public void testPeakRefreshRate_DisplayChanged() { when(mDisplayManagerFlags.isBackUpSmoothDisplayAndForcePeakRefreshRateEnabled()) .thenReturn(true); float highestRefreshRate = 130; doReturn(highestRefreshRate).when(() -> RefreshRateSettingsUtils.findHighestRefreshRate(mContext, DISPLAY_ID)); DisplayModeDirector director = createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0); director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON); Sensor lightSensor = createLightSensor(); SensorManager sensorManager = createMockSensorManager(lightSensor); director.start(sensorManager); setPeakRefreshRate(Float.POSITIVE_INFINITY); Vote vote = director.getVote(DISPLAY_ID, Vote vote = director.getVote(Display.DEFAULT_DISPLAY, Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE); assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */ highestRefreshRate); // The highest refresh rate of the display changes highestRefreshRate = 140; doReturn(highestRefreshRate).when(() -> RefreshRateSettingsUtils.findHighestRefreshRate(mContext, DISPLAY_ID)); director.getDisplayObserver().onDisplayChanged(DISPLAY_ID); vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE); assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */ highestRefreshRate); assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */ peakRefreshRate); } @Test public void testMinRefreshRate_FlagEnabled() { when(mDisplayManagerFlags.isBackUpSmoothDisplayAndForcePeakRefreshRateEnabled()) .thenReturn(true); float highestRefreshRate1 = 130; float highestRefreshRate2 = 132; doReturn(highestRefreshRate1).when(() -> RefreshRateSettingsUtils.findHighestRefreshRate(mContext, DISPLAY_ID)); doReturn(highestRefreshRate2).when(() -> RefreshRateSettingsUtils.findHighestRefreshRate(mContext, DISPLAY_ID_2)); float highestRefreshRate = 130; doReturn(highestRefreshRate).when(() -> RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay(mContext)); DisplayModeDirector director = createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0); director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON); Loading @@ -1650,12 +1607,9 @@ public class DisplayModeDirectorTest { setMinRefreshRate(Float.POSITIVE_INFINITY); Vote vote1 = director.getVote(DISPLAY_ID, Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE); Vote vote2 = director.getVote(DISPLAY_ID_2, Vote vote = director.getVote(Display.DEFAULT_DISPLAY, Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE); assertVoteForRenderFrameRateRange(vote1, /* frameRateLow= */ highestRefreshRate1, /* frameRateHigh= */ Float.POSITIVE_INFINITY); assertVoteForRenderFrameRateRange(vote2, /* frameRateLow= */ highestRefreshRate2, assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ highestRefreshRate, /* frameRateHigh= */ Float.POSITIVE_INFINITY); } Loading @@ -1674,43 +1628,12 @@ public class DisplayModeDirectorTest { setMinRefreshRate(minRefreshRate); Vote vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE); Vote vote = director.getVote(Display.DEFAULT_DISPLAY, Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE); assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ minRefreshRate, /* frameRateHigh= */ Float.POSITIVE_INFINITY); } @Test public void testMinRefreshRate_DisplayChanged() { when(mDisplayManagerFlags.isBackUpSmoothDisplayAndForcePeakRefreshRateEnabled()) .thenReturn(true); float highestRefreshRate = 130; doReturn(highestRefreshRate).when(() -> RefreshRateSettingsUtils.findHighestRefreshRate(mContext, DISPLAY_ID)); DisplayModeDirector director = createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0); director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON); Sensor lightSensor = createLightSensor(); SensorManager sensorManager = createMockSensorManager(lightSensor); director.start(sensorManager); setMinRefreshRate(Float.POSITIVE_INFINITY); Vote vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE); assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ highestRefreshRate, /* frameRateHigh= */ Float.POSITIVE_INFINITY); // The highest refresh rate of the display changes highestRefreshRate = 140; doReturn(highestRefreshRate).when(() -> RefreshRateSettingsUtils.findHighestRefreshRate(mContext, DISPLAY_ID)); director.getDisplayObserver().onDisplayChanged(DISPLAY_ID); vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE); assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ highestRefreshRate, /* frameRateHigh= */ Float.POSITIVE_INFINITY); } @Test public void testSensorRegistration() { // First, configure brightness zones or DMD won't register for sensor data. Loading Loading @@ -3406,7 +3329,7 @@ public class DisplayModeDirectorTest { public static class FakesInjector implements DisplayModeDirector.Injector { private final FakeDeviceConfig mDeviceConfig; private final DisplayInfo mDisplayInfo; private final Map<Integer, Display> mDisplays; private final Display mDisplay; private boolean mDisplayInfoValid = true; private final DisplayManagerInternal mDisplayManagerInternal; private final StatusBarManagerInternal mStatusBarManagerInternal; Loading @@ -3427,8 +3350,7 @@ public class DisplayModeDirectorTest { mDisplayInfo.defaultModeId = MODE_ID; mDisplayInfo.supportedModes = new Display.Mode[] {new Display.Mode(MODE_ID, 800, 600, /* refreshRate= */ 60)}; mDisplays = Map.of(DISPLAY_ID, createDisplay(DISPLAY_ID), DISPLAY_ID_2, createDisplay(DISPLAY_ID_2)); mDisplay = createDisplay(DISPLAY_ID); mDisplayManagerInternal = displayManagerInternal; mStatusBarManagerInternal = statusBarManagerInternal; mSensorManagerInternal = sensorManagerInternal; Loading Loading @@ -3459,12 +3381,12 @@ public class DisplayModeDirectorTest { @Override public Display getDisplay(int displayId) { return mDisplays.get(displayId); return mDisplay; } @Override public Display[] getDisplays() { return mDisplays.values().toArray(new Display[0]); return new Display[] { mDisplay }; } @Override Loading