summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Riddle Hsu <riddlehsu@google.com> 2023-05-10 16:58:27 +0800
committer Riddle Hsu <riddlehsu@google.com> 2023-05-10 17:27:09 +0800
commit63e79f72cd15ef4468a2d2f5358e837be6931789 (patch)
tree64d26b654335650d144fd20683708b82a87edeb4
parentf3475fcf118e8069ed6c2123f9c5bc0882d91107 (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.java12
-rw-r--r--services/core/java/com/android/server/wm/TransitionTracer.java6
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) {