Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f6480e96 authored by Marzia Favaro's avatar Marzia Favaro
Browse files

Transitions CUJ associate to animation thread

Fix: 404190067
Test: record perfetto trace, verify TASK_TO_TASK cuj is now in
wmshell.anim
Test: DefaultTransitionHandlerTest
Test: ShellTransitionTests
Flag: EXEMPT small change to instrumentation only

Change-Id: I679213fdb768eac5366299d224cd2fd1f5081cfa
parent 7dd55ae8
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -766,6 +766,7 @@ public abstract class WMShellBaseModule {
            @ShellMainThread ShellExecutor mainExecutor,
            @ShellMainThread Handler mainHandler,
            @ShellAnimationThread ShellExecutor animExecutor,
            @ShellAnimationThread Handler animHandler,
            RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer,
            HomeTransitionObserver homeTransitionObserver,
            FocusTransitionObserver focusTransitionObserver) {
@@ -775,7 +776,7 @@ public abstract class WMShellBaseModule {
        }
        return new Transitions(context, shellInit, shellCommandHandler, shellController, organizer,
                pool, displayController, displayInsetsController, mainExecutor, mainHandler,
                animExecutor, rootTaskDisplayAreaOrganizer, homeTransitionObserver,
                animExecutor, animHandler, rootTaskDisplayAreaOrganizer, homeTransitionObserver,
                focusTransitionObserver);
    }

+7 −4
Original line number Diff line number Diff line
@@ -133,6 +133,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
    private final DisplayController mDisplayController;
    private final Context mContext;
    private final Handler mMainHandler;
    private final Handler mAnimHandler;
    private final ShellExecutor mMainExecutor;
    private final ShellExecutor mAnimExecutor;
    private final TransitionAnimation mTransitionAnimation;
@@ -171,6 +172,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
            @NonNull TransactionPool transactionPool,
            @NonNull ShellExecutor mainExecutor, @NonNull Handler mainHandler,
            @NonNull ShellExecutor animExecutor,
            @NonNull Handler animHandler,
            @NonNull RootTaskDisplayAreaOrganizer rootTDAOrganizer,
            @NonNull InteractionJankMonitor interactionJankMonitor) {
        mDisplayController = displayController;
@@ -179,6 +181,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
        mMainHandler = mainHandler;
        mMainExecutor = mainExecutor;
        mAnimExecutor = animExecutor;
        mAnimHandler = animHandler;
        mTransitionAnimation = new TransitionAnimation(context, false /* debug */, Transitions.TAG);
        mCurrentUserId = UserHandle.myUserId();
        mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
@@ -349,10 +352,6 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
        mAnimations.put(transition, animations);

        final boolean isTaskTransition = isTaskTransition(info);
        if (isTaskTransition) {
            mInteractionJankMonitor.begin(info.getRoot(0).getLeash(), mContext,
                    mMainHandler, CUJ_DEFAULT_TASK_TO_TASK_ANIMATION);
        }

        final Runnable onAnimFinish = () -> {
            if (!animations.isEmpty()) return;
@@ -642,6 +641,10 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
        // now start animations. they are started on another thread, so we have to post them
        // *after* applying the startTransaction
        mAnimExecutor.execute(() -> {
            if (isTaskTransition) {
                mInteractionJankMonitor.begin(info.getRoot(0).getLeash(), mContext,
                        mAnimHandler, CUJ_DEFAULT_TASK_TO_TASK_ANIMATION);
            }
            for (int i = 0; i < animations.size(); ++i) {
                animations.get(i).start();
            }
+6 −2
Original line number Diff line number Diff line
@@ -215,6 +215,7 @@ public class Transitions implements RemoteCallable<Transitions>,
    private final Context mContext;
    private final ShellExecutor mMainExecutor;
    private final ShellExecutor mAnimExecutor;
    private final Handler mAnimHandler;
    private final TransitionPlayerImpl mPlayerImpl;
    private final DefaultTransitionHandler mDefaultTransitionHandler;
    private final RemoteTransitionHandler mRemoteTransitionHandler;
@@ -319,11 +320,12 @@ public class Transitions implements RemoteCallable<Transitions>,
            @NonNull ShellExecutor mainExecutor,
            @NonNull Handler mainHandler,
            @NonNull ShellExecutor animExecutor,
            @NonNull Handler animHandler,
            @NonNull HomeTransitionObserver homeTransitionObserver,
            @NonNull FocusTransitionObserver focusTransitionObserver) {
        this(context, shellInit, new ShellCommandHandler(), shellController, organizer, pool,
                displayController, displayInsetsController, mainExecutor, mainHandler, animExecutor,
                new RootTaskDisplayAreaOrganizer(mainExecutor, context, shellInit),
                animHandler, new RootTaskDisplayAreaOrganizer(mainExecutor, context, shellInit),
                homeTransitionObserver, focusTransitionObserver);
    }

@@ -338,6 +340,7 @@ public class Transitions implements RemoteCallable<Transitions>,
            @NonNull ShellExecutor mainExecutor,
            @NonNull Handler mainHandler,
            @NonNull ShellExecutor animExecutor,
            @NonNull Handler animHandler,
            @NonNull RootTaskDisplayAreaOrganizer rootTDAOrganizer,
            @NonNull HomeTransitionObserver homeTransitionObserver,
            @NonNull FocusTransitionObserver focusTransitionObserver) {
@@ -345,11 +348,12 @@ public class Transitions implements RemoteCallable<Transitions>,
        mContext = context;
        mMainExecutor = mainExecutor;
        mAnimExecutor = animExecutor;
        mAnimHandler = animHandler;
        mDisplayController = displayController;
        mPlayerImpl = new TransitionPlayerImpl();
        mDefaultTransitionHandler = new DefaultTransitionHandler(context, shellInit,
                displayController, displayInsetsController, pool, mainExecutor, mainHandler,
                animExecutor, rootTDAOrganizer, InteractionJankMonitor.getInstance());
                animExecutor, mAnimHandler, rootTDAOrganizer, InteractionJankMonitor.getInstance());
        mRemoteTransitionHandler = new RemoteTransitionHandler(mMainExecutor);
        mShellCommandHandler = shellCommandHandler;
        mShellController = shellController;
+2 −1
Original line number Diff line number Diff line
@@ -167,6 +167,7 @@ public class StageCoordinatorTests extends ShellTestCase {
    private final TestShellExecutor mMainExecutor = new TestShellExecutor();
    private final ShellExecutor mAnimExecutor = new TestShellExecutor();
    private final Handler mMainHandler = new Handler(Looper.getMainLooper());
    private final Handler mAnimHandler = mock(Handler.class);
    private final DisplayAreaInfo mDisplayAreaInfo = new DisplayAreaInfo(new MockToken().token(),
            DEFAULT_DISPLAY, 0);
    private final ActivityManager.RunningTaskInfo mMainChildTaskInfo =
@@ -630,7 +631,7 @@ public class StageCoordinatorTests extends ShellTestCase {
        ShellInit shellInit = new ShellInit(mMainExecutor);
        final Transitions t = new Transitions(mContext, shellInit, mock(ShellController.class),
                mTaskOrganizer, mTransactionPool, mock(DisplayController.class),
                mDisplayInsetsController, mMainExecutor, mMainHandler, mAnimExecutor,
                mDisplayInsetsController, mMainExecutor, mMainHandler, mAnimExecutor, mAnimHandler,
                mock(HomeTransitionObserver.class), mock(FocusTransitionObserver.class));
        shellInit.init();
        return t;
+2 −1
Original line number Diff line number Diff line
@@ -100,7 +100,8 @@ public class DefaultTransitionHandlerTest extends ShellTestCase {
        mTransitionHandler = new DefaultTransitionHandler(
                mContext, mShellInit, mDisplayController, mDisplayInsetsController,
                mTransactionPool, mMainExecutor, mMainHandler, mAnimExecutor,
                mRootTaskDisplayAreaOrganizer, mock(InteractionJankMonitor.class));
                mock(Handler.class), mRootTaskDisplayAreaOrganizer,
                mock(InteractionJankMonitor.class));
        mShellInit.init();
    }

Loading