Loading services/core/java/com/android/server/display/LocalDisplayAdapter.java +5 −9 Original line number Diff line number Diff line Loading @@ -411,8 +411,11 @@ final class LocalDisplayAdapter extends DisplayAdapter { // For a new display, we need to initialize the default mode ID. if (mDefaultModeId == INVALID_MODE_ID) { mDefaultModeId = activeRecord.mMode.getModeId(); mDefaultModeGroup = mActiveSfDisplayMode.group; mDefaultModeId = mSystemPreferredModeId != INVALID_MODE_ID ? mSystemPreferredModeId : activeRecord.mMode.getModeId(); mDefaultModeGroup = mSystemPreferredModeId != INVALID_MODE_ID ? preferredSfDisplayMode.group : 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."); Loading Loading @@ -894,13 +897,6 @@ 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(), Loading services/tests/mockingservicestests/src/com/android/server/display/LocalDisplayAdapterTest.java +9 −30 Original line number Diff line number Diff line Loading @@ -764,13 +764,11 @@ public class LocalDisplayAdapterTest { @Test public void testGetSystemPreferredDisplayMode() throws Exception { SurfaceControl.DisplayMode displayMode1 = createFakeDisplayMode(0, 1920, 1080, 60f); // system preferred mode // 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, displayMode3}; new SurfaceControl.DisplayMode[]{displayMode1, displayMode2}; FakeDisplay display = new FakeDisplay(PORT_A, modes, 0, 1); setUpDisplay(display); updateAvailableDisplays(); Loading @@ -782,43 +780,24 @@ 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(); assertThat(displayDeviceInfo.supportedModes.length).isEqualTo(modes.length); // 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); Display.Mode defaultMode = getModeById(displayDeviceInfo, displayDeviceInfo.defaultModeId); assertThat(matches(defaultMode, displayMode2)).isTrue(); // 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}; // 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 = 3; 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(3); assertThat(mListener.changedDisplays.size()).isEqualTo(1); DisplayDevice displayDevice = mListener.changedDisplays.get(0); displayDevice.applyPendingDisplayDeviceInfoChangesLocked(); Loading Loading
services/core/java/com/android/server/display/LocalDisplayAdapter.java +5 −9 Original line number Diff line number Diff line Loading @@ -411,8 +411,11 @@ final class LocalDisplayAdapter extends DisplayAdapter { // For a new display, we need to initialize the default mode ID. if (mDefaultModeId == INVALID_MODE_ID) { mDefaultModeId = activeRecord.mMode.getModeId(); mDefaultModeGroup = mActiveSfDisplayMode.group; mDefaultModeId = mSystemPreferredModeId != INVALID_MODE_ID ? mSystemPreferredModeId : activeRecord.mMode.getModeId(); mDefaultModeGroup = mSystemPreferredModeId != INVALID_MODE_ID ? preferredSfDisplayMode.group : 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."); Loading Loading @@ -894,13 +897,6 @@ 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(), Loading
services/tests/mockingservicestests/src/com/android/server/display/LocalDisplayAdapterTest.java +9 −30 Original line number Diff line number Diff line Loading @@ -764,13 +764,11 @@ public class LocalDisplayAdapterTest { @Test public void testGetSystemPreferredDisplayMode() throws Exception { SurfaceControl.DisplayMode displayMode1 = createFakeDisplayMode(0, 1920, 1080, 60f); // system preferred mode // 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, displayMode3}; new SurfaceControl.DisplayMode[]{displayMode1, displayMode2}; FakeDisplay display = new FakeDisplay(PORT_A, modes, 0, 1); setUpDisplay(display); updateAvailableDisplays(); Loading @@ -782,43 +780,24 @@ 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(); assertThat(displayDeviceInfo.supportedModes.length).isEqualTo(modes.length); // 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); Display.Mode defaultMode = getModeById(displayDeviceInfo, displayDeviceInfo.defaultModeId); assertThat(matches(defaultMode, displayMode2)).isTrue(); // 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}; // 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 = 3; 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(3); assertThat(mListener.changedDisplays.size()).isEqualTo(1); DisplayDevice displayDevice = mListener.changedDisplays.get(0); displayDevice.applyPendingDisplayDeviceInfoChangesLocked(); Loading