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
This commit is contained in:
Winson Chung
2023-03-30 18:36:14 +00:00
parent f9a77b961f
commit e8b1cc295d
3 changed files with 0 additions and 26 deletions

View File

@@ -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);
}

View File

@@ -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();

View File

@@ -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);