From e09d31819dbf90873e1490a60326648b2aecbce8 Mon Sep 17 00:00:00 2001 From: Kriti Dang Date: Wed, 23 Feb 2022 14:57:42 +0100 Subject: [PATCH] Adding unit tests for preferred display mode Bug: 219919436 Test: atest LocalDisplayAdapterTest Change-Id: I280a8d777cfcf57d2147136073030d06aff029b7 --- .../display/LocalDisplayAdapterTest.java | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/services/tests/mockingservicestests/src/com/android/server/display/LocalDisplayAdapterTest.java b/services/tests/mockingservicestests/src/com/android/server/display/LocalDisplayAdapterTest.java index b5ad459d29f76..784f732ba3b14 100644 --- a/services/tests/mockingservicestests/src/com/android/server/display/LocalDisplayAdapterTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/display/LocalDisplayAdapterTest.java @@ -754,6 +754,57 @@ public class LocalDisplayAdapterTest { verify(mMockedBacklight, never()).setBrightness(anyFloat()); } + @Test + public void testGetSystemPreferredDisplayMode() throws Exception { + SurfaceControl.DisplayMode displayMode1 = createFakeDisplayMode(0, 1920, 1080, 60f); + // preferred mode + SurfaceControl.DisplayMode displayMode2 = createFakeDisplayMode(1, 3840, 2160, 60f); + + SurfaceControl.DisplayMode[] modes = + new SurfaceControl.DisplayMode[]{displayMode1, displayMode2}; + FakeDisplay display = new FakeDisplay(PORT_A, modes, 0, 1); + setUpDisplay(display); + updateAvailableDisplays(); + mAdapter.registerLocked(); + waitForHandlerToComplete(mHandler, HANDLER_WAIT_MS); + + assertThat(mListener.addedDisplays.size()).isEqualTo(1); + assertThat(mListener.changedDisplays).isEmpty(); + + DisplayDeviceInfo displayDeviceInfo = mListener.addedDisplays.get( + 0).getDisplayDeviceInfoLocked(); + + assertThat(displayDeviceInfo.supportedModes.length).isEqualTo(modes.length); + + Display.Mode defaultMode = getModeById(displayDeviceInfo, displayDeviceInfo.defaultModeId); + assertThat(matches(defaultMode, displayMode2)).isTrue(); + + // Change the display and add new preferred mode + SurfaceControl.DisplayMode addedDisplayInfo = createFakeDisplayMode(2, 2340, 1080, 60f); + modes = new SurfaceControl.DisplayMode[]{displayMode1, displayMode2, addedDisplayInfo}; + display.dynamicInfo.supportedDisplayModes = modes; + display.dynamicInfo.preferredBootDisplayMode = 2; + setUpDisplay(display); + mInjector.getTransmitter().sendHotplug(display, /* connected */ true); + waitForHandlerToComplete(mHandler, HANDLER_WAIT_MS); + + assertTrue(mListener.traversalRequested); + assertThat(mListener.addedDisplays.size()).isEqualTo(1); + assertThat(mListener.changedDisplays.size()).isEqualTo(1); + + DisplayDevice displayDevice = mListener.changedDisplays.get(0); + displayDevice.applyPendingDisplayDeviceInfoChangesLocked(); + displayDeviceInfo = displayDevice.getDisplayDeviceInfoLocked(); + + assertThat(displayDeviceInfo.supportedModes.length).isEqualTo(modes.length); + assertModeIsSupported(displayDeviceInfo.supportedModes, displayMode1); + assertModeIsSupported(displayDeviceInfo.supportedModes, displayMode2); + assertModeIsSupported(displayDeviceInfo.supportedModes, addedDisplayInfo); + + assertThat(matches(displayDevice.getSystemPreferredDisplayModeLocked(), addedDisplayInfo)) + .isTrue(); + } + private void assertDisplayDpi(DisplayDeviceInfo info, int expectedPort, float expectedXdpi, float expectedYDpi, @@ -831,6 +882,16 @@ public class LocalDisplayAdapterTest { dynamicInfo.supportedDisplayModes = modes; dynamicInfo.activeDisplayModeId = activeMode; } + + private FakeDisplay(int port, SurfaceControl.DisplayMode[] modes, int activeMode, + int preferredMode) { + address = createDisplayAddress(port); + info = createFakeDisplayInfo(); + dynamicInfo.supportedDisplayModes = modes; + dynamicInfo.activeDisplayModeId = activeMode; + dynamicInfo.preferredBootDisplayMode = preferredMode; + } + } private void setUpDisplay(FakeDisplay display) { @@ -843,6 +904,7 @@ public class LocalDisplayAdapterTest { .thenReturn(display.dynamicInfo); when(mSurfaceControlProxy.getDesiredDisplayModeSpecs(display.token)) .thenReturn(display.desiredDisplayModeSpecs); + when(mSurfaceControlProxy.getBootDisplayModeSupport()).thenReturn(true); } private void updateAvailableDisplays() {