Loading core/java/com/android/internal/jank/InteractionJankMonitor.java +19 −1 Original line number Diff line number Diff line Loading @@ -61,6 +61,9 @@ import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_IN import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_SCROLL_FLING; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLASHSCREEN_AVD; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLASHSCREEN_EXIT_ANIM; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLIT_SCREEN_ENTER; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLIT_SCREEN_EXIT; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLIT_SCREEN_RESIZE; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__STATUS_BAR_APP_LAUNCH_FROM_CALL_CHIP; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_LOADING_SCREEN_FOR_STATUS; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_LOADING_TO_NEXT_FLOW; Loading Loading @@ -184,6 +187,9 @@ public class InteractionJankMonitor { public static final int CUJ_SUW_SHOW_FUNCTION_SCREEN_WITH_ACTIONS = 46; public static final int CUJ_SUW_LOADING_TO_NEXT_FLOW = 47; public static final int CUJ_SUW_LOADING_SCREEN_FOR_STATUS = 48; public static final int CUJ_SPLIT_SCREEN_ENTER = 49; public static final int CUJ_SPLIT_SCREEN_EXIT = 50; public static final int CUJ_SPLIT_SCREEN_RESIZE = 51; private static final int NO_STATSD_LOGGING = -1; Loading Loading @@ -241,6 +247,9 @@ public class InteractionJankMonitor { UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_SHOW_FUNCTION_SCREEN_WITH_ACTIONS, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_LOADING_TO_NEXT_FLOW, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_LOADING_SCREEN_FOR_STATUS, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLIT_SCREEN_ENTER, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLIT_SCREEN_EXIT, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLIT_SCREEN_RESIZE, }; private static volatile InteractionJankMonitor sInstance; Loading Loading @@ -309,7 +318,10 @@ public class InteractionJankMonitor { CUJ_SUW_LOADING_TO_SHOW_INFO_WITH_ACTIONS, CUJ_SUW_SHOW_FUNCTION_SCREEN_WITH_ACTIONS, CUJ_SUW_LOADING_TO_NEXT_FLOW, CUJ_SUW_LOADING_SCREEN_FOR_STATUS CUJ_SUW_LOADING_SCREEN_FOR_STATUS, CUJ_SPLIT_SCREEN_ENTER, CUJ_SPLIT_SCREEN_EXIT, CUJ_SPLIT_SCREEN_RESIZE }) @Retention(RetentionPolicy.SOURCE) public @interface CujType { Loading Loading @@ -726,6 +738,12 @@ public class InteractionJankMonitor { return "SUW_LOADING_TO_NEXT_FLOW"; case CUJ_SUW_LOADING_SCREEN_FOR_STATUS: return "SUW_LOADING_SCREEN_FOR_STATUS"; case CUJ_SPLIT_SCREEN_ENTER: return "SPLIT_SCREEN_ENTER"; case CUJ_SPLIT_SCREEN_EXIT: return "SPLIT_SCREEN_EXIT"; case CUJ_SPLIT_SCREEN_RESIZE: return "CUJ_SPLIT_SCREEN_RESIZE"; } return "UNKNOWN"; } Loading libs/WindowManager/Shell/src/com/android/wm/shell/common/InteractionJankMonitorUtils.java 0 → 100644 +63 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.wm.shell.common; import android.annotation.NonNull; import android.annotation.Nullable; import android.text.TextUtils; import android.view.View; import com.android.internal.jank.InteractionJankMonitor; /** Utils class for simplfy InteractionJank trancing call */ public class InteractionJankMonitorUtils { /** * Begin a trace session. * * @param cujType the specific {@link InteractionJankMonitor.CujType}. * @param view the view to trace * @param tag the tag to distinguish different flow of same type CUJ. */ public static void beginTracing(@InteractionJankMonitor.CujType int cujType, @NonNull View view, @Nullable String tag) { final InteractionJankMonitor.Configuration.Builder builder = InteractionJankMonitor.Configuration.Builder.withView(cujType, view); if (!TextUtils.isEmpty(tag)) { builder.setTag(tag); } InteractionJankMonitor.getInstance().begin(builder); } /** * End a trace session. * * @param cujType the specific {@link InteractionJankMonitor.CujType}. */ public static void endTracing(@InteractionJankMonitor.CujType int cujType) { InteractionJankMonitor.getInstance().end(cujType); } /** * Cancel the trace session. * * @param cujType the specific {@link InteractionJankMonitor.CujType}. */ public static void cancelTracing(@InteractionJankMonitor.CujType int cujType) { InteractionJankMonitor.getInstance().cancel(cujType); } } libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +6 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ import android.window.WindowContainerTransaction; import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.policy.DividerSnapAlgorithm; import com.android.internal.policy.DockedDividerUtils; import com.android.wm.shell.R; Loading @@ -62,6 +63,7 @@ import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.animation.Interpolators; import com.android.wm.shell.common.DisplayImeController; import com.android.wm.shell.common.DisplayInsetsController; import com.android.wm.shell.common.InteractionJankMonitorUtils; import com.android.wm.shell.common.split.SplitScreenConstants.SplitPosition; import java.io.PrintWriter; Loading Loading @@ -434,6 +436,8 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange mSplitLayoutHandler.onLayoutSizeChanged(this); return; } InteractionJankMonitorUtils.beginTracing(InteractionJankMonitor.CUJ_SPLIT_SCREEN_RESIZE, mSplitWindowManager.getDividerView(), "Divider fling"); ValueAnimator animator = ValueAnimator .ofInt(from, to) .setDuration(250); Loading @@ -446,6 +450,8 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange if (flingFinishedCallback != null) { flingFinishedCallback.run(); } InteractionJankMonitorUtils.endTracing( InteractionJankMonitor.CUJ_SPLIT_SCREEN_RESIZE); } @Override Loading libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitWindowManager.java +5 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.view.LayoutInflater; import android.view.SurfaceControl; import android.view.SurfaceControlViewHost; import android.view.SurfaceSession; import android.view.View; import android.view.WindowManager; import android.view.WindowlessWindowManager; Loading Loading @@ -170,6 +171,10 @@ public final class SplitWindowManager extends WindowlessWindowManager { mDividerView.setInteractive(interactive); } View getDividerView() { return mDividerView; } /** * Gets {@link SurfaceControl} of the surface holding divider view. @return {@code null} if not * feasible. Loading packages/SystemUI/shared/src/com/android/systemui/shared/system/InteractionJankMonitorWrapper.java +20 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.shared.system; import android.annotation.IntDef; import android.os.Build; import android.text.TextUtils; import android.view.View; import com.android.internal.jank.InteractionJankMonitor; Loading Loading @@ -46,6 +47,8 @@ public final class InteractionJankMonitorWrapper { InteractionJankMonitor.CUJ_LAUNCHER_ALL_APPS_SCROLL; public static final int CUJ_APP_LAUNCH_FROM_WIDGET = InteractionJankMonitor.CUJ_LAUNCHER_APP_LAUNCH_FROM_WIDGET; public static final int CUJ_SPLIT_SCREEN_ENTER = InteractionJankMonitor.CUJ_SPLIT_SCREEN_ENTER; @IntDef({ CUJ_APP_LAUNCH_FROM_RECENTS, Loading Loading @@ -85,6 +88,23 @@ public final class InteractionJankMonitorWrapper { InteractionJankMonitor.getInstance().begin(builder); } /** * Begin a trace session. * * @param v an attached view. * @param cujType the specific {@link InteractionJankMonitor.CujType}. * @param tag the tag to distinguish different flow of same type CUJ. */ public static void begin(View v, @CujType int cujType, String tag) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) return; Configuration.Builder builder = Configuration.Builder.withView(cujType, v); if (!TextUtils.isEmpty(tag)) { builder.setTag(tag); } InteractionJankMonitor.getInstance().begin(builder); } /** * End a trace session. * Loading Loading
core/java/com/android/internal/jank/InteractionJankMonitor.java +19 −1 Original line number Diff line number Diff line Loading @@ -61,6 +61,9 @@ import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_IN import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_SCROLL_FLING; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLASHSCREEN_AVD; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLASHSCREEN_EXIT_ANIM; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLIT_SCREEN_ENTER; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLIT_SCREEN_EXIT; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLIT_SCREEN_RESIZE; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__STATUS_BAR_APP_LAUNCH_FROM_CALL_CHIP; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_LOADING_SCREEN_FOR_STATUS; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_LOADING_TO_NEXT_FLOW; Loading Loading @@ -184,6 +187,9 @@ public class InteractionJankMonitor { public static final int CUJ_SUW_SHOW_FUNCTION_SCREEN_WITH_ACTIONS = 46; public static final int CUJ_SUW_LOADING_TO_NEXT_FLOW = 47; public static final int CUJ_SUW_LOADING_SCREEN_FOR_STATUS = 48; public static final int CUJ_SPLIT_SCREEN_ENTER = 49; public static final int CUJ_SPLIT_SCREEN_EXIT = 50; public static final int CUJ_SPLIT_SCREEN_RESIZE = 51; private static final int NO_STATSD_LOGGING = -1; Loading Loading @@ -241,6 +247,9 @@ public class InteractionJankMonitor { UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_SHOW_FUNCTION_SCREEN_WITH_ACTIONS, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_LOADING_TO_NEXT_FLOW, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_LOADING_SCREEN_FOR_STATUS, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLIT_SCREEN_ENTER, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLIT_SCREEN_EXIT, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLIT_SCREEN_RESIZE, }; private static volatile InteractionJankMonitor sInstance; Loading Loading @@ -309,7 +318,10 @@ public class InteractionJankMonitor { CUJ_SUW_LOADING_TO_SHOW_INFO_WITH_ACTIONS, CUJ_SUW_SHOW_FUNCTION_SCREEN_WITH_ACTIONS, CUJ_SUW_LOADING_TO_NEXT_FLOW, CUJ_SUW_LOADING_SCREEN_FOR_STATUS CUJ_SUW_LOADING_SCREEN_FOR_STATUS, CUJ_SPLIT_SCREEN_ENTER, CUJ_SPLIT_SCREEN_EXIT, CUJ_SPLIT_SCREEN_RESIZE }) @Retention(RetentionPolicy.SOURCE) public @interface CujType { Loading Loading @@ -726,6 +738,12 @@ public class InteractionJankMonitor { return "SUW_LOADING_TO_NEXT_FLOW"; case CUJ_SUW_LOADING_SCREEN_FOR_STATUS: return "SUW_LOADING_SCREEN_FOR_STATUS"; case CUJ_SPLIT_SCREEN_ENTER: return "SPLIT_SCREEN_ENTER"; case CUJ_SPLIT_SCREEN_EXIT: return "SPLIT_SCREEN_EXIT"; case CUJ_SPLIT_SCREEN_RESIZE: return "CUJ_SPLIT_SCREEN_RESIZE"; } return "UNKNOWN"; } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/common/InteractionJankMonitorUtils.java 0 → 100644 +63 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.wm.shell.common; import android.annotation.NonNull; import android.annotation.Nullable; import android.text.TextUtils; import android.view.View; import com.android.internal.jank.InteractionJankMonitor; /** Utils class for simplfy InteractionJank trancing call */ public class InteractionJankMonitorUtils { /** * Begin a trace session. * * @param cujType the specific {@link InteractionJankMonitor.CujType}. * @param view the view to trace * @param tag the tag to distinguish different flow of same type CUJ. */ public static void beginTracing(@InteractionJankMonitor.CujType int cujType, @NonNull View view, @Nullable String tag) { final InteractionJankMonitor.Configuration.Builder builder = InteractionJankMonitor.Configuration.Builder.withView(cujType, view); if (!TextUtils.isEmpty(tag)) { builder.setTag(tag); } InteractionJankMonitor.getInstance().begin(builder); } /** * End a trace session. * * @param cujType the specific {@link InteractionJankMonitor.CujType}. */ public static void endTracing(@InteractionJankMonitor.CujType int cujType) { InteractionJankMonitor.getInstance().end(cujType); } /** * Cancel the trace session. * * @param cujType the specific {@link InteractionJankMonitor.CujType}. */ public static void cancelTracing(@InteractionJankMonitor.CujType int cujType) { InteractionJankMonitor.getInstance().cancel(cujType); } }
libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +6 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ import android.window.WindowContainerTransaction; import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.policy.DividerSnapAlgorithm; import com.android.internal.policy.DockedDividerUtils; import com.android.wm.shell.R; Loading @@ -62,6 +63,7 @@ import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.animation.Interpolators; import com.android.wm.shell.common.DisplayImeController; import com.android.wm.shell.common.DisplayInsetsController; import com.android.wm.shell.common.InteractionJankMonitorUtils; import com.android.wm.shell.common.split.SplitScreenConstants.SplitPosition; import java.io.PrintWriter; Loading Loading @@ -434,6 +436,8 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange mSplitLayoutHandler.onLayoutSizeChanged(this); return; } InteractionJankMonitorUtils.beginTracing(InteractionJankMonitor.CUJ_SPLIT_SCREEN_RESIZE, mSplitWindowManager.getDividerView(), "Divider fling"); ValueAnimator animator = ValueAnimator .ofInt(from, to) .setDuration(250); Loading @@ -446,6 +450,8 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange if (flingFinishedCallback != null) { flingFinishedCallback.run(); } InteractionJankMonitorUtils.endTracing( InteractionJankMonitor.CUJ_SPLIT_SCREEN_RESIZE); } @Override Loading
libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitWindowManager.java +5 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.view.LayoutInflater; import android.view.SurfaceControl; import android.view.SurfaceControlViewHost; import android.view.SurfaceSession; import android.view.View; import android.view.WindowManager; import android.view.WindowlessWindowManager; Loading Loading @@ -170,6 +171,10 @@ public final class SplitWindowManager extends WindowlessWindowManager { mDividerView.setInteractive(interactive); } View getDividerView() { return mDividerView; } /** * Gets {@link SurfaceControl} of the surface holding divider view. @return {@code null} if not * feasible. Loading
packages/SystemUI/shared/src/com/android/systemui/shared/system/InteractionJankMonitorWrapper.java +20 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.shared.system; import android.annotation.IntDef; import android.os.Build; import android.text.TextUtils; import android.view.View; import com.android.internal.jank.InteractionJankMonitor; Loading Loading @@ -46,6 +47,8 @@ public final class InteractionJankMonitorWrapper { InteractionJankMonitor.CUJ_LAUNCHER_ALL_APPS_SCROLL; public static final int CUJ_APP_LAUNCH_FROM_WIDGET = InteractionJankMonitor.CUJ_LAUNCHER_APP_LAUNCH_FROM_WIDGET; public static final int CUJ_SPLIT_SCREEN_ENTER = InteractionJankMonitor.CUJ_SPLIT_SCREEN_ENTER; @IntDef({ CUJ_APP_LAUNCH_FROM_RECENTS, Loading Loading @@ -85,6 +88,23 @@ public final class InteractionJankMonitorWrapper { InteractionJankMonitor.getInstance().begin(builder); } /** * Begin a trace session. * * @param v an attached view. * @param cujType the specific {@link InteractionJankMonitor.CujType}. * @param tag the tag to distinguish different flow of same type CUJ. */ public static void begin(View v, @CujType int cujType, String tag) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) return; Configuration.Builder builder = Configuration.Builder.withView(cujType, v); if (!TextUtils.isEmpty(tag)) { builder.setTag(tag); } InteractionJankMonitor.getInstance().begin(builder); } /** * End a trace session. * Loading