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

Commit c0aa3158 authored by Ikram Gabiyev's avatar Ikram Gabiyev Committed by Android (Google) Code Review
Browse files

Merge "No-op queued transition if display chng populating" into main

parents 60e187e7 ed5424f5
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -709,6 +709,10 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
        return mState == STATE_STARTED;
    }

    boolean hasStarted() {
        return mState >= STATE_STARTED;
    }

    boolean isPlaying() {
        return mState == STATE_PLAYING;
    }
+23 −1
Original line number Diff line number Diff line
@@ -175,6 +175,7 @@ class TransitionController {
        final Transition mTransition;
        final OnStartCollect mOnStartCollect;
        final BLASTSyncEngine.SyncGroup mLegacySync;
        boolean mShouldNoopUponDequeue;

        QueuedTransition(Transition transition, OnStartCollect onStartCollect) {
            mTransition = transition;
@@ -1171,6 +1172,14 @@ class TransitionController {
            // do collect things it can cause problems). So, we need to run it's onCollectStarted
            // immediately.
            queued.mOnStartCollect.onCollectStarted(true /* deferred */);
        } else if (queued.mTransition != null && queued.mShouldNoopUponDequeue) {
            // This transition was queued at a time when the collecting transition might have left
            // the incoming transition's changes stale (e.g. display change transition had not
            // been formally started). So send this transition to Shell before applying any changes
            // to report it as a no-op.
            ProtoLog.w(WmProtoLogGroups.WM_DEBUG_WINDOW_TRANSITIONS_MIN,
                    "Formerly queued #%d force-reported as no-op", queued.mTransition.getSyncId());
            queued.mTransition.setAllReady();
        } else {
            // Post this so that the now-playing transition logic isn't interrupted.
            mAtm.mH.post(() -> {
@@ -1502,7 +1511,20 @@ class TransitionController {

    /** Returns {@code true} if it started collecting, {@code false} if it was queued. */
    private void queueTransition(Transition transit, OnStartCollect onStartCollect) {
        mQueuedTransitions.add(new QueuedTransition(transit, onStartCollect));
        final QueuedTransition queuedTransition = new QueuedTransition(transit, onStartCollect);

        // If we queue a transition while a collecting transition is still not formally started,
        // then check if collecting transition is changing a display
        if (mCollectingTransition != null && !mCollectingTransition.hasStarted()) {
            for (int i = 0; i < mCollectingTransition.mParticipants.size(); i++) {
                if (mCollectingTransition.mParticipants.valueAt(i).asDisplayContent() != null) {
                    queuedTransition.mShouldNoopUponDequeue = true;
                    break;
                }
            }
        }

        mQueuedTransitions.add(queuedTransition);
        ProtoLog.v(WmProtoLogGroups.WM_DEBUG_WINDOW_TRANSITIONS_MIN,
                "Queueing transition: %s", transit);
    }