diff options
| author | 2024-05-23 20:25:15 +0000 | |
|---|---|---|
| committer | 2024-05-27 13:49:04 +0000 | |
| commit | 987eeb85d4025986011bb84579415ce86dd1ce46 (patch) | |
| tree | b30e57746072617ff71e74cf5ef0dd383be3e8c8 | |
| parent | 2595b660c3be766b7eaf3804cd0bc9d6efa97877 (diff) | |
Prevent double updateLogicalDisplaysLocked
Bug: 332711269
Bug: 338927759
Test: atest ExternalDisplayPolicyTest DisplayManagerServiceTest
LogicalDisplayMapperTest
Change-Id: Iad0c5b0ea19a8f1f14642109639fd435b0e43bc4
(cherry picked from commit ab71a6c161bf8a6b4e52554686b9e45879d1f8bc)
4 files changed, 11 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/display/ExternalDisplayPolicy.java b/services/core/java/com/android/server/display/ExternalDisplayPolicy.java index b24caf4ced76..44c8d1cfee36 100644 --- a/services/core/java/com/android/server/display/ExternalDisplayPolicy.java +++ b/services/core/java/com/android/server/display/ExternalDisplayPolicy.java @@ -136,6 +136,9 @@ class ExternalDisplayPolicy { handleExternalDisplayConnectedLocked(logicalDisplay); } } + if (!mDisplayIdsWaitingForBootCompletion.isEmpty()) { + mLogicalDisplayMapper.updateLogicalDisplaysLocked(); + } mDisplayIdsWaitingForBootCompletion.clear(); } @@ -222,7 +225,7 @@ class ExternalDisplayPolicy { } else { // As external display is enabled by default, need to disable it now. // TODO(b/292196201) Remove when the display can be disabled before DPC is created. - mLogicalDisplayMapper.setDisplayEnabledLocked(logicalDisplay, false); + mLogicalDisplayMapper.setEnabledLocked(logicalDisplay, false); } if (!isExternalDisplayAllowed()) { diff --git a/services/core/java/com/android/server/display/LogicalDisplayMapper.java b/services/core/java/com/android/server/display/LogicalDisplayMapper.java index d40a7a31420b..4f5fefbd1985 100644 --- a/services/core/java/com/android/server/display/LogicalDisplayMapper.java +++ b/services/core/java/com/android/server/display/LogicalDisplayMapper.java @@ -1189,7 +1189,6 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener { return display; } - @VisibleForTesting void setEnabledLocked(LogicalDisplay display, boolean isEnabled) { final int displayId = display.getDisplayIdLocked(); final DisplayInfo info = display.getDisplayInfoLocked(); diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java index 8b236682b995..e0c1cf3719c7 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java @@ -2429,9 +2429,8 @@ public class DisplayManagerServiceTest { LogicalDisplay display = logicalDisplayMapper.getDisplayLocked(displayDevice, /* includeDisabled= */ true); assertThat(display.isEnabledLocked()).isFalse(); - // TODO(b/332711269) make sure only one DISPLAY_GROUP_EVENT_ADDED sent. assertThat(callback.receivedEvents()).containsExactly(DISPLAY_GROUP_EVENT_ADDED, - DISPLAY_GROUP_EVENT_ADDED, EVENT_DISPLAY_CONNECTED).inOrder(); + EVENT_DISPLAY_CONNECTED).inOrder(); } @Test @@ -3138,8 +3137,11 @@ public class DisplayManagerServiceTest { } displayDeviceInfo.address = new TestUtils.TestDisplayAddress(); displayDevice.setDisplayDeviceInfo(displayDeviceInfo); - displayManager.getDisplayDeviceRepository() - .onDisplayDeviceEvent(displayDevice, DisplayAdapter.DISPLAY_DEVICE_EVENT_ADDED); + + displayManager.getDisplayHandler().runWithScissors(() -> { + displayManager.getDisplayDeviceRepository() + .onDisplayDeviceEvent(displayDevice, DisplayAdapter.DISPLAY_DEVICE_EVENT_ADDED); + }, 0 /* now */); return displayDevice; } diff --git a/services/tests/displayservicetests/src/com/android/server/display/ExternalDisplayPolicyTest.java b/services/tests/displayservicetests/src/com/android/server/display/ExternalDisplayPolicyTest.java index ea08be4f1be4..82acaf86988d 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/ExternalDisplayPolicyTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/ExternalDisplayPolicyTest.java @@ -317,7 +317,7 @@ public class ExternalDisplayPolicyTest { mDisplayEventCaptor.capture()); assertThat(mLogicalDisplayCaptor.getValue()).isEqualTo(mMockedLogicalDisplay); assertThat(mDisplayEventCaptor.getValue()).isEqualTo(EVENT_DISPLAY_CONNECTED); - verify(mMockedLogicalDisplayMapper).setDisplayEnabledLocked(eq(mMockedLogicalDisplay), + verify(mMockedLogicalDisplayMapper).setEnabledLocked(eq(mMockedLogicalDisplay), eq(false)); clearInvocations(mMockedLogicalDisplayMapper); clearInvocations(mMockedLogicalDisplay); |