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

Commit e8b1cc29 authored by Winson Chung's avatar Winson Chung
Browse files

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
parent f9a77b96
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -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);
                }
+0 −7
Original line number Diff line number Diff line
@@ -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();
+0 −13
Original line number Diff line number Diff line
@@ -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);