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:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user