diff options
| author | 2023-05-10 16:58:27 +0800 | |
|---|---|---|
| committer | 2023-05-10 17:27:09 +0800 | |
| commit | 63e79f72cd15ef4468a2d2f5358e837be6931789 (patch) | |
| tree | 64d26b654335650d144fd20683708b82a87edeb4 | |
| parent | f3475fcf118e8069ed6c2123f9c5bc0882d91107 (diff) | |
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
| -rw-r--r-- | services/core/java/com/android/server/wm/Transition.java | 12 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/TransitionTracer.java | 6 |
2 files changed, 12 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index bfd0d96a04ab..5e60e92150a9 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -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(); diff --git a/services/core/java/com/android/server/wm/TransitionTracer.java b/services/core/java/com/android/server/wm/TransitionTracer.java index afc14926f63c..a002fba0877e 100644 --- a/services/core/java/com/android/server/wm/TransitionTracer.java +++ b/services/core/java/com/android/server/wm/TransitionTracer.java @@ -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) { |