Loading libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java +61 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); } } /* Loading Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; } } Loading Loading @@ -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); } } Loading @@ -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. Loading Loading @@ -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(); Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java +61 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); } } /* Loading Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; } } Loading Loading @@ -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); } } Loading @@ -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. Loading Loading @@ -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(); Loading