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

Commit e373737f authored by Vineeth Bhende's avatar Vineeth Bhende Committed by Android (Google) Code Review
Browse files

Merge "Add CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE instrumentation" into main

parents e09c2cd3 cdad2753
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -320,9 +320,19 @@ public abstract class WMShellModule {
            WindowDecorViewModel windowDecorViewModel,
            DisplayController displayController,
            @ShellMainThread ShellExecutor mainExecutor,
            @ShellAnimationThread ShellExecutor animExecutor) {
        return new FreeformTaskTransitionHandler(shellInit, transitions, context,
                windowDecorViewModel, displayController, mainExecutor, animExecutor);
            @ShellAnimationThread ShellExecutor animExecutor,
            @DynamicOverride DesktopModeTaskRepository desktopModeTaskRepository,
            InteractionJankMonitor interactionJankMonitor) {
        return new FreeformTaskTransitionHandler(
                shellInit,
                transitions,
                context,
                windowDecorViewModel,
                displayController,
                mainExecutor,
                animExecutor,
                desktopModeTaskRepository,
                interactionJankMonitor);
    }

    @WMSingleton
+5 −0
Original line number Diff line number Diff line
@@ -194,6 +194,11 @@ class DesktopModeTaskRepository {
    fun getActiveNonMinimizedOrderedTasks(displayId: Int): List<Int> =
        getFreeformTasksInZOrder(displayId).filter { !isMinimizedTask(it) }

    /** Returns the count of active non-minimized tasks for [displayId]. */
    fun getActiveNonMinimizedTaskCount(displayId: Int): Int {
        return getActiveTasks(displayId).count { !isMinimizedTask(it) }
    }

    /** Returns a list of freeform tasks, ordered from top-bottom (top at index 0). */
    fun getFreeformTasksInZOrder(displayId: Int): ArrayList<Int> =
        ArrayList(desktopTaskDataByDisplayId[displayId]?.freeformTasksInZOrder ?: emptyList())
+26 −8
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.wm.shell.freeform;

import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
@@ -37,8 +38,10 @@ import android.window.WindowContainerTransaction;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.internal.jank.InteractionJankMonitor;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.desktopmode.DesktopModeTaskRepository;
import com.android.wm.shell.sysui.ShellInit;
import com.android.wm.shell.transition.Transitions;
import com.android.wm.shell.windowdecor.WindowDecorViewModel;
@@ -56,7 +59,9 @@ public class FreeformTaskTransitionHandler
    private final Context mContext;
    private final Transitions mTransitions;
    private final WindowDecorViewModel mWindowDecorViewModel;
    private final DesktopModeTaskRepository mDesktopModeTaskRepository;
    private final DisplayController mDisplayController;
    private final InteractionJankMonitor mInteractionJankMonitor;
    private final ShellExecutor mMainExecutor;
    private final ShellExecutor mAnimExecutor;

@@ -71,11 +76,15 @@ public class FreeformTaskTransitionHandler
            WindowDecorViewModel windowDecorViewModel,
            DisplayController displayController,
            ShellExecutor mainExecutor,
            ShellExecutor animExecutor) {
            ShellExecutor animExecutor,
            DesktopModeTaskRepository desktopModeTaskRepository,
            InteractionJankMonitor interactionJankMonitor) {
        mTransitions = transitions;
        mContext = context;
        mWindowDecorViewModel = windowDecorViewModel;
        mDesktopModeTaskRepository = desktopModeTaskRepository;
        mDisplayController = displayController;
        mInteractionJankMonitor = interactionJankMonitor;
        mMainExecutor = mainExecutor;
        mAnimExecutor = animExecutor;
        if (Transitions.ENABLE_SHELL_TRANSITIONS) {
@@ -238,11 +247,20 @@ public class FreeformTaskTransitionHandler
                    startBounds.top + (animation.getAnimatedFraction() * screenHeight));
            t.apply();
        });
        animator.addListener(new AnimatorListenerAdapter() {
        if (mDesktopModeTaskRepository.getActiveNonMinimizedTaskCount(
                        change.getTaskInfo().displayId) == 1) {
            // Starting the jank trace if closing the last window in desktop mode.
            mInteractionJankMonitor.begin(
                    sc, mContext, CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE);
        }
        animator.addListener(
                new AnimatorListenerAdapter() {
                    @Override
                    public void onAnimationEnd(Animator animation) {
                        animations.remove(animator);
                        onAnimFinish.run();
                        mInteractionJankMonitor.end(
                                CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE);
                    }
                });
        animations.add(animator);