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

Commit 64bface5 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Have each Display be associated with a DisplayGroup and DPC" into sc-dev

parents 8481c3ae 71b3ede6
Loading
Loading
Loading
Loading
+14 −13
Original line number Diff line number Diff line
@@ -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();
@@ -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) {
@@ -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;
            }
+13 −19
Original line number Diff line number Diff line
@@ -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"));
        }
+4 −7
Original line number Diff line number Diff line
@@ -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)));
    }

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