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

Commit 05c95aa0 authored by Devarshi Bhatt's avatar Devarshi Bhatt
Browse files

Add instrumentation for enter window mode with app handle menu CUJ.

See go/windowing-jank-coverage-one-pager for more details.

Bug: 351956025
Test: perfetto trace(https://screenshot.googleplex.com/5jhRfjqhoyNLend)
Flag: NONE new perfetto instrumentation
Change-Id: I2c3c689a723d7003173d190a29d2f69321f21661
parent bb240837
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -573,8 +573,9 @@ public abstract class WMShellModule {
    @Provides
    static EnterDesktopTaskTransitionHandler provideEnterDesktopModeTaskTransitionHandler(
            Transitions transitions,
            Optional<DesktopTasksLimiter> desktopTasksLimiter) {
        return new EnterDesktopTaskTransitionHandler(transitions);
            Optional<DesktopTasksLimiter> desktopTasksLimiter,
            InteractionJankMonitor interactionJankMonitor) {
        return new EnterDesktopTaskTransitionHandler(transitions, interactionJankMonitor);
    }

    @WMSingleton
+8 −2
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.wm.shell.desktopmode;

import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;

import static com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_ENTER_MODE_APP_HANDLE_MENU;
import static com.android.wm.shell.desktopmode.DesktopModeTransitionTypes.getEnterTransitionType;
import static com.android.wm.shell.desktopmode.DesktopModeTransitionTypes.isEnterDesktopModeTransition;

@@ -39,6 +40,7 @@ import android.window.WindowContainerTransaction;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.internal.jank.InteractionJankMonitor;
import com.android.wm.shell.common.desktopmode.DesktopModeTransitionSource;
import com.android.wm.shell.transition.Transitions;
import com.android.wm.shell.windowdecor.OnTaskResizeAnimationListener;
@@ -60,18 +62,21 @@ public class EnterDesktopTaskTransitionHandler implements Transitions.Transition
    public static final int FREEFORM_ANIMATION_DURATION = 336;

    private final List<IBinder> mPendingTransitionTokens = new ArrayList<>();
    private final InteractionJankMonitor mInteractionJankMonitor;

    private OnTaskResizeAnimationListener mOnTaskResizeAnimationListener;

    public EnterDesktopTaskTransitionHandler(
            Transitions transitions) {
        this(transitions, SurfaceControl.Transaction::new);
            Transitions transitions, InteractionJankMonitor interactionJankMonitor) {
        this(transitions, interactionJankMonitor, SurfaceControl.Transaction::new);
    }

    public EnterDesktopTaskTransitionHandler(
            Transitions transitions,
            InteractionJankMonitor interactionJankMonitor,
            Supplier<SurfaceControl.Transaction> supplier) {
        mTransitions = transitions;
        mInteractionJankMonitor = interactionJankMonitor;
        mTransactionSupplier = supplier;
    }

@@ -175,6 +180,7 @@ public class EnterDesktopTaskTransitionHandler implements Transitions.Transition
                mOnTaskResizeAnimationListener.onAnimationEnd(taskInfo.taskId);
                mTransitions.getMainExecutor().execute(
                        () -> finishCallback.onTransitionFinished(null));
                mInteractionJankMonitor.end(CUJ_DESKTOP_MODE_ENTER_MODE_APP_HANDLE_MENU);
            }
        });
        animator.start();
+3 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import static android.view.MotionEvent.ACTION_MOVE;
import static android.view.MotionEvent.ACTION_UP;
import static android.view.WindowInsets.Type.statusBars;

import static com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_ENTER_MODE_APP_HANDLE_MENU;
import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_BOTTOM_OR_RIGHT;
import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_TOP_OR_LEFT;
import static com.android.wm.shell.compatui.AppCompatUtils.isTopActivityExemptFromDesktopWindowing;
@@ -499,6 +500,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
                final WindowContainerTransaction wct = new WindowContainerTransaction();
                // App sometimes draws before the insets from WindowDecoration#relayout have
                // been added, so they must be added here
                mInteractionJankMonitor.begin(decoration.mTaskSurface, mContext,
                        CUJ_DESKTOP_MODE_ENTER_MODE_APP_HANDLE_MENU);
                mWindowDecorByTaskId.get(mTaskId).addCaptionInset(wct);
                mDesktopTasksController.moveToDesktop(mTaskId, wct,
                        DesktopModeTransitionSource.APP_HANDLE_MENU_BUTTON);