Loading services/core/java/com/android/server/wm/TransitionController.java +18 −7 Original line number Diff line number Diff line Loading @@ -277,6 +277,10 @@ class TransitionController { mSyncEngine.addOnIdleListener(this::tryStartCollectFromQueue); } private boolean isFlushing() { return mTransitionPlayers.isEmpty(); } void flushRunningTransitions() { // Temporarily clear so that nothing gets started/queued while flushing final ArrayList<TransitionPlayerRecord> temp = new ArrayList<>(mTransitionPlayers); Loading @@ -296,8 +300,10 @@ class TransitionController { mCollectingTransition.abort(); } mRemotePlayer.clear(); for (int i = 0; i < mQueuedTransitions.size(); ++i) { final QueuedTransition queued = mQueuedTransitions.get(i); final ArrayList<QueuedTransition> queuedTransits = new ArrayList<>(mQueuedTransitions); mQueuedTransitions.clear(); for (int i = 0; i < queuedTransits.size(); ++i) { final QueuedTransition queued = queuedTransits.get(i); if (queued.mTransition != null) { queued.mTransition.abort(); } else { Loading @@ -305,7 +311,6 @@ class TransitionController { mSyncEngine.abort(queued.mLegacySync.mSyncId); } } mQueuedTransitions.clear(); mRunningLock.doNotifyLocked(); // Restore the rest of the player stack mTransitionPlayers.addAll(temp); Loading Loading @@ -343,8 +348,7 @@ class TransitionController { if (mCollectingTransition != null) { throw new IllegalStateException("Simultaneous transition collection not supported."); } if (mTransitionPlayers.isEmpty()) { // This means transitions are being "flushed" due to switching players. if (isFlushing()) { transition.abort(); return; } Loading Loading @@ -1193,7 +1197,7 @@ class TransitionController { } void tryStartCollectFromQueue() { if (!isShellTransitionsEnabled()) return; if (isFlushing()) return; if (mQueuedTransitions.isEmpty()) return; // Only need to try the next one since, even when transition can collect in parallel, // they still need to serialize on readiness. Loading Loading @@ -1246,6 +1250,9 @@ class TransitionController { } void moveToPlaying(Transition transition) { if (isFlushing()) { Slog.wtfStack(TAG, "Starting to play a transition while flushing"); } if (transition == mCollectingTransition) { mCollectingTransition = null; if (!mWaitingTransitions.isEmpty()) { Loading Loading @@ -1614,6 +1621,10 @@ class TransitionController { */ boolean startCollectOrQueue(Transition transit, OnStartCollect onStartCollect, boolean noopIfDuringDisplayChange) { if (isFlushing()) { transit.abort(); return true; } if (!mQueuedTransitions.isEmpty()) { // Just add to queue since we already have a queue. queueTransition(transit, onStartCollect, noopIfDuringDisplayChange); Loading Loading @@ -1651,7 +1662,7 @@ class TransitionController { */ @Nullable Transition createAndStartCollecting(int type) { if (mTransitionPlayers.isEmpty()) { if (isFlushing()) { if (Flags.fallbackTransitionPlayer()) { throw new IllegalStateException("Can't create transition while flushing"); } Loading Loading
services/core/java/com/android/server/wm/TransitionController.java +18 −7 Original line number Diff line number Diff line Loading @@ -277,6 +277,10 @@ class TransitionController { mSyncEngine.addOnIdleListener(this::tryStartCollectFromQueue); } private boolean isFlushing() { return mTransitionPlayers.isEmpty(); } void flushRunningTransitions() { // Temporarily clear so that nothing gets started/queued while flushing final ArrayList<TransitionPlayerRecord> temp = new ArrayList<>(mTransitionPlayers); Loading @@ -296,8 +300,10 @@ class TransitionController { mCollectingTransition.abort(); } mRemotePlayer.clear(); for (int i = 0; i < mQueuedTransitions.size(); ++i) { final QueuedTransition queued = mQueuedTransitions.get(i); final ArrayList<QueuedTransition> queuedTransits = new ArrayList<>(mQueuedTransitions); mQueuedTransitions.clear(); for (int i = 0; i < queuedTransits.size(); ++i) { final QueuedTransition queued = queuedTransits.get(i); if (queued.mTransition != null) { queued.mTransition.abort(); } else { Loading @@ -305,7 +311,6 @@ class TransitionController { mSyncEngine.abort(queued.mLegacySync.mSyncId); } } mQueuedTransitions.clear(); mRunningLock.doNotifyLocked(); // Restore the rest of the player stack mTransitionPlayers.addAll(temp); Loading Loading @@ -343,8 +348,7 @@ class TransitionController { if (mCollectingTransition != null) { throw new IllegalStateException("Simultaneous transition collection not supported."); } if (mTransitionPlayers.isEmpty()) { // This means transitions are being "flushed" due to switching players. if (isFlushing()) { transition.abort(); return; } Loading Loading @@ -1193,7 +1197,7 @@ class TransitionController { } void tryStartCollectFromQueue() { if (!isShellTransitionsEnabled()) return; if (isFlushing()) return; if (mQueuedTransitions.isEmpty()) return; // Only need to try the next one since, even when transition can collect in parallel, // they still need to serialize on readiness. Loading Loading @@ -1246,6 +1250,9 @@ class TransitionController { } void moveToPlaying(Transition transition) { if (isFlushing()) { Slog.wtfStack(TAG, "Starting to play a transition while flushing"); } if (transition == mCollectingTransition) { mCollectingTransition = null; if (!mWaitingTransitions.isEmpty()) { Loading Loading @@ -1614,6 +1621,10 @@ class TransitionController { */ boolean startCollectOrQueue(Transition transit, OnStartCollect onStartCollect, boolean noopIfDuringDisplayChange) { if (isFlushing()) { transit.abort(); return true; } if (!mQueuedTransitions.isEmpty()) { // Just add to queue since we already have a queue. queueTransition(transit, onStartCollect, noopIfDuringDisplayChange); Loading Loading @@ -1651,7 +1662,7 @@ class TransitionController { */ @Nullable Transition createAndStartCollecting(int type) { if (mTransitionPlayers.isEmpty()) { if (isFlushing()) { if (Flags.fallbackTransitionPlayer()) { throw new IllegalStateException("Can't create transition while flushing"); } Loading