diff options
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java | 68 |
1 files changed, 61 insertions, 7 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java index 346f21b86e65..7c9cd0862b69 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java @@ -18,6 +18,7 @@ package com.android.wm.shell.transition; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; +import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static android.view.WindowManager.TRANSIT_CHANGE; import static android.view.WindowManager.TRANSIT_CLOSE; import static android.view.WindowManager.TRANSIT_FIRST_CUSTOM; @@ -58,6 +59,7 @@ import android.os.Handler; import android.os.IBinder; import android.os.RemoteException; import android.os.SystemProperties; +import android.os.Trace; import android.provider.Settings; import android.util.ArrayMap; import android.util.Log; @@ -800,8 +802,17 @@ public class Transitions implements RemoteCallable<Transitions>, track.mReadyTransitions.add(active); for (int i = 0; i < mObservers.size(); ++i) { + final boolean useTrace = Trace.isTagEnabled(TRACE_TAG_WINDOW_MANAGER); + if (useTrace) { + Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, + mObservers.get(i).getClass().getSimpleName() + "#onTransitionReady: " + + transitTypeToString(info.getType())); + } mObservers.get(i).onTransitionReady( active.mToken, info, active.mStartT, active.mFinishT); + if (useTrace) { + Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); + } } /* @@ -931,7 +942,7 @@ public class Transitions implements RemoteCallable<Transitions>, onFinish(ready.mToken, null); return; } - playTransition(ready); + playTransitionWithTracing(ready); // Attempt to merge any more queued-up transitions. processReadyQueue(track); return; @@ -1003,6 +1014,18 @@ public class Transitions implements RemoteCallable<Transitions>, processReadyQueue(track); } + private void playTransitionWithTracing(@NonNull ActiveTransition active) { + final boolean useTrace = Trace.isTagEnabled(TRACE_TAG_WINDOW_MANAGER); + if (useTrace) { + Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, + "playTransition: " + transitTypeToString(active.mInfo.getType())); + } + playTransition(active); + if (useTrace) { + Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); + } + } + private void playTransition(@NonNull ActiveTransition active) { ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "Playing animation for %s", active); final var token = active.mToken; @@ -1022,6 +1045,12 @@ public class Transitions implements RemoteCallable<Transitions>, if (consumed) { ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " animated by firstHandler"); mTransitionTracer.logDispatched(active.mInfo.getDebugId(), active.mHandler); + if (Trace.isTagEnabled(TRACE_TAG_WINDOW_MANAGER)) { + Trace.instant(TRACE_TAG_WINDOW_MANAGER, + active.mHandler.getClass().getSimpleName() + + "#startAnimation animated " + + transitTypeToString(active.mInfo.getType())); + } return; } } @@ -1052,6 +1081,12 @@ public class Transitions implements RemoteCallable<Transitions>, ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " animated by %s", mHandlers.get(i)); mTransitionTracer.logDispatched(info.getDebugId(), mHandlers.get(i)); + if (Trace.isTagEnabled(TRACE_TAG_WINDOW_MANAGER)) { + Trace.instant(TRACE_TAG_WINDOW_MANAGER, + mHandlers.get(i).getClass().getSimpleName() + + "#startAnimation animated " + + transitTypeToString(info.getType())); + } return mHandlers.get(i); } } @@ -1059,6 +1094,26 @@ public class Transitions implements RemoteCallable<Transitions>, "This shouldn't happen, maybe the default handler is broken."); } + private Pair<TransitionHandler, WindowContainerTransaction> dispatchRequestWithTracing( + @NonNull IBinder transition, @NonNull TransitionRequestInfo request, + @Nullable TransitionHandler skip) { + final boolean useTrace = Trace.isTagEnabled(TRACE_TAG_WINDOW_MANAGER); + if (useTrace) { + Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, + "dispatchRequest: " + transitTypeToString(request.getType())); + } + Pair<TransitionHandler, WindowContainerTransaction> result = + dispatchRequest(transition, request, skip); + if (useTrace) { + if (result != null) { + Trace.instant(TRACE_TAG_WINDOW_MANAGER, result.first.getClass().getSimpleName() + + "#handleRequest handled " + transitTypeToString(request.getType())); + } + Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); + } + return result; + } + /** * Gives every handler (in order) a chance to handle request until one consumes the transition. * @return the WindowContainerTransaction given by the handler which consumed the transition. @@ -1197,12 +1252,11 @@ public class Transitions implements RemoteCallable<Transitions>, mSleepHandler.handleRequest(transitionToken, request); active.mHandler = mSleepHandler; } else { - for (int i = mHandlers.size() - 1; i >= 0; --i) { - wct = mHandlers.get(i).handleRequest(transitionToken, request); - if (wct != null) { - active.mHandler = mHandlers.get(i); - break; - } + Pair<TransitionHandler, WindowContainerTransaction> requestResult = + dispatchRequestWithTracing(transitionToken, request, /* skip= */ null); + if (requestResult != null) { + active.mHandler = requestResult.first; + wct = requestResult.second; } if (request.getDisplayChange() != null) { TransitionRequestInfo.DisplayChange change = request.getDisplayChange(); |