diff options
| author | 2022-04-13 11:45:40 +0000 | |
|---|---|---|
| committer | 2022-05-04 08:28:50 +0000 | |
| commit | 9a083dde2c4e7a5733442522a41806e2beec243f (patch) | |
| tree | 58cbc327812ddc6797675915d303ba1a496b3e06 | |
| parent | 6474aed2f5bc17e08ec7077756efab8c0511daa9 (diff) | |
Instrument jank of CUJ take screen shot
Bug: 226526041
Test: see the reference trace in the bug
Change-Id: Ia25f0ebb965ada1006a00b68bfee90106f2a9573
4 files changed, 65 insertions, 1 deletions
diff --git a/core/java/com/android/internal/jank/InteractionJankMonitor.java b/core/java/com/android/internal/jank/InteractionJankMonitor.java index e466c8866afa..2e4860a6da26 100644 --- a/core/java/com/android/internal/jank/InteractionJankMonitor.java +++ b/core/java/com/android/internal/jank/InteractionJankMonitor.java @@ -71,6 +71,7 @@ import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_IN import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_LOADING_TO_NEXT_FLOW; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_LOADING_TO_SHOW_INFO_WITH_ACTIONS; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_SHOW_FUNCTION_SCREEN_WITH_ACTIONS; +import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__TAKE_SCREENSHOT; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__UNFOLD_ANIM; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__USER_SWITCH; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__WALLPAPER_TRANSITION; @@ -194,6 +195,7 @@ public class InteractionJankMonitor { public static final int CUJ_LOCKSCREEN_LAUNCH_CAMERA = 51; // reserved. public static final int CUJ_SPLIT_SCREEN_RESIZE = 52; public static final int CUJ_SETTINGS_SLIDER = 53; + public static final int CUJ_TAKE_SCREENSHOT = 54; private static final int NO_STATSD_LOGGING = -1; @@ -256,6 +258,7 @@ public class InteractionJankMonitor { UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_LAUNCH_CAMERA, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SPLIT_SCREEN_RESIZE, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SETTINGS_SLIDER, + UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__TAKE_SCREENSHOT, }; private static volatile InteractionJankMonitor sInstance; @@ -330,6 +333,7 @@ public class InteractionJankMonitor { CUJ_LOCKSCREEN_LAUNCH_CAMERA, CUJ_SPLIT_SCREEN_RESIZE, CUJ_SETTINGS_SLIDER, + CUJ_TAKE_SCREENSHOT, }) @Retention(RetentionPolicy.SOURCE) public @interface CujType { @@ -756,6 +760,8 @@ public class InteractionJankMonitor { return "CUJ_SPLIT_SCREEN_RESIZE"; case CUJ_SETTINGS_SLIDER: return "SETTINGS_SLIDER"; + case CUJ_TAKE_SCREENSHOT: + return "TAKE_SCREENSHOT"; } return "UNKNOWN"; } diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java index 4728c678f96c..6d9455e80adc 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java @@ -484,6 +484,7 @@ public class ScreenshotController { setWindowFocusable(false); } }); + mScreenshotView.setDefaultTimeoutMillis(mScreenshotHandler.getDefaultTimeoutMillis()); mScreenshotView.setOnKeyListener((v, keyCode, event) -> { if (keyCode == KeyEvent.KEYCODE_BACK) { diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java index 6af6e36a75f7..8b6ccea63261 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java @@ -18,6 +18,7 @@ package com.android.systemui.screenshot; import static android.content.res.Configuration.ORIENTATION_PORTRAIT; +import static com.android.internal.jank.InteractionJankMonitor.CUJ_TAKE_SCREENSHOT; import static com.android.systemui.screenshot.LogConfig.DEBUG_ANIM; import static com.android.systemui.screenshot.LogConfig.DEBUG_DISMISS; import static com.android.systemui.screenshot.LogConfig.DEBUG_INPUT; @@ -83,6 +84,7 @@ import android.widget.LinearLayout; import androidx.constraintlayout.widget.ConstraintLayout; +import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.logging.UiEventLogger; import com.android.systemui.R; import com.android.systemui.screenshot.ScreenshotController.SavedImageData.ActionTransition; @@ -167,6 +169,9 @@ public class ScreenshotView extends FrameLayout implements private final ArrayList<OverlayActionChip> mSmartChips = new ArrayList<>(); private PendingInteraction mPendingInteraction; + private final InteractionJankMonitor mInteractionJankMonitor; + private long mDefaultTimeoutOfTimeoutHandler; + private enum PendingInteraction { PREVIEW, EDIT, @@ -190,6 +195,7 @@ public class ScreenshotView extends FrameLayout implements Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); mResources = mContext.getResources(); + mInteractionJankMonitor = getInteractionJankMonitorInstance(); mFixedSize = mResources.getDimensionPixelSize(R.dimen.overlay_x_scale); @@ -230,6 +236,14 @@ public class ScreenshotView extends FrameLayout implements }); } + private InteractionJankMonitor getInteractionJankMonitorInstance() { + return InteractionJankMonitor.getInstance(); + } + + void setDefaultTimeoutMillis(long timeout) { + mDefaultTimeoutOfTimeoutHandler = timeout; + } + public void hideScrollChip() { mScrollChip.setVisibility(View.GONE); } @@ -406,6 +420,9 @@ public class ScreenshotView extends FrameLayout implements @Override public void onDismissComplete() { + if (mInteractionJankMonitor.isInstrumenting(CUJ_TAKE_SCREENSHOT)) { + mInteractionJankMonitor.end(CUJ_TAKE_SCREENSHOT); + } mCallbacks.onDismiss(); } }); @@ -606,6 +623,20 @@ public class ScreenshotView extends FrameLayout implements dropInAnimation.addListener(new AnimatorListenerAdapter() { @Override + public void onAnimationCancel(Animator animation) { + mInteractionJankMonitor.cancel(CUJ_TAKE_SCREENSHOT); + } + + @Override + public void onAnimationStart(Animator animation) { + InteractionJankMonitor.Configuration.Builder builder = + InteractionJankMonitor.Configuration.Builder.withView( + CUJ_TAKE_SCREENSHOT, mScreenshotPreview) + .setTag("DropIn"); + mInteractionJankMonitor.begin(builder); + } + + @Override public void onAnimationEnd(Animator animation) { if (DEBUG_ANIM) { Log.d(TAG, "drop-in animation ended"); @@ -631,7 +662,7 @@ public class ScreenshotView extends FrameLayout implements mScreenshotPreview.setX(finalPos.x - mScreenshotPreview.getWidth() / 2f); mScreenshotPreview.setY(finalPos.y - mScreenshotPreview.getHeight() / 2f); requestLayout(); - + mInteractionJankMonitor.end(CUJ_TAKE_SCREENSHOT); createScreenshotActionsShadeAnimation().start(); } }); @@ -702,6 +733,28 @@ public class ScreenshotView extends FrameLayout implements mActionsContainer.setVisibility(View.VISIBLE); mActionsContainerBackground.setVisibility(View.VISIBLE); + animator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationCancel(Animator animation) { + mInteractionJankMonitor.cancel(CUJ_TAKE_SCREENSHOT); + } + + @Override + public void onAnimationEnd(Animator animation) { + mInteractionJankMonitor.end(CUJ_TAKE_SCREENSHOT); + } + + @Override + public void onAnimationStart(Animator animation) { + InteractionJankMonitor.Configuration.Builder builder = + InteractionJankMonitor.Configuration.Builder.withView( + CUJ_TAKE_SCREENSHOT, mScreenshotStatic) + .setTag("Actions") + .setTimeout(mDefaultTimeoutOfTimeoutHandler); + mInteractionJankMonitor.begin(builder); + } + }); + animator.addUpdateListener(animation -> { float t = animation.getAnimatedFraction(); mBackgroundProtection.setAlpha(t); diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/TimeoutHandler.java b/packages/SystemUI/src/com/android/systemui/screenshot/TimeoutHandler.java index 9156601e6638..71c2cb4a5cb9 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/TimeoutHandler.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/TimeoutHandler.java @@ -72,6 +72,10 @@ public class TimeoutHandler extends Handler { mDefaultTimeout = timeout; } + int getDefaultTimeoutMillis() { + return mDefaultTimeout; + } + /** * Cancel the current timeout, if any. To reset the delayed runnable use resetTimeout instead. */ |