Loading services/core/java/com/android/server/display/DisplayManagerService.java +14 −13 Original line number Diff line number Diff line Loading @@ -1134,13 +1134,9 @@ public final class DisplayManagerService extends SystemService { recordStableDisplayStatsIfNeededLocked(display); recordTopInsetLocked(display); } final int groupId = mLogicalDisplayMapper.getDisplayGroupIdFromDisplayIdLocked(displayId); if (groupId != Display.INVALID_DISPLAY_GROUP) { addDisplayPowerControllerLocked(display); mDisplayStates.append(displayId, Display.STATE_UNKNOWN); } else { mDisplayStates.append(displayId, Display.STATE_ON); } mDisplayBrightnesses.append(displayId, display.getDisplayInfoLocked().brightnessDefault); DisplayManagerGlobal.invalidateLocalDisplayInfoCaches(); Loading Loading @@ -1943,8 +1939,7 @@ public final class DisplayManagerService extends SystemService { } private void initializeDisplayPowerControllersLocked() { mLogicalDisplayMapper.forEachLocked((logicalDisplay) -> addDisplayPowerControllerLocked( logicalDisplay)); mLogicalDisplayMapper.forEachLocked(this::addDisplayPowerControllerLocked); } private void addDisplayPowerControllerLocked(LogicalDisplay display) { Loading Loading @@ -2891,11 +2886,17 @@ public final class DisplayManagerService extends SystemService { final int size = displayGroup.getSizeLocked(); boolean ready = true; for (int i = 0; i < size; i++) { final int id = displayGroup.getIdLocked(i); final DisplayDevice displayDevice = mLogicalDisplayMapper.getDisplayLocked( id).getPrimaryDisplayDeviceLocked(); final int flags = displayDevice.getDisplayDeviceInfoLocked().flags; if ((flags & DisplayDeviceInfo.FLAG_NEVER_BLANK) == 0) { final DisplayPowerController displayPowerController = mDisplayPowerControllers.get(displayGroup.getIdLocked(i)); mDisplayPowerControllers.get(id); ready &= displayPowerController.requestPowerState(request, waitForNegativeProximity); } } return ready; } Loading services/core/java/com/android/server/display/LogicalDisplayMapper.java +13 −19 Original line number Diff line number Diff line Loading @@ -433,37 +433,31 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener { final int displayId = display.getDisplayIdLocked(); // Get current display group data final int groupId = getDisplayGroupIdFromDisplayIdLocked(displayId); int groupId = getDisplayGroupIdFromDisplayIdLocked(displayId); final DisplayGroup oldGroup = getDisplayGroupLocked(groupId); // Get the new display group if a change is needed final DisplayInfo info = display.getDisplayInfoLocked(); final boolean needsOwnDisplayGroup = (info.flags & Display.FLAG_OWN_DISPLAY_GROUP) != 0; final boolean hasOwnDisplayGroup = groupId != Display.DEFAULT_DISPLAY_GROUP; final boolean needsDisplayGroup = needsOwnDisplayGroup || info.type == Display.TYPE_INTERNAL || info.type == Display.TYPE_EXTERNAL; if (!needsDisplayGroup) { if (oldGroup != null) { oldGroup.removeDisplayLocked(display); } return; } if (groupId == Display.INVALID_DISPLAY_GROUP || hasOwnDisplayGroup != needsOwnDisplayGroup) { if (oldGroup != null) { oldGroup.removeDisplayLocked(display); groupId = assignDisplayGroupIdLocked(needsOwnDisplayGroup); } final int newGroupId = assignDisplayGroupIdLocked(needsOwnDisplayGroup); // Create a new group if needed DisplayGroup newGroup = getDisplayGroupLocked(newGroupId); DisplayGroup newGroup = getDisplayGroupLocked(groupId); if (newGroup == null) { newGroup = new DisplayGroup(newGroupId); mDisplayGroups.append(newGroupId, newGroup); newGroup = new DisplayGroup(groupId); mDisplayGroups.append(groupId, newGroup); } if (oldGroup != newGroup) { if (oldGroup != null) { oldGroup.removeDisplayLocked(display); } newGroup.addDisplayLocked(display); display.updateDisplayGroupIdLocked(newGroupId); Slog.i(TAG, "Setting new display group " + newGroupId + " for display " display.updateDisplayGroupIdLocked(groupId); Slog.i(TAG, "Setting new display group " + groupId + " for display " + displayId + ", from previous group: " + (oldGroup != null ? oldGroup.getGroupId() : "null")); } Loading services/tests/servicestests/src/com/android/server/display/LogicalDisplayMapperTest.java +4 −7 Original line number Diff line number Diff line Loading @@ -186,14 +186,11 @@ public class LogicalDisplayMapperTest { LogicalDisplay display2 = add(createDisplayDevice(Display.TYPE_INTERNAL, 600, 800, 0)); LogicalDisplay display3 = add(createDisplayDevice(Display.TYPE_VIRTUAL, 600, 800, 0)); // Physical displays should be automatically put into the default group. assertEquals(Display.DEFAULT_DISPLAY_GROUP, mLogicalDisplayMapper.getDisplayGroupIdFromDisplayIdLocked(id(display1))); assertEquals(Display.DEFAULT_DISPLAY_GROUP, mLogicalDisplayMapper.getDisplayGroupIdFromDisplayIdLocked(id(display2))); // Virtual displays should belong to no group by default. assertEquals(Display.INVALID_DISPLAY_GROUP, assertEquals(Display.DEFAULT_DISPLAY_GROUP, mLogicalDisplayMapper.getDisplayGroupIdFromDisplayIdLocked(id(display3))); } Loading @@ -215,13 +212,13 @@ public class LogicalDisplayMapperTest { assertNotEquals(Display.DEFAULT_DISPLAY_GROUP, mLogicalDisplayMapper.getDisplayGroupIdFromDisplayIdLocked(id(display3))); // Now switch it to the invalid group by removing the flag and issuing an update // Now switch it back to the default group by removing the flag and issuing an update DisplayDeviceInfo info = device3.getSourceInfo(); info.flags = info.flags & ~DisplayDeviceInfo.FLAG_OWN_DISPLAY_GROUP; mDisplayDeviceRepo.onDisplayDeviceEvent(device3, DISPLAY_DEVICE_EVENT_CHANGED); // Verify the virtual display has not been placed into a group. assertEquals(Display.INVALID_DISPLAY_GROUP, // Verify the new group is correct. assertEquals(Display.DEFAULT_DISPLAY_GROUP, mLogicalDisplayMapper.getDisplayGroupIdFromDisplayIdLocked(id(display3))); } Loading Loading
services/core/java/com/android/server/display/DisplayManagerService.java +14 −13 Original line number Diff line number Diff line Loading @@ -1134,13 +1134,9 @@ public final class DisplayManagerService extends SystemService { recordStableDisplayStatsIfNeededLocked(display); recordTopInsetLocked(display); } final int groupId = mLogicalDisplayMapper.getDisplayGroupIdFromDisplayIdLocked(displayId); if (groupId != Display.INVALID_DISPLAY_GROUP) { addDisplayPowerControllerLocked(display); mDisplayStates.append(displayId, Display.STATE_UNKNOWN); } else { mDisplayStates.append(displayId, Display.STATE_ON); } mDisplayBrightnesses.append(displayId, display.getDisplayInfoLocked().brightnessDefault); DisplayManagerGlobal.invalidateLocalDisplayInfoCaches(); Loading Loading @@ -1943,8 +1939,7 @@ public final class DisplayManagerService extends SystemService { } private void initializeDisplayPowerControllersLocked() { mLogicalDisplayMapper.forEachLocked((logicalDisplay) -> addDisplayPowerControllerLocked( logicalDisplay)); mLogicalDisplayMapper.forEachLocked(this::addDisplayPowerControllerLocked); } private void addDisplayPowerControllerLocked(LogicalDisplay display) { Loading Loading @@ -2891,11 +2886,17 @@ public final class DisplayManagerService extends SystemService { final int size = displayGroup.getSizeLocked(); boolean ready = true; for (int i = 0; i < size; i++) { final int id = displayGroup.getIdLocked(i); final DisplayDevice displayDevice = mLogicalDisplayMapper.getDisplayLocked( id).getPrimaryDisplayDeviceLocked(); final int flags = displayDevice.getDisplayDeviceInfoLocked().flags; if ((flags & DisplayDeviceInfo.FLAG_NEVER_BLANK) == 0) { final DisplayPowerController displayPowerController = mDisplayPowerControllers.get(displayGroup.getIdLocked(i)); mDisplayPowerControllers.get(id); ready &= displayPowerController.requestPowerState(request, waitForNegativeProximity); } } return ready; } Loading
services/core/java/com/android/server/display/LogicalDisplayMapper.java +13 −19 Original line number Diff line number Diff line Loading @@ -433,37 +433,31 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener { final int displayId = display.getDisplayIdLocked(); // Get current display group data final int groupId = getDisplayGroupIdFromDisplayIdLocked(displayId); int groupId = getDisplayGroupIdFromDisplayIdLocked(displayId); final DisplayGroup oldGroup = getDisplayGroupLocked(groupId); // Get the new display group if a change is needed final DisplayInfo info = display.getDisplayInfoLocked(); final boolean needsOwnDisplayGroup = (info.flags & Display.FLAG_OWN_DISPLAY_GROUP) != 0; final boolean hasOwnDisplayGroup = groupId != Display.DEFAULT_DISPLAY_GROUP; final boolean needsDisplayGroup = needsOwnDisplayGroup || info.type == Display.TYPE_INTERNAL || info.type == Display.TYPE_EXTERNAL; if (!needsDisplayGroup) { if (oldGroup != null) { oldGroup.removeDisplayLocked(display); } return; } if (groupId == Display.INVALID_DISPLAY_GROUP || hasOwnDisplayGroup != needsOwnDisplayGroup) { if (oldGroup != null) { oldGroup.removeDisplayLocked(display); groupId = assignDisplayGroupIdLocked(needsOwnDisplayGroup); } final int newGroupId = assignDisplayGroupIdLocked(needsOwnDisplayGroup); // Create a new group if needed DisplayGroup newGroup = getDisplayGroupLocked(newGroupId); DisplayGroup newGroup = getDisplayGroupLocked(groupId); if (newGroup == null) { newGroup = new DisplayGroup(newGroupId); mDisplayGroups.append(newGroupId, newGroup); newGroup = new DisplayGroup(groupId); mDisplayGroups.append(groupId, newGroup); } if (oldGroup != newGroup) { if (oldGroup != null) { oldGroup.removeDisplayLocked(display); } newGroup.addDisplayLocked(display); display.updateDisplayGroupIdLocked(newGroupId); Slog.i(TAG, "Setting new display group " + newGroupId + " for display " display.updateDisplayGroupIdLocked(groupId); Slog.i(TAG, "Setting new display group " + groupId + " for display " + displayId + ", from previous group: " + (oldGroup != null ? oldGroup.getGroupId() : "null")); } Loading
services/tests/servicestests/src/com/android/server/display/LogicalDisplayMapperTest.java +4 −7 Original line number Diff line number Diff line Loading @@ -186,14 +186,11 @@ public class LogicalDisplayMapperTest { LogicalDisplay display2 = add(createDisplayDevice(Display.TYPE_INTERNAL, 600, 800, 0)); LogicalDisplay display3 = add(createDisplayDevice(Display.TYPE_VIRTUAL, 600, 800, 0)); // Physical displays should be automatically put into the default group. assertEquals(Display.DEFAULT_DISPLAY_GROUP, mLogicalDisplayMapper.getDisplayGroupIdFromDisplayIdLocked(id(display1))); assertEquals(Display.DEFAULT_DISPLAY_GROUP, mLogicalDisplayMapper.getDisplayGroupIdFromDisplayIdLocked(id(display2))); // Virtual displays should belong to no group by default. assertEquals(Display.INVALID_DISPLAY_GROUP, assertEquals(Display.DEFAULT_DISPLAY_GROUP, mLogicalDisplayMapper.getDisplayGroupIdFromDisplayIdLocked(id(display3))); } Loading @@ -215,13 +212,13 @@ public class LogicalDisplayMapperTest { assertNotEquals(Display.DEFAULT_DISPLAY_GROUP, mLogicalDisplayMapper.getDisplayGroupIdFromDisplayIdLocked(id(display3))); // Now switch it to the invalid group by removing the flag and issuing an update // Now switch it back to the default group by removing the flag and issuing an update DisplayDeviceInfo info = device3.getSourceInfo(); info.flags = info.flags & ~DisplayDeviceInfo.FLAG_OWN_DISPLAY_GROUP; mDisplayDeviceRepo.onDisplayDeviceEvent(device3, DISPLAY_DEVICE_EVENT_CHANGED); // Verify the virtual display has not been placed into a group. assertEquals(Display.INVALID_DISPLAY_GROUP, // Verify the new group is correct. assertEquals(Display.DEFAULT_DISPLAY_GROUP, mLogicalDisplayMapper.getDisplayGroupIdFromDisplayIdLocked(id(display3))); } Loading