diff options
| author | 2023-11-07 21:31:33 +0000 | |
|---|---|---|
| committer | 2023-11-07 21:31:33 +0000 | |
| commit | ff6fbde28d5cc48571d23c788adee1578a2d625f (patch) | |
| tree | 1b6e6edf9200eb6e08377b6b2793473b4d5f43ab | |
| parent | b126c3b6bdb8c403e46b05a32c4e0e25a4e0144a (diff) | |
| parent | bcfa0d80199d63ca8307a6c7a325258e7e326ac2 (diff) | |
Merge "Latency tracking for Predictive Back." into main
| -rw-r--r-- | core/java/com/android/internal/util/LatencyTracker.java | 11 | ||||
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java | 33 |
2 files changed, 44 insertions, 0 deletions
diff --git a/core/java/com/android/internal/util/LatencyTracker.java b/core/java/com/android/internal/util/LatencyTracker.java index 87324dba64de..58ee2b21296b 100644 --- a/core/java/com/android/internal/util/LatencyTracker.java +++ b/core/java/com/android/internal/util/LatencyTracker.java @@ -19,6 +19,7 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.os.Trace.TRACE_TAG_APP; import static android.provider.DeviceConfig.NAMESPACE_LATENCY_TRACKER; +import static com.android.internal.util.FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_BACK_SYSTEM_ANIMATION; 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_EXPAND_PANEL; @@ -228,6 +229,11 @@ public class LatencyTracker { */ public static final int ACTION_KEYGUARD_FPS_UNLOCK_TO_HOME = 24; + /** + * Time it takes to start back preview surface animation after a back gesture starts. + */ + public static final int ACTION_BACK_SYSTEM_ANIMATION = 25; + private static final int[] ACTIONS_ALL = { ACTION_EXPAND_PANEL, ACTION_TOGGLE_RECENTS, @@ -254,6 +260,7 @@ public class LatencyTracker { ACTION_SMARTSPACE_DOORBELL, ACTION_NOTIFICATION_BIG_PICTURE_LOADED, ACTION_KEYGUARD_FPS_UNLOCK_TO_HOME, + ACTION_BACK_SYSTEM_ANIMATION, }; /** @hide */ @@ -283,6 +290,7 @@ public class LatencyTracker { ACTION_SMARTSPACE_DOORBELL, ACTION_NOTIFICATION_BIG_PICTURE_LOADED, ACTION_KEYGUARD_FPS_UNLOCK_TO_HOME, + ACTION_BACK_SYSTEM_ANIMATION, }) @Retention(RetentionPolicy.SOURCE) public @interface Action { @@ -315,6 +323,7 @@ public class LatencyTracker { UIACTION_LATENCY_REPORTED__ACTION__ACTION_SMARTSPACE_DOORBELL, UIACTION_LATENCY_REPORTED__ACTION__ACTION_NOTIFICATION_BIG_PICTURE_LOADED, UIACTION_LATENCY_REPORTED__ACTION__ACTION_KEYGUARD_FPS_UNLOCK_TO_HOME, + UIACTION_LATENCY_REPORTED__ACTION__ACTION_BACK_SYSTEM_ANIMATION, }; private final Object mLock = new Object(); @@ -503,6 +512,8 @@ public class LatencyTracker { return "ACTION_NOTIFICATION_BIG_PICTURE_LOADED"; case UIACTION_LATENCY_REPORTED__ACTION__ACTION_KEYGUARD_FPS_UNLOCK_TO_HOME: return "ACTION_KEYGUARD_FPS_UNLOCK_TO_HOME"; + case UIACTION_LATENCY_REPORTED__ACTION__ACTION_BACK_SYSTEM_ANIMATION: + return "ACTION_BACK_SYSTEM_ANIMATION"; default: throw new IllegalArgumentException("Invalid action"); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java index 03c546dd2cf3..58436351885a 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java @@ -61,6 +61,7 @@ import android.window.IOnBackInvokedCallback; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.protolog.common.ProtoLog; +import com.android.internal.util.LatencyTracker; import com.android.internal.view.AppearanceRegion; import com.android.wm.shell.animation.FlingAnimationUtils; import com.android.wm.shell.common.ExternalInterfaceBinder; @@ -99,6 +100,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont * Max duration to wait for an animation to finish before triggering the real back. */ private static final long MAX_ANIMATION_DURATION = 2000; + private final LatencyTracker mLatencyTracker; /** True when a back gesture is ongoing */ private boolean mBackGestureStarted = false; @@ -167,6 +169,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont private final BackAnimationBackground mAnimationBackground; private StatusBarCustomizer mCustomizer; + private boolean mTrackingLatency; public BackAnimationController( @NonNull ShellInit shellInit, @@ -213,6 +216,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont .setSpeedUpFactor(FLING_SPEED_UP_FACTOR) .build(); mShellBackAnimationRegistry = shellBackAnimationRegistry; + mLatencyTracker = LatencyTracker.getInstance(mContext); } private void onInit() { @@ -438,6 +442,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont private void startBackNavigation(@NonNull TouchTracker touchTracker) { try { + startLatencyTracking(); mBackNavigationInfo = mActivityTaskManager.startBackNavigation( mNavigationObserver, mEnableAnimations.get() ? mBackAnimationAdapter : null); onBackNavigationInfoReceived(mBackNavigationInfo, touchTracker); @@ -452,6 +457,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont ProtoLog.d(WM_SHELL_BACK_PREVIEW, "Received backNavigationInfo:%s", backNavigationInfo); if (backNavigationInfo == null) { ProtoLog.e(WM_SHELL_BACK_PREVIEW, "Received BackNavigationInfo is null."); + cancelLatencyTracking(); return; } final int backType = backNavigationInfo.getType(); @@ -462,6 +468,8 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont } } else { mActiveCallback = mBackNavigationInfo.getOnBackInvokedCallback(); + // App is handling back animation. Cancel system animation latency tracking. + cancelLatencyTracking(); dispatchOnBackStarted(mActiveCallback, touchTracker.createStartEvent(null)); } } @@ -808,12 +816,36 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont ProtoLog.d(WM_SHELL_BACK_PREVIEW, "BackAnimationController: finishBackNavigation()"); mActiveCallback = null; mShellBackAnimationRegistry.resetDefaultCrossActivity(); + cancelLatencyTracking(); if (mBackNavigationInfo != null) { mBackNavigationInfo.onBackNavigationFinished(triggerBack); mBackNavigationInfo = null; } } + private void startLatencyTracking() { + if (mTrackingLatency) { + cancelLatencyTracking(); + } + mLatencyTracker.onActionStart(LatencyTracker.ACTION_BACK_SYSTEM_ANIMATION); + mTrackingLatency = true; + } + + private void cancelLatencyTracking() { + if (!mTrackingLatency) { + return; + } + mLatencyTracker.onActionCancel(LatencyTracker.ACTION_BACK_SYSTEM_ANIMATION); + mTrackingLatency = false; + } + + private void endLatencyTracking() { + if (!mTrackingLatency) { + return; + } + mLatencyTracker.onActionEnd(LatencyTracker.ACTION_BACK_SYSTEM_ANIMATION); + mTrackingLatency = false; + } private void createAdapter() { IBackAnimationRunner runner = @@ -826,6 +858,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont IBackAnimationFinishedCallback finishedCallback) { mShellExecutor.execute( () -> { + endLatencyTracking(); if (mBackNavigationInfo == null) { ProtoLog.e(WM_SHELL_BACK_PREVIEW, "Lack of navigation info to start animation."); |