From 97f0fe270920bb737c678a1067e79ccbc181fcec Mon Sep 17 00:00:00 2001 From: Ahan Wu Date: Fri, 21 May 2021 08:28:47 -0800 Subject: [PATCH] Instrument jank and latency of the unlock animation of lockscreen Instrument jank and latency of unlock animation. Bug: 169735612 Bug: 169735198 Bug: 169220953 Test: take trace to validate Change-Id: I1721d7d3373f99b4aca618f86464d44ecd1e618e --- .../internal/jank/InteractionJankMonitor.java | 26 +++++++++------- .../android/internal/util/LatencyTracker.java | 16 ++++++++-- .../KeyguardAbsKeyInputViewController.java | 1 + .../KeyguardPatternViewController.java | 1 + .../keyguard/KeyguardViewMediator.java | 30 +++++++++++++++++++ 5 files changed, 61 insertions(+), 13 deletions(-) diff --git a/core/java/com/android/internal/jank/InteractionJankMonitor.java b/core/java/com/android/internal/jank/InteractionJankMonitor.java index af163c9e70b48..28b325b15b9c9 100644 --- a/core/java/com/android/internal/jank/InteractionJankMonitor.java +++ b/core/java/com/android/internal/jank/InteractionJankMonitor.java @@ -39,6 +39,7 @@ import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_IN import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PIN_DISAPPEAR; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_TRANSITION_FROM_AOD; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_TRANSITION_TO_AOD; +import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_UNLOCK_ANIMATION; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__NOTIFICATION_SHADE_SWIPE; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SETTINGS_PAGE_SCROLL; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_APP_LAUNCH; @@ -150,6 +151,7 @@ public class InteractionJankMonitor { public static final int CUJ_LAUNCHER_ALL_APPS_SCROLL = 26; public static final int CUJ_LAUNCHER_APP_LAUNCH_FROM_WIDGET = 27; public static final int CUJ_SETTINGS_PAGE_SCROLL = 28; + public static final int CUJ_LOCKSCREEN_UNLOCK_ANIMATION = 29; private static final int NO_STATSD_LOGGING = -1; @@ -187,6 +189,7 @@ public class InteractionJankMonitor { UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_ALL_APPS_SCROLL, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_LAUNCH_FROM_WIDGET, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SETTINGS_PAGE_SCROLL, + UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_UNLOCK_ANIMATION, }; private static volatile InteractionJankMonitor sInstance; @@ -235,6 +238,7 @@ public class InteractionJankMonitor { CUJ_LAUNCHER_ALL_APPS_SCROLL, CUJ_LAUNCHER_APP_LAUNCH_FROM_WIDGET, CUJ_SETTINGS_PAGE_SCROLL, + CUJ_LOCKSCREEN_UNLOCK_ANIMATION, }) @Retention(RetentionPolicy.SOURCE) public @interface CujType { @@ -548,29 +552,31 @@ public class InteractionJankMonitor { case CUJ_NOTIFICATION_APP_START: return "NOTIFICATION_APP_START"; case CUJ_LOCKSCREEN_PASSWORD_APPEAR: - return "CUJ_LOCKSCREEN_PASSWORD_APPEAR"; + return "LOCKSCREEN_PASSWORD_APPEAR"; case CUJ_LOCKSCREEN_PATTERN_APPEAR: - return "CUJ_LOCKSCREEN_PATTERN_APPEAR"; + return "LOCKSCREEN_PATTERN_APPEAR"; case CUJ_LOCKSCREEN_PIN_APPEAR: - return "CUJ_LOCKSCREEN_PIN_APPEAR"; + return "LOCKSCREEN_PIN_APPEAR"; case CUJ_LOCKSCREEN_PASSWORD_DISAPPEAR: - return "CUJ_LOCKSCREEN_PASSWORD_DISAPPEAR"; + return "LOCKSCREEN_PASSWORD_DISAPPEAR"; case CUJ_LOCKSCREEN_PATTERN_DISAPPEAR: - return "CUJ_LOCKSCREEN_PATTERN_DISAPPEAR"; + return "LOCKSCREEN_PATTERN_DISAPPEAR"; case CUJ_LOCKSCREEN_PIN_DISAPPEAR: - return "CUJ_LOCKSCREEN_PIN_DISAPPEAR"; + return "LOCKSCREEN_PIN_DISAPPEAR"; case CUJ_LOCKSCREEN_TRANSITION_FROM_AOD: - return "CUJ_LOCKSCREEN_TRANSITION_FROM_AOD"; + return "LOCKSCREEN_TRANSITION_FROM_AOD"; case CUJ_LOCKSCREEN_TRANSITION_TO_AOD: - return "CUJ_LOCKSCREEN_TRANSITION_TO_AOD"; + return "LOCKSCREEN_TRANSITION_TO_AOD"; case CUJ_LAUNCHER_OPEN_ALL_APPS : - return "CUJ_LAUNCHER_OPEN_ALL_APPS"; + return "LAUNCHER_OPEN_ALL_APPS"; case CUJ_LAUNCHER_ALL_APPS_SCROLL: - return "CUJ_LAUNCHER_ALL_APPS_SCROLL"; + return "LAUNCHER_ALL_APPS_SCROLL"; case CUJ_LAUNCHER_APP_LAUNCH_FROM_WIDGET: return "LAUNCHER_APP_LAUNCH_FROM_WIDGET"; case CUJ_SETTINGS_PAGE_SCROLL: return "SETTINGS_PAGE_SCROLL"; + case CUJ_LOCKSCREEN_UNLOCK_ANIMATION: + return "LOCKSCREEN_UNLOCK_ANIMATION"; } return "UNKNOWN"; } diff --git a/core/java/com/android/internal/util/LatencyTracker.java b/core/java/com/android/internal/util/LatencyTracker.java index 358e6ef874297..f040462dafdcd 100644 --- a/core/java/com/android/internal/util/LatencyTracker.java +++ b/core/java/com/android/internal/util/LatencyTracker.java @@ -105,6 +105,11 @@ public class LatencyTracker { */ public static final int ACTION_ROTATE_SCREEN_CAMERA_CHECK = 10; + /** + * Time it takes to start unlock animation . + */ + public static final int ACTION_LOCKSCREEN_UNLOCK = 11; + private static final int[] ACTIONS_ALL = { ACTION_EXPAND_PANEL, ACTION_TOGGLE_RECENTS, @@ -116,7 +121,8 @@ public class LatencyTracker { ACTION_FACE_WAKE_AND_UNLOCK, ACTION_START_RECENTS_ANIMATION, ACTION_ROTATE_SCREEN_SENSOR, - ACTION_ROTATE_SCREEN_CAMERA_CHECK + ACTION_ROTATE_SCREEN_CAMERA_CHECK, + ACTION_LOCKSCREEN_UNLOCK }; /** @hide */ @@ -131,7 +137,8 @@ public class LatencyTracker { ACTION_FACE_WAKE_AND_UNLOCK, ACTION_START_RECENTS_ANIMATION, ACTION_ROTATE_SCREEN_SENSOR, - ACTION_ROTATE_SCREEN_CAMERA_CHECK + ACTION_ROTATE_SCREEN_CAMERA_CHECK, + ACTION_LOCKSCREEN_UNLOCK }) @Retention(RetentionPolicy.SOURCE) public @interface Action { @@ -148,7 +155,8 @@ public class LatencyTracker { FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_FACE_WAKE_AND_UNLOCK, FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_START_RECENTS_ANIMATION, FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_ROTATE_SCREEN_SENSOR, - FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_ROTATE_SCREEN_CAMERA_CHECK + FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_ROTATE_SCREEN_CAMERA_CHECK, + FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_LOCKSCREEN_UNLOCK }; private static LatencyTracker sLatencyTracker; @@ -229,6 +237,8 @@ public class LatencyTracker { return "ACTION_ROTATE_SCREEN_CAMERA_CHECK"; case 11: return "ACTION_ROTATE_SCREEN_SENSOR"; + case 12: + return "ACTION_LOCKSCREEN_UNLOCK"; default: throw new IllegalArgumentException("Invalid action"); } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java index e41d5a3e34a75..1c4559eb03641 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java @@ -172,6 +172,7 @@ public abstract class KeyguardAbsKeyInputViewController { if (finishedCallback == null) { + InteractionJankMonitor.getInstance().end(CUJ_LOCKSCREEN_UNLOCK_ANIMATION); return; } @@ -2227,6 +2244,9 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable, finishedCallback.onAnimationFinished(); } catch (RemoteException e) { Slog.e(TAG, "RemoteException"); + } finally { + InteractionJankMonitor.getInstance() + .end(CUJ_LOCKSCREEN_UNLOCK_ANIMATION); } } @@ -2236,6 +2256,9 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable, finishedCallback.onAnimationFinished(); } catch (RemoteException e) { Slog.e(TAG, "RemoteException"); + } finally { + InteractionJankMonitor.getInstance() + .cancel(CUJ_LOCKSCREEN_UNLOCK_ANIMATION); } } }); @@ -2259,6 +2282,12 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable, sendUserPresentBroadcast(); } + private Configuration.Builder createInteractionJankMonitorConf(String tag) { + return new Configuration.Builder(CUJ_LOCKSCREEN_UNLOCK_ANIMATION) + .setView(mKeyguardViewControllerLazy.get().getViewRootImpl().getView()) + .setTag(tag); + } + /** * Whether we're currently animating between the keyguard and the app/launcher surface behind * it, or will be shortly (which happens if we started a fling to dismiss the keyguard). @@ -2304,6 +2333,7 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable, finishSurfaceBehindRemoteAnimation(); mSurfaceBehindRemoteAnimationRequested = false; mKeyguardUnlockAnimationControllerLazy.get().notifyFinishedKeyguardExitAnimation(); + InteractionJankMonitor.getInstance().end(CUJ_LOCKSCREEN_UNLOCK_ANIMATION); } /**