summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ahan Wu <ahanwu@google.com> 2022-04-13 11:45:40 +0000
committer Ahan Wu <ahanwu@google.com> 2022-05-04 08:28:50 +0000
commit9a083dde2c4e7a5733442522a41806e2beec243f (patch)
tree58cbc327812ddc6797675915d303ba1a496b3e06
parent6474aed2f5bc17e08ec7077756efab8c0511daa9 (diff)
Instrument jank of CUJ take screen shot
Bug: 226526041 Test: see the reference trace in the bug Change-Id: Ia25f0ebb965ada1006a00b68bfee90106f2a9573
-rw-r--r--core/java/com/android/internal/jank/InteractionJankMonitor.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java1
-rw-r--r--packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java55
-rw-r--r--packages/SystemUI/src/com/android/systemui/screenshot/TimeoutHandler.java4
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.
*/