Test that color modes and HDR capabilities get updated

Bug: 149193027
Test: atest LocalDisplayAdapterTest
Change-Id: Ibd52ca21e4865d730d48b25a482c028e438b4408
This commit is contained in:
Marin Shalamanov
2020-06-30 19:16:50 +02:00
parent 5c82686c3e
commit 56330d104f
2 changed files with 91 additions and 12 deletions

View File

@@ -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;

View File

@@ -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));
}