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

Commit b14bca30 authored by Kriti Dang's avatar Kriti Dang
Browse files

Removing the initialising the mode with system pref mode.

This is unncessary because the initial active mode by system is the
correct mode, and there is no need to initialise with system pref mode.
But this mode needs to be set while clearing user pref mode.

Bug: 213463860
Test: atest DefaultDisplayModeTest
Test: atest LocalDisplayAdapterTest
Change-Id: Ic7533f1974cd9fe4f418d807929490e06ca1a274
parent f6cd035c
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -413,11 +413,8 @@ final class LocalDisplayAdapter extends DisplayAdapter {

            // For a new display, we need to initialize the default mode ID.
            if (mDefaultModeId == INVALID_MODE_ID) {
                mDefaultModeId = mSystemPreferredModeId != INVALID_MODE_ID
                        ? mSystemPreferredModeId : activeRecord.mMode.getModeId();
                mDefaultModeGroup = mSystemPreferredModeId != INVALID_MODE_ID
                        ? preferredSfDisplayMode.group
                        : mActiveSfDisplayMode.group;
                mDefaultModeId = activeRecord.mMode.getModeId();
                mDefaultModeGroup = mActiveSfDisplayMode.group;
            } else if (modesAdded && activeModeChanged) {
                Slog.d(TAG, "New display modes are added and the active mode has changed, "
                        + "use active mode as default mode.");
@@ -911,6 +908,13 @@ final class LocalDisplayAdapter extends DisplayAdapter {
        public void setUserPreferredDisplayModeLocked(Display.Mode mode) {
            final int oldModeId = getPreferredModeId();
            mUserPreferredMode = mode;
            // When clearing the user preferred mode we need to also reset the default mode. This is
            // used by DisplayModeDirector to determine the default resolution, so if we don't clear
            // it then the resolution won't reset to what it would've been prior to setting a user
            // preferred display mode.
            if (mode == null && mSystemPreferredModeId != INVALID_MODE_ID) {
                mDefaultModeId = mSystemPreferredModeId;
            }
            if (mode != null && (mode.isRefreshRateSet() || mode.isResolutionSet())) {
                Display.Mode matchingSupportedMode;
                matchingSupportedMode = findMode(mode.getPhysicalWidth(),
+30 −9
Original line number Diff line number Diff line
@@ -792,11 +792,13 @@ public class LocalDisplayAdapterTest {
    @Test
    public void testGetSystemPreferredDisplayMode() throws Exception {
        SurfaceControl.DisplayMode displayMode1 = createFakeDisplayMode(0, 1920, 1080, 60f);
        // preferred mode
        // system preferred mode
        SurfaceControl.DisplayMode displayMode2 = createFakeDisplayMode(1, 3840, 2160, 60f);
        // user preferred mode
        SurfaceControl.DisplayMode displayMode3 = createFakeDisplayMode(2, 1920, 1080, 30f);

        SurfaceControl.DisplayMode[] modes =
                new SurfaceControl.DisplayMode[]{displayMode1, displayMode2};
                new SurfaceControl.DisplayMode[]{displayMode1, displayMode2, displayMode3};
        FakeDisplay display = new FakeDisplay(PORT_A, modes, 0, 1);
        setUpDisplay(display);
        updateAvailableDisplays();
@@ -808,24 +810,43 @@ public class LocalDisplayAdapterTest {

        DisplayDeviceInfo displayDeviceInfo = mListener.addedDisplays.get(
                0).getDisplayDeviceInfoLocked();

        assertThat(displayDeviceInfo.supportedModes.length).isEqualTo(modes.length);

        Display.Mode defaultMode = getModeById(displayDeviceInfo, displayDeviceInfo.defaultModeId);
        assertThat(matches(defaultMode, displayMode1)).isTrue();

        // Set the user preferred display mode
        mListener.addedDisplays.get(0).setUserPreferredDisplayModeLocked(
                new Display.Mode(
                        displayMode3.width, displayMode3.height, displayMode3.refreshRate));
        updateAvailableDisplays();
        waitForHandlerToComplete(mHandler, HANDLER_WAIT_MS);
        displayDeviceInfo = mListener.addedDisplays.get(
                0).getDisplayDeviceInfoLocked();
        defaultMode = getModeById(displayDeviceInfo, displayDeviceInfo.defaultModeId);
        assertThat(matches(defaultMode, displayMode3)).isTrue();

        // clear the user preferred mode
        mListener.addedDisplays.get(0).setUserPreferredDisplayModeLocked(null);
        updateAvailableDisplays();
        waitForHandlerToComplete(mHandler, HANDLER_WAIT_MS);
        displayDeviceInfo = mListener.addedDisplays.get(
                0).getDisplayDeviceInfoLocked();
        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};
        // Change the display and add new system preferred mode
        SurfaceControl.DisplayMode addedDisplayInfo = createFakeDisplayMode(3, 2340, 1080, 20f);
        modes = new SurfaceControl.DisplayMode[]{
                displayMode1, displayMode2, displayMode3, addedDisplayInfo};
        display.dynamicInfo.supportedDisplayModes = modes;
        display.dynamicInfo.preferredBootDisplayMode = 2;
        display.dynamicInfo.preferredBootDisplayMode = 3;
        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);
        assertThat(mListener.changedDisplays.size()).isEqualTo(3);

        DisplayDevice displayDevice = mListener.changedDisplays.get(0);
        displayDevice.applyPendingDisplayDeviceInfoChangesLocked();