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

Commit 511e1fa5 authored by Daichi Hirono's avatar Daichi Hirono
Browse files

Add jank metric to move to next display shortcut

Bug: 393464194
Test: None
Flag: com.android.window.flags.enable_move_to_next_display_shortcut
Change-Id: Ieb40252d6814d60d32f1c58b9c505493bd84d301
parent d6986170
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -313,8 +313,17 @@ public class Cuj {
     */
    public static final int CUJ_DEFAULT_TASK_TO_TASK_ANIMATION = 128;

    /**
     * Track moving a window to another display in Desktop Windowing mode.
     *
     * <p>Tracking starts when the DesktopModeMoveToDisplayTransitionHandler starts animating the
     * task to move it to another display. This is triggered when the user presses a keyboard
     * shortcut or clicks the menu in the overview. Tracking ends when the animation completes.</p>
     */
    public static final int CUJ_DESKTOP_MODE_MOVE_WINDOW_TO_DISPLAY = 129;

    // When adding a CUJ, update this and make sure to also update CUJ_TO_STATSD_INTERACTION_TYPE.
    @VisibleForTesting static final int LAST_CUJ = CUJ_DEFAULT_TASK_TO_TASK_ANIMATION;
    @VisibleForTesting static final int LAST_CUJ = CUJ_DESKTOP_MODE_MOVE_WINDOW_TO_DISPLAY;

    /** @hide */
    @IntDef({
@@ -434,7 +443,8 @@ public class Cuj {
            CUJ_DESKTOP_MODE_KEYBOARD_QUICK_SWITCH_APP_LAUNCH,
            CUJ_LAUNCHER_WORK_UTILITY_VIEW_EXPAND,
            CUJ_LAUNCHER_WORK_UTILITY_VIEW_SHRINK,
            CUJ_DEFAULT_TASK_TO_TASK_ANIMATION
            CUJ_DEFAULT_TASK_TO_TASK_ANIMATION,
            CUJ_DESKTOP_MODE_MOVE_WINDOW_TO_DISPLAY
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface CujType {}
@@ -817,6 +827,8 @@ public class Cuj {
                return "LAUNCHER_WORK_UTILITY_VIEW_SHRINK";
            case CUJ_DEFAULT_TASK_TO_TASK_ANIMATION:
                return "DEFAULT_TASK_TO_TASK_ANIMATION";
            case CUJ_DESKTOP_MODE_MOVE_WINDOW_TO_DISPLAY:
                return "DESKTOP_MODE_MOVE_WINDOW_TO_DISPLAY";
        }
        return "UNKNOWN";
    }
+9 −2
Original line number Diff line number Diff line
@@ -954,8 +954,15 @@ public abstract class WMShellModule {

    @WMSingleton
    @Provides
    static DesktopModeMoveToDisplayTransitionHandler provideMoveToDisplayTransitionHandler() {
        return new DesktopModeMoveToDisplayTransitionHandler(new SurfaceControl.Transaction());
    static DesktopModeMoveToDisplayTransitionHandler provideMoveToDisplayTransitionHandler(
            InteractionJankMonitor interactionJankMonitor,
            @ShellMainThread Handler shellMainHandler,
            DisplayController displayController) {
        return new DesktopModeMoveToDisplayTransitionHandler(
                new SurfaceControl.Transaction(),
                interactionJankMonitor,
                shellMainHandler,
                displayController);
    }

    @WMSingleton
+22 −2
Original line number Diff line number Diff line
@@ -19,19 +19,26 @@ package com.android.wm.shell.desktopmode
import android.animation.Animator
import android.animation.AnimatorSet
import android.animation.ValueAnimator
import android.os.Handler
import android.os.IBinder
import android.view.Choreographer
import android.view.SurfaceControl
import android.window.TransitionInfo
import android.window.TransitionRequestInfo
import android.window.WindowContainerTransaction
import com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_MOVE_WINDOW_TO_DISPLAY
import com.android.internal.jank.InteractionJankMonitor
import com.android.wm.shell.common.DisplayController
import com.android.wm.shell.shared.animation.Interpolators
import com.android.wm.shell.transition.Transitions
import kotlin.time.Duration.Companion.milliseconds

/** Transition handler for moving a window to a different display. */
class DesktopModeMoveToDisplayTransitionHandler(
    private val animationTransaction: SurfaceControl.Transaction
    private val animationTransaction: SurfaceControl.Transaction,
    private val interactionJankMonitor: InteractionJankMonitor,
    private val shellMainHandler: Handler,
    private val displayController: DisplayController,
) : Transitions.TransitionHandler {

    override fun handleRequest(
@@ -74,18 +81,31 @@ class DesktopModeMoveToDisplayTransitionHandler(
                }
            }
        )

        animator.addListener(
            object : Animator.AnimatorListener {
                override fun onAnimationStart(animation: Animator) = Unit
                override fun onAnimationStart(animation: Animator) {
                    val displayContext =
                        displayController.getDisplayContext(changes[0].endDisplayId)
                    if (displayContext == null) return
                    interactionJankMonitor.begin(
                        changes[0].leash,
                        displayContext,
                        shellMainHandler,
                        CUJ_DESKTOP_MODE_MOVE_WINDOW_TO_DISPLAY,
                    )
                }

                override fun onAnimationEnd(animation: Animator) {
                    finishTransaction.apply()
                    finishCallback.onTransitionFinished(null)
                    interactionJankMonitor.end(CUJ_DESKTOP_MODE_MOVE_WINDOW_TO_DISPLAY)
                }

                override fun onAnimationCancel(animation: Animator) {
                    finishTransaction.apply()
                    finishCallback.onTransitionFinished(null)
                    interactionJankMonitor.cancel(CUJ_DESKTOP_MODE_MOVE_WINDOW_TO_DISPLAY)
                }

                override fun onAnimationRepeat(animation: Animator) = Unit
+2 −1
Original line number Diff line number Diff line
@@ -43,7 +43,8 @@ class DesktopModeMoveToDisplayTransitionHandlerTest : ShellTestCase() {

    @Before
    fun setUp() {
        handler = DesktopModeMoveToDisplayTransitionHandler(StubTransaction())
        handler =
            DesktopModeMoveToDisplayTransitionHandler(StubTransaction(), mock(), mock(), mock())
    }

    @Test