summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/com/android/internal/util/LatencyTracker.java29
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java7
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java17
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java15
4 files changed, 57 insertions, 11 deletions
diff --git a/core/java/com/android/internal/util/LatencyTracker.java b/core/java/com/android/internal/util/LatencyTracker.java
index c120e67dfb0d..33794a59fa21 100644
--- a/core/java/com/android/internal/util/LatencyTracker.java
+++ b/core/java/com/android/internal/util/LatencyTracker.java
@@ -23,6 +23,7 @@ import static com.android.internal.util.FrameworkStatsLog.UIACTION_LATENCY_REPOR
import static com.android.internal.util.FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_CHECK_CREDENTIAL;
import static com.android.internal.util.FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_CHECK_CREDENTIAL_UNLOCKED;
import static com.android.internal.util.FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG;
+import static com.android.internal.util.FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_MENU;
import static com.android.internal.util.FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_EXPAND_PANEL;
import static com.android.internal.util.FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_FACE_WAKE_AND_UNLOCK;
import static com.android.internal.util.FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_FINGERPRINT_WAKE_AND_UNLOCK;
@@ -268,14 +269,27 @@ public class LatencyTracker {
public static final int ACTION_SHADE_WINDOW_DISPLAY_CHANGE = 29;
/**
- * Applicable when the user drags a full screen app's handle into the desktop drop zone to enter
- * desktop mode. This measure the time from when the user releases their finger in the drop zone
- * to when the animation for entering desktop mode visually begins. During this period, the
- * home task and app headers for each window are initialized. Both have historically been
- * expensive. See b/381396057 and b/360452034 respectively.
+ * Time it takes for the "enter desktop" mode animation to begin when initiated by dragging the
+ * app's handle into the desktop drop zone.
+ * <p>
+ * This measure the time from when the user releases their finger in the drop zone to when the
+ * animation for entering desktop mode visually begins. During this period, the home task and
+ * app headers for each window are initialized. Both have historically been expensive. See
+ * b/381396057 and b/360452034 respectively.
*/
public static final int ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG = 30;
+ /**
+ * Time it takes for the "enter desktop" mode animation to begin when initiated via the app
+ * handle's menu.
+ * <p>
+ * This measures the time from when the menu option is clicked/tapped to when the animation for
+ * entering desktop mode visually begins. During this period, the home task and app headers for
+ * each window are initialized. Both have historically been expensive. See b/381396057 and
+ * b/360452034 respectively.
+ */
+ public static final int ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_MENU = 31;
+
private static final int[] ACTIONS_ALL = {
ACTION_EXPAND_PANEL,
ACTION_TOGGLE_RECENTS,
@@ -308,6 +322,7 @@ public class LatencyTracker {
ACTION_KEYGUARD_FACE_UNLOCK_TO_HOME,
ACTION_SHADE_WINDOW_DISPLAY_CHANGE,
ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG,
+ ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_MENU,
};
/** @hide */
@@ -343,6 +358,7 @@ public class LatencyTracker {
ACTION_KEYGUARD_FACE_UNLOCK_TO_HOME,
ACTION_SHADE_WINDOW_DISPLAY_CHANGE,
ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG,
+ ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_MENU,
})
@Retention(RetentionPolicy.SOURCE)
public @interface Action {}
@@ -380,6 +396,7 @@ public class LatencyTracker {
UIACTION_LATENCY_REPORTED__ACTION__ACTION_KEYGUARD_FACE_UNLOCK_TO_HOME,
UIACTION_LATENCY_REPORTED__ACTION__ACTION_SHADE_WINDOW_DISPLAY_CHANGE,
UIACTION_LATENCY_REPORTED__ACTION__ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG,
+ UIACTION_LATENCY_REPORTED__ACTION__ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_MENU,
};
private final Object mLock = new Object();
@@ -582,6 +599,8 @@ public class LatencyTracker {
return "ACTION_SHADE_WINDOW_DISPLAY_CHANGE";
case UIACTION_LATENCY_REPORTED__ACTION__ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG:
return "ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG";
+ case UIACTION_LATENCY_REPORTED__ACTION__ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_MENU:
+ return "ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_MENU";
default:
throw new IllegalArgumentException("Invalid action");
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
index 5d5e4d3ec758..59acdc574434 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
@@ -44,6 +44,7 @@ import androidx.annotation.OptIn;
import com.android.internal.jank.InteractionJankMonitor;
import com.android.internal.logging.UiEventLogger;
import com.android.internal.statusbar.IStatusBarService;
+import com.android.internal.util.LatencyTracker;
import com.android.launcher3.icons.IconProvider;
import com.android.window.flags.Flags;
import com.android.wm.shell.RootTaskDisplayAreaOrganizer;
@@ -1074,8 +1075,10 @@ public abstract class WMShellModule {
static EnterDesktopTaskTransitionHandler provideEnterDesktopModeTaskTransitionHandler(
Transitions transitions,
Optional<DesktopTasksLimiter> desktopTasksLimiter,
- InteractionJankMonitor interactionJankMonitor) {
- return new EnterDesktopTaskTransitionHandler(transitions, interactionJankMonitor);
+ InteractionJankMonitor interactionJankMonitor,
+ LatencyTracker latencyTracker) {
+ return new EnterDesktopTaskTransitionHandler(
+ transitions, interactionJankMonitor, latencyTracker);
}
@WMSingleton
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java
index 80e106f3990b..4c1703095ca1 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java
@@ -41,6 +41,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.internal.jank.InteractionJankMonitor;
+import com.android.internal.util.LatencyTracker;
import com.android.wm.shell.shared.desktopmode.DesktopModeTransitionSource;
import com.android.wm.shell.transition.Transitions;
import com.android.wm.shell.windowdecor.OnTaskResizeAnimationListener;
@@ -63,20 +64,25 @@ public class EnterDesktopTaskTransitionHandler implements Transitions.Transition
private final List<IBinder> mPendingTransitionTokens = new ArrayList<>();
private final InteractionJankMonitor mInteractionJankMonitor;
+ private final LatencyTracker mLatencyTracker;
private OnTaskResizeAnimationListener mOnTaskResizeAnimationListener;
public EnterDesktopTaskTransitionHandler(
- Transitions transitions, InteractionJankMonitor interactionJankMonitor) {
- this(transitions, interactionJankMonitor, SurfaceControl.Transaction::new);
+ Transitions transitions,
+ InteractionJankMonitor interactionJankMonitor,
+ LatencyTracker latencyTracker) {
+ this(transitions, interactionJankMonitor, latencyTracker, SurfaceControl.Transaction::new);
}
public EnterDesktopTaskTransitionHandler(
Transitions transitions,
InteractionJankMonitor interactionJankMonitor,
+ LatencyTracker latencyTracker,
Supplier<SurfaceControl.Transaction> supplier) {
mTransitions = transitions;
mInteractionJankMonitor = interactionJankMonitor;
+ mLatencyTracker = latencyTracker;
mTransactionSupplier = supplier;
}
@@ -122,6 +128,13 @@ public class EnterDesktopTaskTransitionHandler implements Transitions.Transition
}
}
+ if (transitionHandled
+ && info.getType()
+ == DesktopModeTransitionTypes
+ .TRANSIT_ENTER_DESKTOP_FROM_APP_HANDLE_MENU_BUTTON) {
+ mLatencyTracker.onActionEnd(LatencyTracker.ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_MENU);
+ }
+
mPendingTransitionTokens.remove(transition);
return transitionHandled;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java
index cf139a008164..d9afd1503db5 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java
@@ -92,6 +92,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.jank.Cuj;
import com.android.internal.jank.InteractionJankMonitor;
import com.android.internal.protolog.ProtoLog;
+import com.android.internal.util.LatencyTracker;
import com.android.window.flags.Flags;
import com.android.wm.shell.R;
import com.android.wm.shell.RootTaskDisplayAreaOrganizer;
@@ -260,6 +261,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
private final DesktopModeCompatPolicy mDesktopModeCompatPolicy;
private final DesktopTilingDecorViewModel mDesktopTilingDecorViewModel;
private final MultiDisplayDragMoveIndicatorController mMultiDisplayDragMoveIndicatorController;
+ private final LatencyTracker mLatencyTracker;
public DesktopModeWindowDecorViewModel(
Context context,
@@ -466,6 +468,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
mDesktopTilingDecorViewModel = desktopTilingDecorViewModel;
mDesktopTasksController.setSnapEventHandler(this);
mMultiDisplayDragMoveIndicatorController = multiDisplayDragMoveIndicatorController;
+ mLatencyTracker = LatencyTracker.getInstance(mContext);
shellInit.addInitCallback(this::onInit, this);
}
@@ -764,11 +767,19 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
final WindowContainerTransaction wct = new WindowContainerTransaction();
mInteractionJankMonitor.begin(decoration.mTaskSurface, mContext, mMainHandler,
CUJ_DESKTOP_MODE_ENTER_MODE_APP_HANDLE_MENU);
+ mLatencyTracker.onActionStart(LatencyTracker.ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_MENU);
// App sometimes draws before the insets from WindowDecoration#relayout have
// been added, so they must be added here
decoration.addCaptionInset(wct);
- mDesktopTasksController.moveTaskToDefaultDeskAndActivate(taskId, wct, source,
- /* remoteTransition= */ null, /* moveToDesktopCallback */ null);
+ if (!mDesktopTasksController.moveTaskToDefaultDeskAndActivate(
+ taskId,
+ wct,
+ source,
+ /* remoteTransition= */ null,
+ /* moveToDesktopCallback= */ null)) {
+ mLatencyTracker.onActionCancel(
+ LatencyTracker.ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_MENU);
+ }
decoration.closeHandleMenu();
if (source == DesktopModeTransitionSource.APP_HANDLE_MENU_BUTTON) {