Loading core/java/com/android/internal/jank/Cuj.java +23 −2 Original line number Diff line number Diff line Loading @@ -218,8 +218,25 @@ public class Cuj { */ public static final int CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE = 117; /** * Track attempting to snap resize a desktop window via button or drag. * * <p>CUJ has 3 different tags: * <ul> * <li>snap resizing resizable apps via maximize menu button: maximize_menu_resizable </li> * <li>snap resizing resizable via drag: drag_resizable </li> * <li>snap resizing non-resizable via drag: drag_non_resizable </li> * </ul> * * <p>For non-resizable apps, the desktop window won't actually be resized, instead will return * to its pre-dragged position. Attempting to snap resize a non-resizable app via the * maximize menu will just result in no change, and a toast explaining the app can't be resized. * */ public static final int CUJ_DESKTOP_MODE_SNAP_RESIZE = 118; // When adding a CUJ, update this and make sure to also update CUJ_TO_STATSD_INTERACTION_TYPE. @VisibleForTesting static final int LAST_CUJ = CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE; @VisibleForTesting static final int LAST_CUJ = CUJ_DESKTOP_MODE_SNAP_RESIZE; /** @hide */ @IntDef({ Loading Loading @@ -328,7 +345,8 @@ public class Cuj { CUJ_LAUNCHER_KEYBOARD_QUICK_SWITCH_CLOSE, CUJ_LAUNCHER_KEYBOARD_QUICK_SWITCH_APP_LAUNCH, CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE, CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE, CUJ_DESKTOP_MODE_SNAP_RESIZE }) @Retention(RetentionPolicy.SOURCE) public @interface CujType {} Loading Loading @@ -448,6 +466,7 @@ public class Cuj { CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LAUNCHER_KEYBOARD_QUICK_SWITCH_APP_LAUNCH] = FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_KEYBOARD_QUICK_SWITCH_APP_LAUNCH; CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE] = FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE; CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE] = FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE; CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_DESKTOP_MODE_SNAP_RESIZE] = FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__DESKTOP_MODE_SNAP_RESIZE; } private Cuj() { Loading Loading @@ -678,6 +697,8 @@ public class Cuj { return "DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE"; case CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE: return "DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE"; case CUJ_DESKTOP_MODE_SNAP_RESIZE: return "CUJ_DESKTOP_MODE_SNAP_RESIZE"; } return "UNKNOWN"; } Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +8 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ import androidx.annotation.BinderThread import com.android.internal.annotations.VisibleForTesting 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.Cuj.CUJ_DESKTOP_MODE_SNAP_RESIZE import com.android.internal.jank.InteractionJankMonitor import com.android.internal.policy.ScreenDecorationsUtils import com.android.internal.protolog.ProtoLog Loading Loading @@ -693,6 +694,10 @@ class DesktopTasksController( ) { releaseVisualIndicator() if (!taskInfo.isResizeable && DesktopModeFlags.DISABLE_SNAP_RESIZE.isEnabled(context)) { interactionJankMonitor.begin( taskSurface, context, CUJ_DESKTOP_MODE_SNAP_RESIZE, "drag_non_resizable" ) // reposition non-resizable app back to its original position before being dragged returnToDragStartAnimator.start( taskInfo.taskId, Loading @@ -701,6 +706,9 @@ class DesktopTasksController( endBounds = dragStartBounds ) } else { interactionJankMonitor.begin( taskSurface, context, CUJ_DESKTOP_MODE_SNAP_RESIZE, "drag_resizable" ) snapToHalfScreen(taskInfo, currentDragBounds, position) } } Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/ReturnToDragStartAnimator.kt +2 −1 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.graphics.Rect import android.view.SurfaceControl import android.widget.Toast import androidx.core.animation.addListener import com.android.internal.jank.Cuj import com.android.internal.jank.InteractionJankMonitor import com.android.wm.shell.R import com.android.wm.shell.windowdecor.OnTaskRepositionAnimationListener Loading Loading @@ -85,7 +86,7 @@ class ReturnToDragStartAnimator( R.string.desktop_mode_non_resizable_snap_text, Toast.LENGTH_SHORT ).show() // TODO(b/339582583) - add Jank CUJ using interactionJankMonitor interactionJankMonitor.end(Cuj.CUJ_DESKTOP_MODE_SNAP_RESIZE) } ) addUpdateListener { anim -> Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/ToggleResizeDesktopTaskTransitionHandler.kt +2 −2 Original line number Diff line number Diff line Loading @@ -117,8 +117,8 @@ class ToggleResizeDesktopTaskTransitionHandler( finishCallback.onTransitionFinished(null) initialBounds = null boundsAnimator = null interactionJankMonitor.end( Cuj.CUJ_DESKTOP_MODE_MAXIMIZE_WINDOW) interactionJankMonitor.end(Cuj.CUJ_DESKTOP_MODE_MAXIMIZE_WINDOW) interactionJankMonitor.end(Cuj.CUJ_DESKTOP_MODE_SNAP_RESIZE) } ) addUpdateListener { anim -> Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java +2 −0 Original line number Diff line number Diff line Loading @@ -480,6 +480,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { Toast.makeText(mContext, R.string.desktop_mode_non_resizable_snap_text, Toast.LENGTH_SHORT).show(); } else { mInteractionJankMonitor.begin(decoration.mTaskSurface, mContext, Cuj.CUJ_DESKTOP_MODE_SNAP_RESIZE, "maximize_menu_resizable"); mDesktopTasksController.snapToHalfScreen(decoration.mTaskInfo, decoration.mTaskInfo.configuration.windowConfiguration.getBounds(), left ? SnapPosition.LEFT : SnapPosition.RIGHT); Loading Loading
core/java/com/android/internal/jank/Cuj.java +23 −2 Original line number Diff line number Diff line Loading @@ -218,8 +218,25 @@ public class Cuj { */ public static final int CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE = 117; /** * Track attempting to snap resize a desktop window via button or drag. * * <p>CUJ has 3 different tags: * <ul> * <li>snap resizing resizable apps via maximize menu button: maximize_menu_resizable </li> * <li>snap resizing resizable via drag: drag_resizable </li> * <li>snap resizing non-resizable via drag: drag_non_resizable </li> * </ul> * * <p>For non-resizable apps, the desktop window won't actually be resized, instead will return * to its pre-dragged position. Attempting to snap resize a non-resizable app via the * maximize menu will just result in no change, and a toast explaining the app can't be resized. * */ public static final int CUJ_DESKTOP_MODE_SNAP_RESIZE = 118; // When adding a CUJ, update this and make sure to also update CUJ_TO_STATSD_INTERACTION_TYPE. @VisibleForTesting static final int LAST_CUJ = CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE; @VisibleForTesting static final int LAST_CUJ = CUJ_DESKTOP_MODE_SNAP_RESIZE; /** @hide */ @IntDef({ Loading Loading @@ -328,7 +345,8 @@ public class Cuj { CUJ_LAUNCHER_KEYBOARD_QUICK_SWITCH_CLOSE, CUJ_LAUNCHER_KEYBOARD_QUICK_SWITCH_APP_LAUNCH, CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE, CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE, CUJ_DESKTOP_MODE_SNAP_RESIZE }) @Retention(RetentionPolicy.SOURCE) public @interface CujType {} Loading Loading @@ -448,6 +466,7 @@ public class Cuj { CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LAUNCHER_KEYBOARD_QUICK_SWITCH_APP_LAUNCH] = FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_KEYBOARD_QUICK_SWITCH_APP_LAUNCH; CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE] = FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE; CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE] = FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE; CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_DESKTOP_MODE_SNAP_RESIZE] = FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__DESKTOP_MODE_SNAP_RESIZE; } private Cuj() { Loading Loading @@ -678,6 +697,8 @@ public class Cuj { return "DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE"; case CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE: return "DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE"; case CUJ_DESKTOP_MODE_SNAP_RESIZE: return "CUJ_DESKTOP_MODE_SNAP_RESIZE"; } return "UNKNOWN"; } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +8 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ import androidx.annotation.BinderThread import com.android.internal.annotations.VisibleForTesting 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.Cuj.CUJ_DESKTOP_MODE_SNAP_RESIZE import com.android.internal.jank.InteractionJankMonitor import com.android.internal.policy.ScreenDecorationsUtils import com.android.internal.protolog.ProtoLog Loading Loading @@ -693,6 +694,10 @@ class DesktopTasksController( ) { releaseVisualIndicator() if (!taskInfo.isResizeable && DesktopModeFlags.DISABLE_SNAP_RESIZE.isEnabled(context)) { interactionJankMonitor.begin( taskSurface, context, CUJ_DESKTOP_MODE_SNAP_RESIZE, "drag_non_resizable" ) // reposition non-resizable app back to its original position before being dragged returnToDragStartAnimator.start( taskInfo.taskId, Loading @@ -701,6 +706,9 @@ class DesktopTasksController( endBounds = dragStartBounds ) } else { interactionJankMonitor.begin( taskSurface, context, CUJ_DESKTOP_MODE_SNAP_RESIZE, "drag_resizable" ) snapToHalfScreen(taskInfo, currentDragBounds, position) } } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/ReturnToDragStartAnimator.kt +2 −1 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.graphics.Rect import android.view.SurfaceControl import android.widget.Toast import androidx.core.animation.addListener import com.android.internal.jank.Cuj import com.android.internal.jank.InteractionJankMonitor import com.android.wm.shell.R import com.android.wm.shell.windowdecor.OnTaskRepositionAnimationListener Loading Loading @@ -85,7 +86,7 @@ class ReturnToDragStartAnimator( R.string.desktop_mode_non_resizable_snap_text, Toast.LENGTH_SHORT ).show() // TODO(b/339582583) - add Jank CUJ using interactionJankMonitor interactionJankMonitor.end(Cuj.CUJ_DESKTOP_MODE_SNAP_RESIZE) } ) addUpdateListener { anim -> Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/ToggleResizeDesktopTaskTransitionHandler.kt +2 −2 Original line number Diff line number Diff line Loading @@ -117,8 +117,8 @@ class ToggleResizeDesktopTaskTransitionHandler( finishCallback.onTransitionFinished(null) initialBounds = null boundsAnimator = null interactionJankMonitor.end( Cuj.CUJ_DESKTOP_MODE_MAXIMIZE_WINDOW) interactionJankMonitor.end(Cuj.CUJ_DESKTOP_MODE_MAXIMIZE_WINDOW) interactionJankMonitor.end(Cuj.CUJ_DESKTOP_MODE_SNAP_RESIZE) } ) addUpdateListener { anim -> Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java +2 −0 Original line number Diff line number Diff line Loading @@ -480,6 +480,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { Toast.makeText(mContext, R.string.desktop_mode_non_resizable_snap_text, Toast.LENGTH_SHORT).show(); } else { mInteractionJankMonitor.begin(decoration.mTaskSurface, mContext, Cuj.CUJ_DESKTOP_MODE_SNAP_RESIZE, "maximize_menu_resizable"); mDesktopTasksController.snapToHalfScreen(decoration.mTaskInfo, decoration.mTaskInfo.configuration.windowConfiguration.getBounds(), left ? SnapPosition.LEFT : SnapPosition.RIGHT); Loading