From 686af717d8dd5700be641c76f73dfdfab63bdf49 Mon Sep 17 00:00:00 2001 From: Eric Sum Date: Mon, 10 Feb 2025 20:59:04 -0800 Subject: Add ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG latency. This measures the delay between steps 2 and 3 in the following sequence: 1) Drag an app's handle while it's in full screen mode towards the middle of the screen to enter desktop mode. 2) Release the drag. 3) Window's bounds start animating to their new position, and the device enters desktop mode. In a past bug, this delay was large. It has since been fixed to be acceptable, but this latency is being tracked to catch any other cases that may be missed and potential future regressoins. Flag: EXEMPT metric change Bug: 381408940 Test: Put tangorpro in HSUM mode: `adb shell cmd user set-system-user-mode-emulation headless` Run `statsd_testdrive 306` and ensure that latency metric is reported. This was done with `enable_desktop_wallpaper_activity_for_system_user` enabled and disabled. The latency was close to 1 second with that flag disabled and ~100 milliseconds with that flag enabled. This is expected. atest DragToDesktopTransitionHandlerTest DesktopTasksControllerTest Change-Id: Ia523734ce44588a52166da7bec979bf7e049d3e3 --- .../android/wm/shell/desktopmode/DesktopTasksController.kt | 12 +++++++++--- .../wm/shell/desktopmode/DragToDesktopTransitionHandler.kt | 5 +++++ 2 files changed, 14 insertions(+), 3 deletions(-) (limited to 'libs') diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt index c42d8dde0093..098108aebf17 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt @@ -71,6 +71,7 @@ import com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELE import com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_SNAP_RESIZE 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.Flags.enableFlexibleSplit import com.android.wm.shell.R @@ -736,9 +737,9 @@ class DesktopTasksController( desktopModeEnterExitTransitionListener?.onEnterDesktopModeTransitionStarted( DRAG_TO_DESKTOP_FINISH_ANIM_DURATION_MS.toInt() ) - transition?.let { - taskIdToMinimize?.let { taskId -> - addPendingMinimizeTransition(it, taskId, MinimizeReason.TASK_LIMIT) + if (transition != null) { + taskIdToMinimize?.let { + addPendingMinimizeTransition(transition, it, MinimizeReason.TASK_LIMIT) } exitResult.asExit()?.runOnTransitionStart?.invoke(transition) if (Flags.enableMultipleDesktopsBackend()) { @@ -753,6 +754,9 @@ class DesktopTasksController( } else { taskRepository.setActiveDesk(displayId = taskInfo.displayId, deskId = deskId) } + } else { + LatencyTracker.getInstance(context) + .onActionCancel(LatencyTracker.ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG) } } @@ -2938,6 +2942,8 @@ class DesktopTasksController( val indicatorType = indicator.updateIndicatorType(inputCoordinates) when (indicatorType) { IndicatorType.TO_DESKTOP_INDICATOR -> { + LatencyTracker.getInstance(context) + .onActionStart(LatencyTracker.ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG) // Start a new jank interaction for the drag release to desktop window animation. interactionJankMonitor.begin( taskSurface, diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt index fc29498291da..c9c5bed5d37f 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt @@ -35,6 +35,7 @@ import com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_HOLD import com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE import com.android.internal.jank.InteractionJankMonitor import com.android.internal.protolog.ProtoLog +import com.android.internal.util.LatencyTracker import com.android.wm.shell.RootTaskDisplayAreaOrganizer import com.android.wm.shell.animation.FloatProperties import com.android.wm.shell.bubbles.BubbleController @@ -558,8 +559,12 @@ sealed class DragToDesktopTransitionHandler( ) // Call finishCallback to merge animation before startTransitionFinishCb is called finishCallback.onTransitionFinished(/* wct= */ null) + LatencyTracker.getInstance(context) + .onActionEnd(LatencyTracker.ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG) animateEndDragToDesktop(startTransaction = startT, startTransitionFinishCb) } else if (isCancelTransition) { + LatencyTracker.getInstance(context) + .onActionCancel(LatencyTracker.ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG) info.changes.forEach { change -> startT.show(change.leash) startTransactionFinishT.show(change.leash) -- cgit v1.2.3-59-g8ed1b