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

Commit 33b14cb9 authored by Riddle Hsu's avatar Riddle Hsu Committed by Android (Google) Code Review
Browse files

Merge "Log transaction commit time of transition" into main

parents 9707f0bc b84fe7f0
Loading
Loading
Loading
Loading
+17 −11
Original line number Diff line number Diff line
@@ -95,6 +95,7 @@ class BLASTSyncEngine {

    interface TransactionReadyListener {
        void onTransactionReady(int mSyncId, SurfaceControl.Transaction transaction);
        default void onTransactionCommitted() {}
        default void onTransactionCommitTimeout() {}
        default void onReadyTimeout() {}

@@ -224,20 +225,19 @@ class BLASTSyncEngine {
            if (mOrphanTransaction != null) {
                merged.merge(mOrphanTransaction);
            }
            for (WindowContainer wc : mRootMembers) {
                wc.finishSync(merged, this, false /* cancel */);
            }

            final ArraySet<WindowContainer> wcAwaitingCommit = new ArraySet<>();
            for (WindowContainer wc : mRootMembers) {
                wc.waitForSyncTransactionCommit(wcAwaitingCommit);
            }

            final long mergedTxId = merged.getId();
            class CommitCallback implements Runnable {
                final ArraySet<WindowContainer> mWcAwaitingCommit = new ArraySet<>();

                // Can run a second time if the action completes after the timeout.
                boolean ran = false;
                public void onCommitted(SurfaceControl.Transaction t) {
                    mListener.onTransactionCommitted();
                    if (mTraceName != null) {
                        Trace.instant(TRACE_TAG_WINDOW_MANAGER,
                                mSyncName + "#" + mSyncId + "-committed");
                    }
                    // Don't wait to hold the global lock to remove the timeout runnable
                    mHandler.removeCallbacks(this);
                    synchronized (mWm.mGlobalLock) {
@@ -245,11 +245,11 @@ class BLASTSyncEngine {
                            return;
                        }
                        ran = true;
                        for (WindowContainer wc : wcAwaitingCommit) {
                            wc.onSyncTransactionCommitted(t);
                        for (int i = mWcAwaitingCommit.size() - 1; i >= 0; --i) {
                            mWcAwaitingCommit.valueAt(i).onSyncTransactionCommitted(t);
                        }
                        t.apply();
                        wcAwaitingCommit.clear();
                        mWcAwaitingCommit.clear();
                    }
                }

@@ -272,6 +272,12 @@ class BLASTSyncEngine {
                }
            };
            CommitCallback callback = new CommitCallback();
            for (int i = mRootMembers.size() - 1; i >= 0; --i) {
                final WindowContainer<?> wc = mRootMembers.valueAt(i);
                wc.finishSync(merged, this, false /* cancel */);
                wc.waitForSyncTransactionCommit(callback.mWcAwaitingCommit);
            }

            merged.addTransactionCommittedListener(Runnable::run,
                    () -> callback.onCommitted(new SurfaceControl.Transaction()));
            mHandler.postDelayed(callback, BLAST_TIMEOUT_DURATION);
+8 −2
Original line number Diff line number Diff line
@@ -1977,7 +1977,7 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
        } else {
            // No player registered or it's not enabled, so just finish/apply immediately
            if (!mIsPlayerEnabled) {
                mLogger.mSendTimeNs = SystemClock.uptimeNanos();
                mLogger.mSendTimeNs = SystemClock.elapsedRealtimeNanos();
                ProtoLog.v(WmProtoLogGroups.WM_DEBUG_WINDOW_TRANSITIONS,
                        "Apply and finish immediately because player is disabled "
                                + "for transition #%d .", mSyncId);
@@ -2080,6 +2080,12 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
        }
    }

    // Note that this method is not called in WM lock.
    @Override
    public void onTransactionCommitted() {
        mLogger.mTransactionCommitTimeNs = SystemClock.elapsedRealtimeNanos();
    }

    @Override
    public void onTransactionCommitTimeout() {
        if (mCleanupTransaction == null) return;
@@ -3991,7 +3997,7 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
        /** @return true if all tracked subtrees are ready. */
        boolean allReady() {
            ProtoLog.v(WmProtoLogGroups.WM_DEBUG_WINDOW_TRANSITIONS,
                    " allReady query: used=%b " + "override=%b defer=%d states=[%s]", mUsed,
                    " allReady query: used=%b override=%b defer=%d states=[%s]", mUsed,
                    mReadyOverride, mDeferReadyDepth, groupsToString());
            // If the readiness has never been touched, mUsed will be false. We never want to
            // consider a transition ready if nothing has been reported on it.
+5 −1
Original line number Diff line number Diff line
@@ -774,7 +774,7 @@ class TransitionController {
                    "Disabling player for transition #%d because display isn't enabled yet",
                    transition.getSyncId());
            transition.mIsPlayerEnabled = false;
            transition.mLogger.mRequestTimeNs = SystemClock.uptimeNanos();
            transition.mLogger.mRequestTimeNs = SystemClock.elapsedRealtimeNanos();
            mAtm.mH.post(() -> mAtm.mWindowOrganizerController.startTransition(
                    transition.getToken(), null));
            return transition;
@@ -1694,6 +1694,7 @@ class TransitionController {
        long mStartTimeNs;
        long mReadyTimeNs;
        long mSendTimeNs;
        long mTransactionCommitTimeNs;
        long mFinishTimeNs;
        long mAbortTimeNs;
        TransitionRequestInfo mRequest;
@@ -1746,6 +1747,9 @@ class TransitionController {
            sb.append(" started=").append(toMsString(mStartTimeNs - mCreateTimeNs));
            sb.append(" ready=").append(toMsString(mReadyTimeNs - mCreateTimeNs));
            sb.append(" sent=").append(toMsString(mSendTimeNs - mCreateTimeNs));
            if (mTransactionCommitTimeNs != 0) {
                sb.append(" commit=").append(toMsString(mTransactionCommitTimeNs - mSendTimeNs));
            }
            sb.append(" finished=").append(toMsString(mFinishTimeNs - mCreateTimeNs));
            return sb.toString();
        }