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

Commit 63e79f72 authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Reduce operations before dispatching transition ready

This avoids the latency by logging for TransitionTracer before
notifying shell that the transition is ready.

Also use calculated info for tracer to avoid overhead such as
getChangeFlags may need to traverse the window hierarchy again.

Bug: 275508603
Test: Check trace that the start of Transition's "playing"
      can appear earlier in "onTransactionReady".
Change-Id: I2c21d3e4f8bfe18e43c14f84428d13a6758c7b8d
parent f3475fcf
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -1473,7 +1473,6 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
                        "Calling onTransitionReady: %s", info);
                mLogger.mSendTimeNs = SystemClock.elapsedRealtimeNanos();
                mLogger.mInfo = info;
                mController.mTransitionTracer.logSentTransition(this, mTargets, info);
                mController.getTransitionPlayer().onTransitionReady(
                        mToken, info, transaction, mFinishTransaction);
                if (Trace.isTagEnabled(TRACE_TAG_WINDOW_MANAGER)) {
@@ -1501,13 +1500,17 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
            }
            postCleanupOnFailure();
        }
        mController.mLoggerHandler.post(mLogger::logOnSend);
        mOverrideOptions = null;

        reportStartReasonsToLogger();

        // Since we created root-leash but no longer reference it from core, release it now
        info.releaseAnimSurfaces();

        mController.mLoggerHandler.post(mLogger::logOnSend);
        if (mLogger.mInfo != null) {
            mController.mTransitionTracer.logSentTransition(this, mTargets, info);
        }
    }

    /**
@@ -2245,6 +2248,7 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
            info.mReadyMode = change.getMode();
            change.setStartAbsBounds(info.mAbsoluteBounds);
            change.setFlags(info.getChangeFlags(target));
            info.mReadyFlags = change.getFlags();
            change.setDisplayId(info.mDisplayId, getDisplayId(target));

            final Task task = target.asTask();
@@ -2628,6 +2632,10 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
        @TransitionInfo.TransitionMode
        int mReadyMode;

        /** The flags which is set when the transition is ready. */
        @TransitionInfo.ChangeFlags
        int mReadyFlags;

        ChangeInfo(@NonNull WindowContainer origState) {
            mContainer = origState;
            mVisible = origState.isVisibleRequested();
+2 −4
Original line number Diff line number Diff line
@@ -144,8 +144,6 @@ public class TransitionTracer {

            final Transition.ChangeInfo target = targets.get(i);

            final int mode = target.getTransitMode(target.mContainer);
            final int flags = target.getChangeFlags(target.mContainer);
            final int layerId;
            if (target.mContainer.mSurfaceControl.isValid()) {
                layerId = target.mContainer.mSurfaceControl.getLayerId();
@@ -153,8 +151,8 @@ public class TransitionTracer {
                layerId = -1;
            }

            outputStream.write(com.android.server.wm.shell.Target.MODE, mode);
            outputStream.write(com.android.server.wm.shell.Target.FLAGS, flags);
            outputStream.write(com.android.server.wm.shell.Target.MODE, target.mReadyMode);
            outputStream.write(com.android.server.wm.shell.Target.FLAGS, target.mReadyFlags);
            outputStream.write(com.android.server.wm.shell.Target.LAYER_ID, layerId);

            if (mActiveTracingEnabled) {