summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Oleg Blinnikov <olb@google.com> 2024-05-23 20:25:15 +0000
committer Oleg Blinnikov <olb@google.com> 2024-05-27 13:49:04 +0000
commit987eeb85d4025986011bb84579415ce86dd1ce46 (patch)
treeb30e57746072617ff71e74cf5ef0dd383be3e8c8
parent2595b660c3be766b7eaf3804cd0bc9d6efa97877 (diff)
Prevent double updateLogicalDisplaysLocked
Bug: 332711269 Bug: 338927759 Test: atest ExternalDisplayPolicyTest DisplayManagerServiceTest LogicalDisplayMapperTest Change-Id: Iad0c5b0ea19a8f1f14642109639fd435b0e43bc4 (cherry picked from commit ab71a6c161bf8a6b4e52554686b9e45879d1f8bc)
-rw-r--r--services/core/java/com/android/server/display/ExternalDisplayPolicy.java5
-rw-r--r--services/core/java/com/android/server/display/LogicalDisplayMapper.java1
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java10
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/ExternalDisplayPolicyTest.java2
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);