summaryrefslogtreecommitdiff
path: root/core/java/android/window/SplashScreenView.java
diff options
context:
space:
mode:
authorWu Ahan <ahanwu@google.com>2021-10-19 11:46:00 +0000
committerWu Ahan <ahanwu@google.com>2021-10-25 03:56:42 +0000
commit61cd0b63c409814fd00350845ef0b94e1a69144a (patch)
tree0ac3179ba59d43687108f8a88bd4f21ab37c5af1 /core/java/android/window/SplashScreenView.java
parentfdf0378b8d22e2d8a3f08c6026ec92d5d2187ebf (diff)
Instrument jank of splash screen AVD and exit animation
Add jank instrument support for splash screen avd and exit animation. Bug: 195736656 Test: see trace in comment Change-Id: I1fdb9e14145bcf519eea99e440de74238e3c765c
Diffstat (limited to 'core/java/android/window/SplashScreenView.java')
-rw-r--r--core/java/android/window/SplashScreenView.java28
1 files changed, 28 insertions, 0 deletions
diff --git a/core/java/android/window/SplashScreenView.java b/core/java/android/window/SplashScreenView.java
index f748d4bc121d..f04155d112d4 100644
--- a/core/java/android/window/SplashScreenView.java
+++ b/core/java/android/window/SplashScreenView.java
@@ -20,6 +20,10 @@ import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACK
import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_SPLASHSCREEN_AVD;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
import android.annotation.ColorInt;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -54,6 +58,7 @@ import android.widget.FrameLayout;
import android.widget.ImageView;
import com.android.internal.R;
+import com.android.internal.jank.InteractionJankMonitor;
import com.android.internal.policy.DecorView;
import com.android.internal.util.ContrastColorUtil;
@@ -487,6 +492,23 @@ public final class SplashScreenView extends FrameLayout {
}
IconAnimateListener aniDrawable = (IconAnimateListener) iconDrawable;
aniDrawable.prepareAnimate(duration, this::animationStartCallback);
+ aniDrawable.setAnimationJankMonitoring(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationCancel(Animator animation) {
+ InteractionJankMonitor.getInstance().cancel(CUJ_SPLASHSCREEN_AVD);
+ }
+
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ InteractionJankMonitor.getInstance().end(CUJ_SPLASHSCREEN_AVD);
+ }
+
+ @Override
+ public void onAnimationStart(Animator animation) {
+ InteractionJankMonitor.getInstance().begin(
+ SplashScreenView.this, CUJ_SPLASHSCREEN_AVD);
+ }
+ });
}
private void animationStartCallback() {
@@ -669,6 +691,12 @@ public final class SplashScreenView extends FrameLayout {
* Stop animation.
*/
void stopAnimation();
+
+ /**
+ * Provides a chance to start interaction jank monitoring in avd animation.
+ * @param listener a listener to start jank monitoring
+ */
+ default void setAnimationJankMonitoring(AnimatorListenerAdapter listener) {}
}
/**