Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 56330d10 authored by Marin Shalamanov's avatar Marin Shalamanov
Browse files

Test that color modes and HDR capabilities get updated

Bug: 149193027
Test: atest LocalDisplayAdapterTest
Change-Id: Ibd52ca21e4865d730d48b25a482c028e438b4408
parent 5c82686c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -451,7 +451,7 @@ final class LocalDisplayAdapter extends DisplayAdapter {

            // Determine whether the active color mode is still there.
            if (!mSupportedColorModes.contains(mActiveColorMode)) {
                if (mActiveColorMode != 0) {
                if (mActiveColorMode != Display.COLOR_MODE_DEFAULT) {
                    Slog.w(TAG, "Active color mode no longer available, reverting"
                            + " to default mode.");
                    mActiveColorMode = Display.COLOR_MODE_DEFAULT;
+90 −11
Original line number Diff line number Diff line
@@ -188,10 +188,10 @@ public class LocalDisplayAdapterTest {
    }

    @Test
    public void testAfterDisplayChange_ModesAreUpdated() throws Exception {
        SurfaceControl.DisplayConfig displayInfo = createFakeDisplayConfig(1920, 1080, 60f);
    public void testAfterDisplayChange_DisplayModesAreUpdated() throws Exception {
        SurfaceControl.DisplayConfig displayConfig = createFakeDisplayConfig(1920, 1080, 60f);
        SurfaceControl.DisplayConfig[] configs =
                new SurfaceControl.DisplayConfig[]{displayInfo};
                new SurfaceControl.DisplayConfig[]{displayConfig};
        FakeDisplay display = new FakeDisplay(PORT_A, configs, 0);
        setUpDisplay(display);
        updateAvailableDisplays();
@@ -205,20 +205,20 @@ public class LocalDisplayAdapterTest {
                0).getDisplayDeviceInfoLocked();

        assertThat(displayDeviceInfo.supportedModes.length).isEqualTo(configs.length);
        assertModeIsSupported(displayDeviceInfo.supportedModes, displayInfo);
        assertModeIsSupported(displayDeviceInfo.supportedModes, displayConfig);

        Display.Mode defaultMode = getModeById(displayDeviceInfo, displayDeviceInfo.defaultModeId);
        assertThat(defaultMode.matches(displayInfo.width, displayInfo.height,
                displayInfo.refreshRate)).isTrue();
        assertThat(defaultMode.matches(displayConfig.width, displayConfig.height,
                displayConfig.refreshRate)).isTrue();

        Display.Mode activeMode = getModeById(displayDeviceInfo, displayDeviceInfo.modeId);
        assertThat(activeMode.matches(displayInfo.width, displayInfo.height,
                displayInfo.refreshRate)).isTrue();
        assertThat(activeMode.matches(displayConfig.width, displayConfig.height,
                displayConfig.refreshRate)).isTrue();

        // Change the display
        SurfaceControl.DisplayConfig addedDisplayInfo = createFakeDisplayConfig(3840, 2160,
                60f);
        configs = new SurfaceControl.DisplayConfig[]{displayInfo, addedDisplayInfo};
        configs = new SurfaceControl.DisplayConfig[]{displayConfig, addedDisplayInfo};
        display.configs = configs;
        display.activeConfig = 1;
        setUpDisplay(display);
@@ -236,7 +236,7 @@ public class LocalDisplayAdapterTest {
        displayDeviceInfo = displayDevice.getDisplayDeviceInfoLocked();

        assertThat(displayDeviceInfo.supportedModes.length).isEqualTo(configs.length);
        assertModeIsSupported(displayDeviceInfo.supportedModes, displayInfo);
        assertModeIsSupported(displayDeviceInfo.supportedModes, displayConfig);
        assertModeIsSupported(displayDeviceInfo.supportedModes, addedDisplayInfo);

        activeMode = getModeById(displayDeviceInfo, displayDeviceInfo.modeId);
@@ -248,6 +248,80 @@ public class LocalDisplayAdapterTest {
                addedDisplayInfo.refreshRate)).isTrue();
    }

    @Test
    public void testAfterDisplayChange_HdrCapabilitiesAreUpdated() throws Exception {
        FakeDisplay display = new FakeDisplay(PORT_A);
        Display.HdrCapabilities initialHdrCapabilities = new Display.HdrCapabilities(new int[0],
                1000, 1000, 0);
        display.hdrCapabilities = initialHdrCapabilities;
        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.hdrCapabilities).isEqualTo(initialHdrCapabilities);

        // Change the display
        Display.HdrCapabilities changedHdrCapabilities = new Display.HdrCapabilities(
                new int[Display.HdrCapabilities.HDR_TYPE_HDR10_PLUS], 1000, 1000, 0);
        display.hdrCapabilities = changedHdrCapabilities;
        setUpDisplay(display);
        mAdapter.registerLocked();
        waitForHandlerToComplete(mHandler, HANDLER_WAIT_MS);

        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.hdrCapabilities).isEqualTo(changedHdrCapabilities);
    }

    @Test
    public void testAfterDisplayChange_ColorModesAreUpdated() throws Exception {
        FakeDisplay display = new FakeDisplay(PORT_A);
        final int[] initialColorModes = new int[]{Display.COLOR_MODE_BT709};
        display.colorModes = initialColorModes;
        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.colorMode).isEqualTo(Display.COLOR_MODE_BT709);
        assertThat(displayDeviceInfo.supportedColorModes).isEqualTo(initialColorModes);

        // Change the display
        final int[] changedColorModes = new int[]{Display.COLOR_MODE_DEFAULT};
        display.colorModes = changedColorModes;
        setUpDisplay(display);
        mAdapter.registerLocked();
        waitForHandlerToComplete(mHandler, HANDLER_WAIT_MS);

        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.colorMode).isEqualTo(Display.COLOR_MODE_DEFAULT);
        assertThat(displayDeviceInfo.supportedColorModes).isEqualTo(changedColorModes);
    }

    private void assertDisplayDpi(DisplayDeviceInfo info, int expectedPort,
                                  float expectedXdpi,
                                  float expectedYDpi,
@@ -279,6 +353,9 @@ public class LocalDisplayAdapterTest {
        public final SurfaceControl.DisplayInfo info;
        public SurfaceControl.DisplayConfig[] configs;
        public int activeConfig;
        public int[] colorModes = new int[]{ Display.COLOR_MODE_DEFAULT };
        public Display.HdrCapabilities hdrCapabilities = new Display.HdrCapabilities(new int[0],
                1000, 1000, 0);

        private FakeDisplay(int port) {
            this.address = createDisplayAddress(port);
@@ -306,8 +383,10 @@ public class LocalDisplayAdapterTest {
                () -> SurfaceControl.getDisplayConfigs(display.token));
        doReturn(display.activeConfig).when(() -> SurfaceControl.getActiveConfig(display.token));
        doReturn(0).when(() -> SurfaceControl.getActiveColorMode(display.token));
        doReturn(new int[] { 0 }).when(
        doReturn(display.colorModes).when(
                () -> SurfaceControl.getDisplayColorModes(display.token));
        doReturn(display.hdrCapabilities).when(
                () -> SurfaceControl.getHdrCapabilities(display.token));
        doReturn(new SurfaceControl.DesiredDisplayConfigSpecs(0, 60.f, 60.f, 60.f, 60.f))
                .when(() -> SurfaceControl.getDesiredDisplayConfigSpecs(display.token));
    }