Merge "Prevent deadlock when releasing VirtualDisplays" into tm-dev am: 1187757cf2

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17658628

Change-Id: I168e64131c95a30373916825617f69803873280b
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
TreeHugger Robot
2022-05-05 00:34:33 +00:00
committed by Automerger Merge Worker

View File

@@ -1440,16 +1440,6 @@ public final class DisplayManagerService extends SystemService {
DisplayDevice device =
mVirtualDisplayAdapter.releaseVirtualDisplayLocked(appToken);
if (device != null) {
final LogicalDisplay display = mLogicalDisplayMapper.getDisplayLocked(device);
if (display != null) {
final int displayId = display.getDisplayIdLocked();
if (mDisplayWindowPolicyControllers.contains(displayId)) {
Pair<IVirtualDevice, DisplayWindowPolicyController> pair =
mDisplayWindowPolicyControllers.removeReturnOld(displayId);
getLocalService(VirtualDeviceManagerInternal.class)
.onVirtualDisplayRemoved(pair.first, displayId);
}
}
// TODO: multi-display - handle virtual displays the same as other display adapters.
mDisplayDeviceRepo.onDisplayDeviceEvent(device,
DisplayAdapter.DISPLAY_DEVICE_EVENT_REMOVED);
@@ -1609,6 +1599,17 @@ public final class DisplayManagerService extends SystemService {
DisplayManagerGlobal.invalidateLocalDisplayInfoCaches();
sendDisplayEventLocked(displayId, DisplayManagerGlobal.EVENT_DISPLAY_REMOVED);
scheduleTraversalLocked(false);
if (mDisplayWindowPolicyControllers.contains(displayId)) {
final IVirtualDevice virtualDevice = mDisplayWindowPolicyControllers.removeReturnOld(
displayId).first;
if (virtualDevice != null) {
mHandler.post(() -> {
getLocalService(VirtualDeviceManagerInternal.class)
.onVirtualDisplayRemoved(virtualDevice, displayId);
});
}
}
}
private void handleLogicalDisplaySwappedLocked(@NonNull LogicalDisplay display) {