Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1a180ea0 authored by Robin Lee's avatar Robin Lee Committed by Android (Google) Code Review
Browse files

Merge "Remove queued before abort during failsafe flush" into main

parents ccacea99 aa70502f
Loading
Loading
Loading
Loading
+18 −7
Original line number Diff line number Diff line
@@ -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);
@@ -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 {
@@ -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);
@@ -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;
        }
@@ -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.
@@ -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()) {
@@ -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);
@@ -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");
            }