diff options
3 files changed, 23 insertions, 2 deletions
diff --git a/core/proto/android/server/windowmanagertransitiontrace.proto b/core/proto/android/server/windowmanagertransitiontrace.proto index 9429127b2f6e..4161f6554fb6 100644 --- a/core/proto/android/server/windowmanagertransitiontrace.proto +++ b/core/proto/android/server/windowmanagertransitiontrace.proto @@ -58,6 +58,8 @@ message Transition { State state = 5; int32 flags = 6; repeated ChangeInfo change = 7; + uint64 start_transaction_id = 8; + uint64 finish_transaction_id = 9; } message ChangeInfo { diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index d8404a79e794..3c0cac0079e8 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -305,6 +305,16 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe return mFlags; } + @VisibleForTesting + SurfaceControl.Transaction getStartTransaction() { + return mStartTransaction; + } + + @VisibleForTesting + SurfaceControl.Transaction getFinishTransaction() { + return mFinishTransaction; + } + /** Starts collecting phase. Once this starts, all relevant surface operations are sync. */ void startCollecting(long timeoutMs) { if (mState != STATE_PENDING) { @@ -771,6 +781,8 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe } mState = STATE_PLAYING; + mStartTransaction = transaction; + mFinishTransaction = mController.mAtm.mWindowManager.mTransactionFactory.get(); mController.moveToPlaying(this); if (dc.isKeyguardLocked()) { @@ -856,8 +868,6 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe if (controller != null && mTargets.contains(dc)) { controller.setupStartTransaction(transaction); } - mStartTransaction = transaction; - mFinishTransaction = mController.mAtm.mWindowManager.mTransactionFactory.get(); buildFinishTransaction(mFinishTransaction, info.getRootLeash()); if (mController.getTransitionPlayer() != null) { mController.dispatchLegacyAppTransitionStarting(info); diff --git a/services/core/java/com/android/server/wm/TransitionTracer.java b/services/core/java/com/android/server/wm/TransitionTracer.java index 192b9abc62a7..b1951e038177 100644 --- a/services/core/java/com/android/server/wm/TransitionTracer.java +++ b/services/core/java/com/android/server/wm/TransitionTracer.java @@ -23,8 +23,10 @@ import static com.android.server.wm.shell.ChangeInfo.HAS_CHANGED; import static com.android.server.wm.shell.ChangeInfo.TRANSIT_MODE; import static com.android.server.wm.shell.ChangeInfo.WINDOW_IDENTIFIER; import static com.android.server.wm.shell.Transition.CHANGE; +import static com.android.server.wm.shell.Transition.FINISH_TRANSACTION_ID; import static com.android.server.wm.shell.Transition.FLAGS; import static com.android.server.wm.shell.Transition.ID; +import static com.android.server.wm.shell.Transition.START_TRANSACTION_ID; import static com.android.server.wm.shell.Transition.STATE; import static com.android.server.wm.shell.Transition.TIMESTAMP; import static com.android.server.wm.shell.Transition.TRANSITION_TYPE; @@ -82,6 +84,13 @@ public class TransitionTracer { outputStream.write(TRANSITION_TYPE, transition.mType); outputStream.write(STATE, transition.getState()); outputStream.write(FLAGS, transition.getFlags()); + if (transition.getStartTransaction() != null) { + outputStream.write(START_TRANSACTION_ID, transition.getStartTransaction().getId()); + } + if (transition.getFinishTransaction() != null) { + outputStream.write(FINISH_TRANSACTION_ID, + transition.getFinishTransaction().getId()); + } for (int i = 0; i < transition.mChanges.size(); ++i) { final WindowContainer window = transition.mChanges.keyAt(i); |