diff options
7 files changed, 23 insertions, 30 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityClientController.java b/services/core/java/com/android/server/wm/ActivityClientController.java index ff1c28ad1973..a0a64187c752 100644 --- a/services/core/java/com/android/server/wm/ActivityClientController.java +++ b/services/core/java/com/android/server/wm/ActivityClientController.java @@ -1147,8 +1147,7 @@ class ActivityClientController extends IActivityClientController.Stub { if (mService.mWindowManager.mSyncEngine.hasActiveSync()) { ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, "Creating Pending Multiwindow Fullscreen Request: %s", transition); - mService.mWindowManager.mSyncEngine.queueSyncSet( - () -> r.mTransitionController.moveToCollecting(transition), + r.mTransitionController.queueCollecting(transition, () -> { executeFullscreenRequestTransition(fullscreenRequest, callback, r, transition, true /* queued */); diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 5f56923e2f53..f5b2f1318d92 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -9808,8 +9808,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A scheduleStopForRestartProcess(); }; if (mWmService.mSyncEngine.hasActiveSync()) { - mWmService.mSyncEngine.queueSyncSet( - () -> mTransitionController.moveToCollecting(transition), executeRestart); + mTransitionController.queueCollecting(transition, executeRestart); } else { mTransitionController.moveToCollecting(transition); executeRestart.run(); diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 12fe6a0dba25..55e68055ed89 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -2874,8 +2874,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { final Transition transition = new Transition(TRANSIT_CHANGE, 0 /* flags */, getTransitionController(), mWindowManager.mSyncEngine); if (mWindowManager.mSyncEngine.hasActiveSync()) { - mWindowManager.mSyncEngine.queueSyncSet( - () -> getTransitionController().moveToCollecting(transition), + getTransitionController().queueCollecting(transition, () -> { if (!task.getWindowConfiguration().canResizeTask()) { Slog.w(TAG, "resizeTask not allowed on task=" + task); @@ -3629,9 +3628,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { if (transition != null && mWindowManager.mSyncEngine.hasActiveSync()) { ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, "Creating Pending Pip-Enter: %s", transition); - mWindowManager.mSyncEngine.queueSyncSet( - () -> getTransitionController().moveToCollecting(transition), - enterPipRunnable); + getTransitionController().queueCollecting(transition, enterPipRunnable); } else { // Move to collecting immediately to "claim" the sync-engine for this // transition. @@ -3647,9 +3644,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { if (transition != null && mWindowManager.mSyncEngine.hasActiveSync()) { ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, "Creating Pending Pip-Enter: %s", transition); - mWindowManager.mSyncEngine.queueSyncSet( - () -> getTransitionController().moveToCollecting(transition), - enterPipRunnable); + getTransitionController().queueCollecting(transition, enterPipRunnable); } else { if (transition != null) { getTransitionController().moveToCollecting(transition); diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index 07daa4b22ac9..ad934541267e 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -2335,9 +2335,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent> transition.playNow(); }; if (display.mTransitionController.isCollecting()) { - mWmService.mSyncEngine.queueSyncSet( - () -> display.mTransitionController.moveToCollecting(transition), - sendSleepTransition); + display.mTransitionController.queueCollecting(transition, sendSleepTransition); } else { display.mTransitionController.moveToCollecting(transition); sendSleepTransition.run(); diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index db4453297001..25e4d45c90c6 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -5634,8 +5634,7 @@ class Task extends TaskFragment { if (mWmService.mSyncEngine.hasActiveSync()) { ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, "Creating Pending Move-to-back: %s", transition); - mWmService.mSyncEngine.queueSyncSet( - () -> mTransitionController.moveToCollecting(transition), + mTransitionController.queueCollecting(transition, () -> { // Need to check again since this happens later and the system might // be in a different state. diff --git a/services/core/java/com/android/server/wm/TransitionController.java b/services/core/java/com/android/server/wm/TransitionController.java index bcb8c46de5ed..19f940d60113 100644 --- a/services/core/java/com/android/server/wm/TransitionController.java +++ b/services/core/java/com/android/server/wm/TransitionController.java @@ -886,6 +886,15 @@ class TransitionController { proto.end(token); } + void queueCollecting(Transition transit, Runnable onCollectStart) { + mAtm.mWindowManager.mSyncEngine.queueSyncSet( + // Make sure to collect immediately to prevent another transition + // from sneaking in before it. Note: moveToCollecting internally + // calls startSyncSet. + () -> moveToCollecting(transit), + onCollectStart); + } + /** * This manages the animating state of processes that are running remote animations for * {@link #mTransitionPlayerProc}. diff --git a/services/core/java/com/android/server/wm/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java index 32d54d774b40..f63470f2bea4 100644 --- a/services/core/java/com/android/server/wm/WindowOrganizerController.java +++ b/services/core/java/com/android/server/wm/WindowOrganizerController.java @@ -291,23 +291,21 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub if (type < 0) { throw new IllegalArgumentException("Can't create transition with no type"); } + transition = new Transition(type, 0 /* flags */, mTransitionController, + mService.mWindowManager.mSyncEngine); // If there is already a collecting transition, queue up a new transition and // return that. The actual start and apply will then be deferred until that // transition starts collecting. This should almost never happen except during // tests. if (mService.mWindowManager.mSyncEngine.hasActiveSync()) { Slog.w(TAG, "startTransition() while one is already collecting."); - final Transition nextTransition = new Transition(type, 0 /* flags */, - mTransitionController, mService.mWindowManager.mSyncEngine); + final Transition nextTransition = transition; ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, "Creating Pending Transition: %s", nextTransition); - mService.mWindowManager.mSyncEngine.queueSyncSet( - // Make sure to collect immediately to prevent another transition - // from sneaking in before it. Note: moveToCollecting internally - // calls startSyncSet. - () -> mTransitionController.moveToCollecting(nextTransition), + mTransitionController.queueCollecting(nextTransition, () -> { nextTransition.start(); + nextTransition.mLogger.mStartWCT = wct; applyTransaction(wct, -1 /*syncId*/, nextTransition, caller); if (needsSetReady) { nextTransition.setAllReady(); @@ -315,7 +313,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub }); return nextTransition.getToken(); } - transition = mTransitionController.createTransition(type); + mTransitionController.moveToCollecting(transition); } if (!transition.isCollecting() && !transition.isForcePlaying()) { Slog.e(TAG, "Trying to start a transition that isn't collecting. This probably" @@ -474,11 +472,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub mTransitionController, mService.mWindowManager.mSyncEngine); ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, "Creating Pending Transition for TaskFragment: %s", nextTransition); - mService.mWindowManager.mSyncEngine.queueSyncSet( - // Make sure to collect immediately to prevent another transition - // from sneaking in before it. Note: moveToCollecting internally - // calls startSyncSet. - () -> mTransitionController.moveToCollecting(nextTransition), + mTransitionController.queueCollecting(nextTransition, () -> { if (mTaskFragmentOrganizerController.isValidTransaction(wct) && (applyTransaction(wct, -1 /* syncId */, nextTransition, caller) |