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
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user