From a7e3899a2083131f160d577d6ec3c187f06d225c Mon Sep 17 00:00:00 2001 From: Mady Mellor Date: Wed, 11 May 2022 00:37:31 +0000 Subject: [PATCH] Add shell background executor to bubbles and put unregister call on it Bug: 224545601 Test: manual - have bubbles and dismiss the stack, make sure nothing bad happens Change-Id: I2c578d10e0bef49534987be3e82700e50ffd1281 --- .../wm/shell/bubbles/BubbleController.java | 20 +++++++++++++------ .../wm/shell/dagger/WMShellModule.java | 5 ++++- .../wmshell/TestableBubbleController.java | 2 +- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java index f407bdcb8852..a45931953c0b 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java @@ -96,6 +96,8 @@ import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.common.TaskStackListenerCallback; import com.android.wm.shell.common.TaskStackListenerImpl; +import com.android.wm.shell.common.annotations.ShellBackgroundThread; +import com.android.wm.shell.common.annotations.ShellMainThread; import com.android.wm.shell.draganddrop.DragAndDropController; import com.android.wm.shell.onehanded.OneHandedController; import com.android.wm.shell.onehanded.OneHandedTransitionCallback; @@ -158,6 +160,8 @@ public class BubbleController { private final ShellExecutor mMainExecutor; private final Handler mMainHandler; + private final ShellExecutor mBackgroundExecutor; + private BubbleLogger mLogger; private BubbleData mBubbleData; @Nullable private BubbleStackView mStackView; @@ -234,8 +238,9 @@ public class BubbleController { DisplayController displayController, Optional oneHandedOptional, DragAndDropController dragAndDropController, - ShellExecutor mainExecutor, - Handler mainHandler, + @ShellMainThread ShellExecutor mainExecutor, + @ShellMainThread Handler mainHandler, + @ShellBackgroundThread ShellExecutor bgExecutor, TaskViewTransitions taskViewTransitions, SyncTransactionQueue syncQueue) { BubbleLogger logger = new BubbleLogger(uiEventLogger); @@ -245,7 +250,7 @@ public class BubbleController { new BubbleDataRepository(context, launcherApps, mainExecutor), statusBarService, windowManager, windowManagerShellWrapper, launcherApps, logger, taskStackListener, organizer, positioner, displayController, - oneHandedOptional, dragAndDropController, mainExecutor, mainHandler, + oneHandedOptional, dragAndDropController, mainExecutor, mainHandler, bgExecutor, taskViewTransitions, syncQueue); } @@ -269,8 +274,9 @@ public class BubbleController { DisplayController displayController, Optional oneHandedOptional, DragAndDropController dragAndDropController, - ShellExecutor mainExecutor, - Handler mainHandler, + @ShellMainThread ShellExecutor mainExecutor, + @ShellMainThread Handler mainHandler, + @ShellBackgroundThread ShellExecutor bgExecutor, TaskViewTransitions taskViewTransitions, SyncTransactionQueue syncQueue) { mContext = context; @@ -286,6 +292,7 @@ public class BubbleController { mLogger = bubbleLogger; mMainExecutor = mainExecutor; mMainHandler = mainHandler; + mBackgroundExecutor = bgExecutor; mTaskStackListener = taskStackListener; mTaskOrganizer = organizer; mSurfaceSynchronizer = synchronizer; @@ -725,7 +732,8 @@ public class BubbleController { try { mAddedToWindowManager = false; - mContext.unregisterReceiver(mBroadcastReceiver); + // Put on background for this binder call, was causing jank + mBackgroundExecutor.execute(() -> mContext.unregisterReceiver(mBroadcastReceiver)); if (mStackView != null) { mWindowManager.removeView(mStackView); mBubbleData.getOverflow().cleanUpExpandedState(); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java index 9c4ec5313c50..f833797c3b3c 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java @@ -41,6 +41,7 @@ import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.common.SystemWindows; import com.android.wm.shell.common.TaskStackListenerImpl; import com.android.wm.shell.common.TransactionPool; +import com.android.wm.shell.common.annotations.ShellBackgroundThread; import com.android.wm.shell.common.annotations.ShellMainThread; import com.android.wm.shell.draganddrop.DragAndDropController; import com.android.wm.shell.freeform.FreeformTaskListener; @@ -113,13 +114,15 @@ public class WMShellModule { DragAndDropController dragAndDropController, @ShellMainThread ShellExecutor mainExecutor, @ShellMainThread Handler mainHandler, + @ShellBackgroundThread ShellExecutor bgExecutor, TaskViewTransitions taskViewTransitions, SyncTransactionQueue syncQueue) { return BubbleController.create(context, null /* synchronizer */, floatingContentCoordinator, statusBarService, windowManager, windowManagerShellWrapper, launcherApps, taskStackListener, uiEventLogger, organizer, displayController, oneHandedOptional, - dragAndDropController, mainExecutor, mainHandler, taskViewTransitions, syncQueue); + dragAndDropController, mainExecutor, mainHandler, bgExecutor, + taskViewTransitions, syncQueue); } // diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/TestableBubbleController.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/TestableBubbleController.java index 9646edf6756a..9ca6bb0af8d5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/TestableBubbleController.java +++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/TestableBubbleController.java @@ -69,7 +69,7 @@ public class TestableBubbleController extends BubbleController { statusBarService, windowManager, windowManagerShellWrapper, launcherApps, bubbleLogger, taskStackListener, shellTaskOrganizer, positioner, displayController, oneHandedOptional, dragAndDropController, shellMainExecutor, shellMainHandler, - taskViewTransitions, syncQueue); + new SyncExecutor(), taskViewTransitions, syncQueue); setInflateSynchronously(true); initialize(); } -- GitLab