Merge "Making Layout.Display immutable" into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
608fa1fd94
@@ -121,24 +121,17 @@ class DeviceStateToLayoutMap {
|
||||
final Layout layout = createLayout(state);
|
||||
for (com.android.server.display.config.layout.Display d: l.getDisplay()) {
|
||||
assert layout != null;
|
||||
Layout.Display display = layout.createDisplayLocked(
|
||||
int position = getPosition(d.getPosition());
|
||||
layout.createDisplayLocked(
|
||||
DisplayAddress.fromPhysicalDisplayId(d.getAddress().longValue()),
|
||||
d.isDefaultDisplay(),
|
||||
d.isEnabled(),
|
||||
d.getDisplayGroup(),
|
||||
mIdProducer,
|
||||
position,
|
||||
leadDisplayId,
|
||||
d.getBrightnessThrottlingMapId(),
|
||||
leadDisplayId);
|
||||
|
||||
if (FRONT_STRING.equals(d.getPosition())) {
|
||||
display.setPosition(POSITION_FRONT);
|
||||
} else if (REAR_STRING.equals(d.getPosition())) {
|
||||
display.setPosition(POSITION_REAR);
|
||||
} else {
|
||||
display.setPosition(POSITION_UNKNOWN);
|
||||
}
|
||||
display.setRefreshRateZoneId(d.getRefreshRateZoneId());
|
||||
display.setRefreshRateThermalThrottlingMapId(
|
||||
d.getRefreshRateZoneId(),
|
||||
d.getRefreshRateThermalThrottlingMapId());
|
||||
}
|
||||
}
|
||||
@@ -148,6 +141,16 @@ class DeviceStateToLayoutMap {
|
||||
}
|
||||
}
|
||||
|
||||
private int getPosition(@NonNull String position) {
|
||||
int positionInt = POSITION_UNKNOWN;
|
||||
if (FRONT_STRING.equals(position)) {
|
||||
positionInt = POSITION_FRONT;
|
||||
} else if (REAR_STRING.equals(position)) {
|
||||
positionInt = POSITION_REAR;
|
||||
}
|
||||
return positionInt;
|
||||
}
|
||||
|
||||
private Layout createLayout(int state) {
|
||||
if (mLayoutMap.contains(state)) {
|
||||
Slog.e(TAG, "Attempted to create a second layout for state " + state);
|
||||
|
||||
@@ -18,8 +18,6 @@ package com.android.server.display;
|
||||
|
||||
import static android.view.Display.DEFAULT_DISPLAY;
|
||||
|
||||
import static com.android.server.display.layout.Layout.NO_LEAD_DISPLAY;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.content.Context;
|
||||
@@ -646,10 +644,7 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {
|
||||
if ((nextDeviceInfo.flags
|
||||
& DisplayDeviceInfo.FLAG_ALLOWED_TO_BE_DEFAULT_DISPLAY) != 0
|
||||
&& !nextDeviceInfo.address.equals(deviceInfo.address)) {
|
||||
layout.createDisplayLocked(nextDeviceInfo.address,
|
||||
/* isDefault= */ true, /* isEnabled= */ true,
|
||||
Layout.DEFAULT_DISPLAY_GROUP_NAME, mIdProducer,
|
||||
/* brightnessThrottlingMapId= */ null, DEFAULT_DISPLAY);
|
||||
layout.createDefaultDisplayLocked(nextDeviceInfo.address, mIdProducer);
|
||||
applyLayoutLocked();
|
||||
return;
|
||||
}
|
||||
@@ -1110,9 +1105,7 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {
|
||||
return;
|
||||
}
|
||||
final DisplayDeviceInfo info = device.getDisplayDeviceInfoLocked();
|
||||
layout.createDisplayLocked(info.address, /* isDefault= */ true, /* isEnabled= */ true,
|
||||
Layout.DEFAULT_DISPLAY_GROUP_NAME, mIdProducer,
|
||||
/* brightnessThrottlingMapId= */ null, NO_LEAD_DISPLAY);
|
||||
layout.createDefaultDisplayLocked(info.address, mIdProducer);
|
||||
}
|
||||
|
||||
private int assignLayerStackLocked(int displayId) {
|
||||
|
||||
@@ -39,7 +39,6 @@ public class Layout {
|
||||
public static final String DEFAULT_DISPLAY_GROUP_NAME = "";
|
||||
|
||||
private static final String TAG = "Layout";
|
||||
private static int sNextNonDefaultDisplayId = DEFAULT_DISPLAY + 1;
|
||||
|
||||
// Lead display Id is set to this if this is not a follower display, and therefore
|
||||
// has no lead.
|
||||
@@ -47,13 +46,6 @@ public class Layout {
|
||||
|
||||
private final List<Display> mDisplays = new ArrayList<>(2);
|
||||
|
||||
/**
|
||||
* @return The default display ID, or a new unique one to use.
|
||||
*/
|
||||
public static int assignDisplayIdLocked(boolean isDefault) {
|
||||
return isDefault ? DEFAULT_DISPLAY : sNextNonDefaultDisplayId++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return mDisplays.toString();
|
||||
@@ -76,25 +68,17 @@ public class Layout {
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a simple 1:1 LogicalDisplay mapping for the specified DisplayDevice.
|
||||
* Creates the default 1:1 LogicalDisplay mapping for the specified DisplayDevice.
|
||||
*
|
||||
* @param address Address of the device.
|
||||
* @param isDefault Indicates if the device is meant to be the default display.
|
||||
* @param isEnabled Indicates if this display is usable and can be switched on
|
||||
* @param displayGroupName Name of the display group to which the display is assigned.
|
||||
* @param idProducer Produces the logical display id.
|
||||
* @param brightnessThrottlingMapId Name of which throttling policy should be used.
|
||||
* @param leadDisplayId Display that this one follows (-1 if none).
|
||||
* @exception IllegalArgumentException When a default display owns a display group other than
|
||||
* DEFAULT_DISPLAY_GROUP.
|
||||
* @return The new Display.
|
||||
*/
|
||||
public Display createDisplayLocked(
|
||||
@NonNull DisplayAddress address, boolean isDefault, boolean isEnabled,
|
||||
String displayGroupName, DisplayIdProducer idProducer, String brightnessThrottlingMapId,
|
||||
int leadDisplayId) {
|
||||
return createDisplayLocked(address, isDefault, isEnabled, displayGroupName, idProducer,
|
||||
brightnessThrottlingMapId, POSITION_UNKNOWN, leadDisplayId);
|
||||
public void createDefaultDisplayLocked(@NonNull DisplayAddress address,
|
||||
DisplayIdProducer idProducer) {
|
||||
createDisplayLocked(address, /* isDefault= */ true, /* isEnabled= */ true,
|
||||
DEFAULT_DISPLAY_GROUP_NAME, idProducer, POSITION_UNKNOWN,
|
||||
NO_LEAD_DISPLAY, /* brightnessThrottlingMapId= */ null,
|
||||
/* refreshRateZoneId= */ null, /* refreshRateThermalThrottlingMapId= */ null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -105,26 +89,30 @@ public class Layout {
|
||||
* @param isEnabled Indicates if this display is usable and can be switched on
|
||||
* @param displayGroupName Name of the display group to which the display is assigned.
|
||||
* @param idProducer Produces the logical display id.
|
||||
* @param brightnessThrottlingMapId Name of which throttling policy should be used.
|
||||
* @param position Indicates the position this display is facing in this layout.
|
||||
* @param leadDisplayId Display that this one follows (-1 if none).
|
||||
* @param brightnessThrottlingMapId Name of which brightness throttling policy should be used.
|
||||
* @param refreshRateZoneId Layout limited refresh rate zone name.
|
||||
* @param refreshRateThermalThrottlingMapId Name of which refresh rate throttling
|
||||
* policy should be used.
|
||||
|
||||
* @exception IllegalArgumentException When a default display owns a display group other than
|
||||
* DEFAULT_DISPLAY_GROUP.
|
||||
* @return The new Display.
|
||||
*/
|
||||
public Display createDisplayLocked(
|
||||
public void createDisplayLocked(
|
||||
@NonNull DisplayAddress address, boolean isDefault, boolean isEnabled,
|
||||
String displayGroupName, DisplayIdProducer idProducer, String brightnessThrottlingMapId,
|
||||
int position, int leadDisplayId) {
|
||||
String displayGroupName, DisplayIdProducer idProducer, int position, int leadDisplayId,
|
||||
String brightnessThrottlingMapId, @Nullable String refreshRateZoneId,
|
||||
@Nullable String refreshRateThermalThrottlingMapId) {
|
||||
if (contains(address)) {
|
||||
Slog.w(TAG, "Attempting to add second definition for display-device: " + address);
|
||||
return null;
|
||||
return;
|
||||
}
|
||||
|
||||
// See if we're dealing with the "default" display
|
||||
if (isDefault && getById(DEFAULT_DISPLAY) != null) {
|
||||
Slog.w(TAG, "Ignoring attempt to add a second default display: " + address);
|
||||
return null;
|
||||
return;
|
||||
}
|
||||
|
||||
// Assign a logical display ID and create the new display.
|
||||
@@ -138,11 +126,13 @@ public class Layout {
|
||||
throw new IllegalArgumentException("Default display should own DEFAULT_DISPLAY_GROUP");
|
||||
}
|
||||
final int logicalDisplayId = idProducer.getId(isDefault);
|
||||
leadDisplayId = isDefault ? NO_LEAD_DISPLAY : leadDisplayId;
|
||||
|
||||
final Display display = new Display(address, logicalDisplayId, isEnabled, displayGroupName,
|
||||
brightnessThrottlingMapId, position, leadDisplayId);
|
||||
brightnessThrottlingMapId, position, leadDisplayId, refreshRateZoneId,
|
||||
refreshRateThermalThrottlingMapId);
|
||||
|
||||
mDisplays.add(display);
|
||||
return display;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -242,7 +232,7 @@ public class Layout {
|
||||
// {@link DeviceStateToLayoutMap.POSITION_FRONT} or
|
||||
// {@link DeviceStateToLayoutMap.POSITION_REAR}.
|
||||
// {@link DeviceStateToLayoutMap.POSITION_UNKNOWN} is unspecified.
|
||||
private int mPosition;
|
||||
private final int mPosition;
|
||||
|
||||
// The ID of the brightness throttling map that should be used. This can change e.g. in
|
||||
// concurrent displays mode in which a stricter brightness throttling policy might need to
|
||||
@@ -251,31 +241,28 @@ public class Layout {
|
||||
private final String mBrightnessThrottlingMapId;
|
||||
|
||||
// The ID of the lead display that this display will follow in a layout. -1 means no lead.
|
||||
private int mLeadDisplayId;
|
||||
private final int mLeadDisplayId;
|
||||
|
||||
// Refresh rate zone id for specific layout
|
||||
@Nullable
|
||||
private String mRefreshRateZoneId;
|
||||
private final String mRefreshRateZoneId;
|
||||
|
||||
@Nullable
|
||||
private String mRefreshRateThermalThrottlingMapId;
|
||||
private final String mRefreshRateThermalThrottlingMapId;
|
||||
|
||||
Display(@NonNull DisplayAddress address, int logicalDisplayId, boolean isEnabled,
|
||||
private Display(@NonNull DisplayAddress address, int logicalDisplayId, boolean isEnabled,
|
||||
@NonNull String displayGroupName, String brightnessThrottlingMapId, int position,
|
||||
int leadDisplayId) {
|
||||
int leadDisplayId, @Nullable String refreshRateZoneId,
|
||||
@Nullable String refreshRateThermalThrottlingMapId) {
|
||||
mAddress = address;
|
||||
mLogicalDisplayId = logicalDisplayId;
|
||||
mIsEnabled = isEnabled;
|
||||
mDisplayGroupName = displayGroupName;
|
||||
mPosition = position;
|
||||
mBrightnessThrottlingMapId = brightnessThrottlingMapId;
|
||||
|
||||
if (leadDisplayId == mLogicalDisplayId) {
|
||||
mLeadDisplayId = NO_LEAD_DISPLAY;
|
||||
} else {
|
||||
mLeadDisplayId = leadDisplayId;
|
||||
}
|
||||
|
||||
mRefreshRateZoneId = refreshRateZoneId;
|
||||
mRefreshRateThermalThrottlingMapId = refreshRateThermalThrottlingMapId;
|
||||
mLeadDisplayId = leadDisplayId;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -345,23 +332,11 @@ public class Layout {
|
||||
return mDisplayGroupName;
|
||||
}
|
||||
|
||||
public void setRefreshRateZoneId(@Nullable String refreshRateZoneId) {
|
||||
mRefreshRateZoneId = refreshRateZoneId;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String getRefreshRateZoneId() {
|
||||
return mRefreshRateZoneId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the position that this display is facing.
|
||||
* @param position the display is facing.
|
||||
*/
|
||||
public void setPosition(int position) {
|
||||
mPosition = position;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The ID of the brightness throttling map that this display should use.
|
||||
*/
|
||||
@@ -370,7 +345,6 @@ public class Layout {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return the position that this display is facing.
|
||||
*/
|
||||
public int getPosition() {
|
||||
@@ -378,28 +352,12 @@ public class Layout {
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the display that this display should follow certain properties of, for example,
|
||||
* brightness
|
||||
* @param displayId of the lead display.
|
||||
*/
|
||||
public void setLeadDisplay(int displayId) {
|
||||
if (displayId != mLogicalDisplayId) {
|
||||
mLeadDisplayId = displayId;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return logical displayId of the display that this one follows.
|
||||
*/
|
||||
public int getLeadDisplayId() {
|
||||
return mLeadDisplayId;
|
||||
}
|
||||
|
||||
public void setRefreshRateThermalThrottlingMapId(String refreshRateThermalThrottlingMapId) {
|
||||
mRefreshRateThermalThrottlingMapId = refreshRateThermalThrottlingMapId;
|
||||
}
|
||||
|
||||
public String getRefreshRateThermalThrottlingMapId() {
|
||||
return mRefreshRateThermalThrottlingMapId;
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.android.server.display;
|
||||
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNull;
|
||||
|
||||
import android.view.Display;
|
||||
import android.view.DisplayAddress;
|
||||
@@ -63,26 +64,10 @@ public class DeviceStateToLayoutMapTest {
|
||||
Layout configLayout = mDeviceStateToLayoutMap.get(0);
|
||||
|
||||
Layout testLayout = new Layout();
|
||||
testLayout.createDisplayLocked(
|
||||
DisplayAddress.fromPhysicalDisplayId(123456L), /* isDefault= */ true,
|
||||
/* isEnabled= */ true, /* displayGroup= */ null, mDisplayIdProducerMock,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
testLayout.createDisplayLocked(
|
||||
DisplayAddress.fromPhysicalDisplayId(78910L), /* isDefault= */ false,
|
||||
/* isEnabled= */ false, /* displayGroup= */ null, mDisplayIdProducerMock,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
testLayout.createDisplayLocked(
|
||||
DisplayAddress.fromPhysicalDisplayId(98765L), /* isDefault= */ false,
|
||||
/* isEnabled= */ true, "group1", mDisplayIdProducerMock,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
testLayout.createDisplayLocked(
|
||||
DisplayAddress.fromPhysicalDisplayId(786L), /* isDefault= */ false,
|
||||
/* isEnabled= */ false, "group2", mDisplayIdProducerMock,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
createDefaultDisplay(testLayout, 123456L);
|
||||
createNonDefaultDisplay(testLayout, 78910L, /* enabled= */ false, /* group= */ null);
|
||||
createNonDefaultDisplay(testLayout, 98765L, /* enabled= */ true, /* group= */ "group1");
|
||||
createNonDefaultDisplay(testLayout, 786L, /* enabled= */ false, /* group= */ "group2");
|
||||
|
||||
assertEquals(testLayout, configLayout);
|
||||
}
|
||||
@@ -92,41 +77,18 @@ public class DeviceStateToLayoutMapTest {
|
||||
Layout configLayout = mDeviceStateToLayoutMap.get(1);
|
||||
|
||||
Layout testLayout = new Layout();
|
||||
testLayout.createDisplayLocked(
|
||||
DisplayAddress.fromPhysicalDisplayId(78910L), /* isDefault= */ true,
|
||||
/* isEnabled= */ true, /* displayGroup= */ null, mDisplayIdProducerMock,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
testLayout.createDisplayLocked(
|
||||
DisplayAddress.fromPhysicalDisplayId(123456L), /* isDefault= */ false,
|
||||
/* isEnabled= */ false, /* displayGroup= */ null, mDisplayIdProducerMock,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
createDefaultDisplay(testLayout, 78910L);
|
||||
createNonDefaultDisplay(testLayout, 123456L, /* enabled= */ false, /* group= */ null);
|
||||
|
||||
assertEquals(testLayout, configLayout);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testConcurrentState() {
|
||||
public void testBrightnessThrottlingMapId() {
|
||||
Layout configLayout = mDeviceStateToLayoutMap.get(2);
|
||||
|
||||
Layout testLayout = new Layout();
|
||||
|
||||
Layout.Display display1 = testLayout.createDisplayLocked(
|
||||
DisplayAddress.fromPhysicalDisplayId(345L), /* isDefault= */ true,
|
||||
/* isEnabled= */ true, /* displayGroup= */ null, mDisplayIdProducerMock,
|
||||
/* brightnessThrottlingMapId= */ "concurrent",
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
display1.setPosition(Layout.Display.POSITION_FRONT);
|
||||
|
||||
Layout.Display display2 = testLayout.createDisplayLocked(
|
||||
DisplayAddress.fromPhysicalDisplayId(678L), /* isDefault= */ false,
|
||||
/* isEnabled= */ true, /* displayGroup= */ null, mDisplayIdProducerMock,
|
||||
/* brightnessThrottlingMapId= */ "concurrent",
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
display2.setPosition(Layout.Display.POSITION_REAR);
|
||||
|
||||
assertEquals(testLayout, configLayout);
|
||||
assertEquals("concurrent1", configLayout.getAt(0).getBrightnessThrottlingMapId());
|
||||
assertEquals("concurrent2", configLayout.getAt(1).getBrightnessThrottlingMapId());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -141,38 +103,33 @@ public class DeviceStateToLayoutMapTest {
|
||||
public void testRefreshRateZoneId() {
|
||||
Layout configLayout = mDeviceStateToLayoutMap.get(3);
|
||||
|
||||
Layout testLayout = new Layout();
|
||||
Layout.Display display1 = testLayout.createDisplayLocked(
|
||||
DisplayAddress.fromPhysicalDisplayId(345L), /* isDefault= */ true,
|
||||
/* isEnabled= */ true, /* displayGroup= */ null, mDisplayIdProducerMock,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
display1.setRefreshRateZoneId("test1");
|
||||
testLayout.createDisplayLocked(
|
||||
DisplayAddress.fromPhysicalDisplayId(678L), /* isDefault= */ false,
|
||||
/* isEnabled= */ true, /* displayGroup= */ null, mDisplayIdProducerMock,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
|
||||
assertEquals(testLayout, configLayout);
|
||||
assertEquals("test1", configLayout.getAt(0).getRefreshRateZoneId());
|
||||
assertNull(configLayout.getAt(1).getRefreshRateZoneId());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRefreshRateThermalThrottlingMapId() {
|
||||
Layout configLayout = mDeviceStateToLayoutMap.get(4);
|
||||
|
||||
assertEquals("test2", configLayout.getAt(0).getRefreshRateThermalThrottlingMapId());
|
||||
assertNull(configLayout.getAt(1).getRefreshRateThermalThrottlingMapId());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWholeStateConfig() {
|
||||
Layout configLayout = mDeviceStateToLayoutMap.get(99);
|
||||
|
||||
Layout testLayout = new Layout();
|
||||
Layout.Display display1 = testLayout.createDisplayLocked(
|
||||
DisplayAddress.fromPhysicalDisplayId(345L), /* isDefault= */ true,
|
||||
/* isEnabled= */ true, /* displayGroup= */ null, mDisplayIdProducerMock,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
display1.setRefreshRateThermalThrottlingMapId("test2");
|
||||
testLayout.createDisplayLocked(
|
||||
DisplayAddress.fromPhysicalDisplayId(678L), /* isDefault= */ false,
|
||||
/* isEnabled= */ true, /* displayGroup= */ null, mDisplayIdProducerMock,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
testLayout.createDisplayLocked(DisplayAddress.fromPhysicalDisplayId(345L),
|
||||
/* isDefault= */ true, /* isEnabled= */ true, /* displayGroupName= */ null,
|
||||
mDisplayIdProducerMock, Layout.Display.POSITION_FRONT, Display.DEFAULT_DISPLAY,
|
||||
/* brightnessThrottlingMapId= */ "brightness1",
|
||||
/* refreshRateZoneId= */ "zone1", /* refreshRateThermalThrottlingMapId= */ "rr1");
|
||||
testLayout.createDisplayLocked(DisplayAddress.fromPhysicalDisplayId(678L),
|
||||
/* isDefault= */ false, /* isEnabled= */ false, /* displayGroupName= */ "group1",
|
||||
mDisplayIdProducerMock, Layout.Display.POSITION_REAR, Display.DEFAULT_DISPLAY,
|
||||
/* brightnessThrottlingMapId= */ "brightness2",
|
||||
/* refreshRateZoneId= */ "zone2", /* refreshRateThermalThrottlingMapId= */ "rr2");
|
||||
|
||||
assertEquals(testLayout, configLayout);
|
||||
}
|
||||
@@ -181,6 +138,18 @@ public class DeviceStateToLayoutMapTest {
|
||||
// Helper Methods //
|
||||
////////////////////
|
||||
|
||||
private void createDefaultDisplay(Layout layout, long id) {
|
||||
layout.createDefaultDisplayLocked(DisplayAddress.fromPhysicalDisplayId(id),
|
||||
mDisplayIdProducerMock);
|
||||
}
|
||||
|
||||
private void createNonDefaultDisplay(Layout layout, long id, boolean enabled, String group) {
|
||||
layout.createDisplayLocked(DisplayAddress.fromPhysicalDisplayId(id), /* isDefault= */ false,
|
||||
enabled, group, mDisplayIdProducerMock, Layout.Display.POSITION_UNKNOWN,
|
||||
Display.DEFAULT_DISPLAY, /* brightnessThrottlingMapId= */ null,
|
||||
/* refreshRateZoneId= */ null, /* refreshRateThermalThrottlingMapId= */ null);
|
||||
}
|
||||
|
||||
private void setupDeviceStateToLayoutMap() throws IOException {
|
||||
Path tempFile = Files.createTempFile("device_state_layout_map", ".tmp");
|
||||
Files.write(tempFile, getContent().getBytes(StandardCharsets.UTF_8));
|
||||
@@ -222,12 +191,12 @@ public class DeviceStateToLayoutMapTest {
|
||||
+ "<display enabled=\"true\" defaultDisplay=\"true\">\n"
|
||||
+ "<address>345</address>\n"
|
||||
+ "<position>front</position>\n"
|
||||
+ "<brightnessThrottlingMapId>concurrent</brightnessThrottlingMapId>\n"
|
||||
+ "<brightnessThrottlingMapId>concurrent1</brightnessThrottlingMapId>\n"
|
||||
+ "</display>\n"
|
||||
+ "<display enabled=\"true\">\n"
|
||||
+ "<address>678</address>\n"
|
||||
+ "<position>rear</position>\n"
|
||||
+ "<brightnessThrottlingMapId>concurrent</brightnessThrottlingMapId>\n"
|
||||
+ "<brightnessThrottlingMapId>concurrent2</brightnessThrottlingMapId>\n"
|
||||
+ "</display>\n"
|
||||
+ "</layout>\n"
|
||||
|
||||
@@ -254,6 +223,27 @@ public class DeviceStateToLayoutMapTest {
|
||||
+ "<address>678</address>\n"
|
||||
+ "</display>\n"
|
||||
+ "</layout>\n"
|
||||
+ "</layouts>\n";
|
||||
+ "<layout>\n"
|
||||
+ "<state>99</state> \n"
|
||||
+ "<display enabled=\"true\" defaultDisplay=\"true\" "
|
||||
+ "refreshRateZoneId=\"zone1\">\n"
|
||||
+ "<address>345</address>\n"
|
||||
+ "<position>front</position>\n"
|
||||
+ "<brightnessThrottlingMapId>brightness1</brightnessThrottlingMapId>\n"
|
||||
+ "<refreshRateThermalThrottlingMapId>"
|
||||
+ "rr1"
|
||||
+ "</refreshRateThermalThrottlingMapId>"
|
||||
+ "</display>\n"
|
||||
+ "<display enabled=\"false\" displayGroup=\"group1\" "
|
||||
+ "refreshRateZoneId=\"zone2\">\n"
|
||||
+ "<address>678</address>\n"
|
||||
+ "<position>rear</position>\n"
|
||||
+ "<brightnessThrottlingMapId>brightness2</brightnessThrottlingMapId>\n"
|
||||
+ "<refreshRateThermalThrottlingMapId>"
|
||||
+ "rr2"
|
||||
+ "</refreshRateThermalThrottlingMapId>"
|
||||
+ "</display>\n"
|
||||
+ "</layout>\n"
|
||||
+ "</layouts>\n";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,8 +60,8 @@ import android.view.Display;
|
||||
import android.view.DisplayAddress;
|
||||
import android.view.DisplayInfo;
|
||||
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import androidx.test.filters.SmallTest;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
|
||||
import com.android.server.display.layout.DisplayIdProducer;
|
||||
import com.android.server.display.layout.Layout;
|
||||
@@ -300,14 +300,8 @@ public class LogicalDisplayMapperTest {
|
||||
add(device2);
|
||||
|
||||
Layout layout1 = new Layout();
|
||||
layout1.createDisplayLocked(info(device1).address, /* isDefault= */ true,
|
||||
/* isEnabled= */ true, /* displayGroup= */ null, mIdProducer,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
layout1.createDisplayLocked(info(device2).address, /* isDefault= */ false,
|
||||
/* isEnabled= */ true, /* displayGroup= */ null, mIdProducer,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
createDefaultDisplay(layout1, device1);
|
||||
createNonDefaultDisplay(layout1, device2, /* enabled= */ true, /* group= */ null);
|
||||
when(mDeviceStateToLayoutMapSpy.get(STATE_DEFAULT)).thenReturn(layout1);
|
||||
assertThat(layout1.size()).isEqualTo(2);
|
||||
final int logicalId2 = layout1.getByAddress(info(device2).address).getLogicalDisplayId();
|
||||
@@ -340,23 +334,14 @@ public class LogicalDisplayMapperTest {
|
||||
add(device3);
|
||||
|
||||
Layout layout1 = new Layout();
|
||||
layout1.createDisplayLocked(info(device1).address, /* isDefault= */ true,
|
||||
/* isEnabled= */ true, /* displayGroup= */ null, mIdProducer,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
createDefaultDisplay(layout1, device1);
|
||||
when(mDeviceStateToLayoutMapSpy.get(STATE_DEFAULT)).thenReturn(layout1);
|
||||
|
||||
final int layoutState2 = 2;
|
||||
Layout layout2 = new Layout();
|
||||
layout2.createDisplayLocked(info(device2).address, /* isDefault= */ false,
|
||||
/* isEnabled= */ true, /* displayGroup= */ null, mIdProducer,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
createNonDefaultDisplay(layout2, device2, /* enabled= */ true, /* group= */ null);
|
||||
// Device3 is the default display.
|
||||
layout2.createDisplayLocked(info(device3).address, /* isDefault= */ true,
|
||||
/* isEnabled= */ true, /* displayGroup= */ null, mIdProducer,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
createDefaultDisplay(layout2, device3);
|
||||
when(mDeviceStateToLayoutMapSpy.get(layoutState2)).thenReturn(layout2);
|
||||
assertThat(layout2.size()).isEqualTo(2);
|
||||
final int logicalId2 = layout2.getByAddress(info(device2).address).getLogicalDisplayId();
|
||||
@@ -398,22 +383,11 @@ public class LogicalDisplayMapperTest {
|
||||
FLAG_ALLOWED_TO_BE_DEFAULT_DISPLAY);
|
||||
|
||||
Layout layout = new Layout();
|
||||
layout.createDisplayLocked(info(device1).address,
|
||||
/* isDefault= */ true, /* isEnabled= */ true, /* displayGroup= */ null,
|
||||
mIdProducer, /* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
layout.createDisplayLocked(info(device2).address,
|
||||
/* isDefault= */ false, /* isEnabled= */ true, "group1", mIdProducer,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
layout.createDisplayLocked(info(device3).address,
|
||||
/* isDefault= */ false, /* isEnabled= */ true, "group1", mIdProducer,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
layout.createDisplayLocked(info(device4).address,
|
||||
/* isDefault= */ false, /* isEnabled= */ true, "group2", mIdProducer,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
createDefaultDisplay(layout, device1);
|
||||
createNonDefaultDisplay(layout, device2, /* enabled= */ true, /* group= */ "group1");
|
||||
createNonDefaultDisplay(layout, device3, /* enabled= */ true, /* group= */ "group1");
|
||||
createNonDefaultDisplay(layout, device4, /* enabled= */ true, /* group= */ "group2");
|
||||
|
||||
when(mDeviceStateToLayoutMapSpy.get(STATE_DEFAULT)).thenReturn(layout);
|
||||
|
||||
LogicalDisplay display1 = add(device1);
|
||||
@@ -629,23 +603,21 @@ public class LogicalDisplayMapperTest {
|
||||
Layout layout = new Layout();
|
||||
layout.createDisplayLocked(device1.getDisplayDeviceInfoLocked().address,
|
||||
/* isDefault= */ true, /* isEnabled= */ true, /* displayGroup= */ null,
|
||||
mIdProducer, /* brightnessThrottlingMapId= */ "concurrent",
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
mIdProducer, POSITION_UNKNOWN,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY,
|
||||
/* brightnessThrottlingMapId= */ "concurrent",
|
||||
/* refreshRateZoneId= */ null, /* refreshRateThermalThrottlingMapId= */ null);
|
||||
layout.createDisplayLocked(device2.getDisplayDeviceInfoLocked().address,
|
||||
/* isDefault= */ false, /* isEnabled= */ true, /* displayGroup= */ null,
|
||||
mIdProducer, /* brightnessThrottlingMapId= */ "concurrent",
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
mIdProducer, POSITION_UNKNOWN,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY,
|
||||
/* brightnessThrottlingMapId= */ "concurrent",
|
||||
/* refreshRateZoneId= */ null, /* refreshRateThermalThrottlingMapId= */ null);
|
||||
when(mDeviceStateToLayoutMapSpy.get(0)).thenReturn(layout);
|
||||
|
||||
layout = new Layout();
|
||||
layout.createDisplayLocked(device1.getDisplayDeviceInfoLocked().address,
|
||||
/* isDefault= */ false, /* isEnabled= */ false, /* displayGroup= */ null,
|
||||
mIdProducer, /* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
layout.createDisplayLocked(device2.getDisplayDeviceInfoLocked().address,
|
||||
/* isDefault= */ true, /* isEnabled= */ true, /* displayGroup= */ null,
|
||||
mIdProducer, /* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
createNonDefaultDisplay(layout, device1, /* enabled= */ false, /* group= */ null);
|
||||
createDefaultDisplay(layout, device2);
|
||||
when(mDeviceStateToLayoutMapSpy.get(1)).thenReturn(layout);
|
||||
when(mDeviceStateToLayoutMapSpy.get(2)).thenReturn(layout);
|
||||
|
||||
@@ -722,30 +694,11 @@ public class LogicalDisplayMapperTest {
|
||||
TYPE_INTERNAL, 600, 900, DisplayDeviceInfo.FLAG_OWN_DISPLAY_GROUP);
|
||||
|
||||
Layout threeDevicesEnabledLayout = new Layout();
|
||||
threeDevicesEnabledLayout.createDisplayLocked(
|
||||
displayAddressOne,
|
||||
/* isDefault= */ true,
|
||||
/* isEnabled= */ true,
|
||||
/* displayGroup= */ null,
|
||||
mIdProducer,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
threeDevicesEnabledLayout.createDisplayLocked(
|
||||
displayAddressTwo,
|
||||
/* isDefault= */ false,
|
||||
/* isEnabled= */ true,
|
||||
/* displayGroup= */ null,
|
||||
mIdProducer,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
threeDevicesEnabledLayout.createDisplayLocked(
|
||||
displayAddressThree,
|
||||
/* isDefault= */ false,
|
||||
/* isEnabled= */ true,
|
||||
/* displayGroup= */ null,
|
||||
mIdProducer,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
createDefaultDisplay(threeDevicesEnabledLayout, displayAddressOne);
|
||||
createNonDefaultDisplay(threeDevicesEnabledLayout, displayAddressTwo,
|
||||
/* enabled= */ true, /* group= */ null);
|
||||
createNonDefaultDisplay(threeDevicesEnabledLayout, displayAddressThree,
|
||||
/* enabled= */ true, /* group= */ null);
|
||||
|
||||
when(mDeviceStateToLayoutMapSpy.get(STATE_DEFAULT))
|
||||
.thenReturn(threeDevicesEnabledLayout);
|
||||
@@ -776,30 +729,11 @@ public class LogicalDisplayMapperTest {
|
||||
/* includeDisabled= */ false));
|
||||
|
||||
Layout oneDeviceEnabledLayout = new Layout();
|
||||
oneDeviceEnabledLayout.createDisplayLocked(
|
||||
displayAddressOne,
|
||||
/* isDefault= */ true,
|
||||
/* isEnabled= */ true,
|
||||
/* displayGroup= */ null,
|
||||
mIdProducer,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
oneDeviceEnabledLayout.createDisplayLocked(
|
||||
displayAddressTwo,
|
||||
/* isDefault= */ false,
|
||||
/* isEnabled= */ false,
|
||||
/* displayGroup= */ null,
|
||||
mIdProducer,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
oneDeviceEnabledLayout.createDisplayLocked(
|
||||
displayAddressThree,
|
||||
/* isDefault= */ false,
|
||||
/* isEnabled= */ false,
|
||||
/* displayGroup= */ null,
|
||||
mIdProducer,
|
||||
/* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
createDefaultDisplay(oneDeviceEnabledLayout, displayAddressOne);
|
||||
createNonDefaultDisplay(oneDeviceEnabledLayout, displayAddressTwo,
|
||||
/* enabled= */ false, /* group= */ null);
|
||||
createNonDefaultDisplay(oneDeviceEnabledLayout, displayAddressThree,
|
||||
/* enabled= */ false, /* group= */ null);
|
||||
|
||||
when(mDeviceStateToLayoutMapSpy.get(0)).thenReturn(oneDeviceEnabledLayout);
|
||||
when(mDeviceStateToLayoutMapSpy.get(1)).thenReturn(threeDevicesEnabledLayout);
|
||||
@@ -873,12 +807,13 @@ public class LogicalDisplayMapperTest {
|
||||
FLAG_REAR);
|
||||
|
||||
Layout layout = new Layout();
|
||||
layout.createDisplayLocked(device1.getDisplayDeviceInfoLocked().address,
|
||||
true, true, null, mIdProducer, /* brightnessThrottlingMapId= */ null,
|
||||
/* leadDisplayId= */ Display.DEFAULT_DISPLAY);
|
||||
layout.createDefaultDisplayLocked(device1.getDisplayDeviceInfoLocked().address,
|
||||
mIdProducer);
|
||||
layout.createDisplayLocked(device2.getDisplayDeviceInfoLocked().address,
|
||||
false, true, null, mIdProducer, /* brightnessThrottlingMapId= */ null,
|
||||
POSITION_REAR, Display.DEFAULT_DISPLAY);
|
||||
/* isDefault= */ false, /* isEnabled= */ true, /* displayGroupName= */ null,
|
||||
mIdProducer, POSITION_REAR, Display.DEFAULT_DISPLAY,
|
||||
/* brightnessThrottlingMapId= */ null, /* refreshRateZoneId= */ null,
|
||||
/* refreshRateThermalThrottlingMapId= */null);
|
||||
when(mDeviceStateToLayoutMapSpy.get(0)).thenReturn(layout);
|
||||
|
||||
when(mDeviceStateToLayoutMapSpy.size()).thenReturn(1);
|
||||
@@ -910,6 +845,27 @@ public class LogicalDisplayMapperTest {
|
||||
// Helper Methods
|
||||
/////////////////
|
||||
|
||||
private void createDefaultDisplay(Layout layout, DisplayDevice device) {
|
||||
createDefaultDisplay(layout, info(device).address);
|
||||
}
|
||||
|
||||
private void createDefaultDisplay(Layout layout, DisplayAddress address) {
|
||||
layout.createDefaultDisplayLocked(address, mIdProducer);
|
||||
}
|
||||
|
||||
private void createNonDefaultDisplay(Layout layout, DisplayDevice device, boolean enabled,
|
||||
String group) {
|
||||
createNonDefaultDisplay(layout, info(device).address, enabled, group);
|
||||
}
|
||||
|
||||
private void createNonDefaultDisplay(Layout layout, DisplayAddress address, boolean enabled,
|
||||
String group) {
|
||||
layout.createDisplayLocked(address, /* isDefault= */ false, enabled, group, mIdProducer,
|
||||
Layout.Display.POSITION_UNKNOWN, Display.DEFAULT_DISPLAY,
|
||||
/* brightnessThrottlingMapId= */ null, /* refreshRateZoneId= */ null,
|
||||
/* refreshRateThrottlingMapId= */ null);
|
||||
}
|
||||
|
||||
private void advanceTime(long timeMs) {
|
||||
mLooper.moveTimeForward(1000);
|
||||
mLooper.dispatchAll();
|
||||
|
||||
Reference in New Issue
Block a user