From e8b1cc295dbdc2b42dc0a5c3789f8e2928f2b248 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Thu, 30 Mar 2023 18:36:14 +0000 Subject: [PATCH] Replace display area organizer upon registration - Checking for binder aliveness is prone to races which can cause a crash if SysUI is restarted quickly. There hasn't really been an issue with multiple processes organizing the same display area feature, and we can clean up the previous organizer cleanly, so this change defaults to that behavior (it still logs) Bug: 263582665 Test: atest DisplayAreaOrganizerTests Change-Id: Iacde8b2123a7baad3c36ce35fcce6b9ba72eff70 --- .../server/wm/DisplayAreaOrganizerController.java | 6 ------ .../android/server/wm/DisplayAreaOrganizerTest.java | 7 ------- .../src/com/android/server/wm/DisplayAreaTest.java | 13 ------------- 3 files changed, 26 deletions(-) diff --git a/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java b/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java index a83a033985c5d..3dc3be9abf741 100644 --- a/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java +++ b/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java @@ -135,12 +135,6 @@ public class DisplayAreaOrganizerController extends IDisplayAreaOrganizerControl ProtoLog.v(WM_DEBUG_WINDOW_ORGANIZER, "Register display organizer=%s uid=%d", organizer.asBinder(), uid); if (mOrganizersByFeatureIds.get(feature) != null) { - if (mOrganizersByFeatureIds.get(feature).mOrganizer.asBinder() - .isBinderAlive()) { - throw new IllegalStateException( - "Replacing existing organizer currently unsupported"); - } - mOrganizersByFeatureIds.remove(feature).destroy(); Slog.d(TAG, "Replacing dead organizer for feature=" + feature); } diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayAreaOrganizerTest.java b/services/tests/wmtests/src/com/android/server/wm/DisplayAreaOrganizerTest.java index 2686a24294920..d2f0385131d51 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayAreaOrganizerTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayAreaOrganizerTest.java @@ -111,13 +111,6 @@ public class DisplayAreaOrganizerTest extends WindowTestsBase { any(SurfaceControl.class)); } - @Test - public void testRegisterOrganizer_alreadyRegisteredFeature() { - registerMockOrganizer(FEATURE_VENDOR_FIRST); - assertThrows(IllegalStateException.class, - () -> registerMockOrganizer(FEATURE_VENDOR_FIRST)); - } - @Test public void testRegisterOrganizer_ignoreUntrustedDisplay() throws RemoteException { doReturn(false).when(mDisplayContent).isTrusted(); diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayAreaTest.java b/services/tests/wmtests/src/com/android/server/wm/DisplayAreaTest.java index 10540dc5a9eee..1ad04a254f66c 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayAreaTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayAreaTest.java @@ -618,19 +618,6 @@ public class DisplayAreaTest extends WindowTestsBase { assertThat(info2.rootDisplayAreaId).isEqualTo(root.mFeatureId); } - @Test - public void testRegisterSameFeatureOrganizer_expectThrowsException() { - final IDisplayAreaOrganizer mockDisplayAreaOrganizer = mock(IDisplayAreaOrganizer.class); - final IBinder binder = mock(IBinder.class); - doReturn(true).when(binder).isBinderAlive(); - doReturn(binder).when(mockDisplayAreaOrganizer).asBinder(); - final DisplayAreaOrganizerController controller = - mWm.mAtmService.mWindowOrganizerController.mDisplayAreaOrganizerController; - controller.registerOrganizer(mockDisplayAreaOrganizer, FEATURE_VENDOR_FIRST); - assertThrows(IllegalStateException.class, - () -> controller.registerOrganizer(mockDisplayAreaOrganizer, FEATURE_VENDOR_FIRST)); - } - @Test public void testRegisterUnregisterOrganizer() { final IDisplayAreaOrganizer mockDisplayAreaOrganizer = mock(IDisplayAreaOrganizer.class);