Add tracing for Inset animations
So we can understand better what's going on.
Bug: 156367695
Test: Systrace
Change-Id: Ic9dc2c963f70a3bb787121d33476b84bd3dc5798
diff --git a/core/java/android/view/InsetsAnimationThreadControlRunner.java b/core/java/android/view/InsetsAnimationThreadControlRunner.java
index 9dfdd06..3215b7c 100644
--- a/core/java/android/view/InsetsAnimationThreadControlRunner.java
+++ b/core/java/android/view/InsetsAnimationThreadControlRunner.java
@@ -21,6 +21,7 @@
import android.annotation.UiThread;
import android.graphics.Rect;
import android.os.Handler;
+import android.os.Trace;
import android.util.SparseArray;
import android.view.InsetsController.AnimationType;
import android.view.SyncRtSurfaceTransactionApplier.SurfaceParams;
@@ -60,6 +61,9 @@
@Override
public void notifyFinished(InsetsAnimationControlRunner runner, boolean shown) {
+ Trace.asyncTraceEnd(Trace.TRACE_TAG_VIEW,
+ "InsetsAsyncAnimation: " + WindowInsets.Type.toString(runner.getTypes()),
+ runner.getTypes());
releaseControls(mControl.getControls());
mMainThreadHandler.post(() ->
mOuterCallbacks.notifyFinished(InsetsAnimationThreadControlRunner.this, shown));
@@ -93,7 +97,11 @@
mOuterCallbacks = controller;
mControl = new InsetsAnimationControlImpl(controls, frame, state, listener,
types, mCallbacks, durationMs, interpolator, animationType);
- InsetsAnimationThread.getHandler().post(() -> listener.onReady(mControl, types));
+ InsetsAnimationThread.getHandler().post(() -> {
+ Trace.asyncTraceBegin(Trace.TRACE_TAG_VIEW,
+ "InsetsAsyncAnimation: " + WindowInsets.Type.toString(types), types);
+ listener.onReady(mControl, types);
+ });
}
private void releaseControls(SparseArray<InsetsSourceControl> controls) {
@@ -102,15 +110,6 @@
}
}
- private SparseArray<InsetsSourceControl> copyControls(
- SparseArray<InsetsSourceControl> controls) {
- SparseArray<InsetsSourceControl> copy = new SparseArray<>(controls.size());
- for (int i = 0; i < controls.size(); i++) {
- copy.append(controls.keyAt(i), new InsetsSourceControl(controls.valueAt(i)));
- }
- return copy;
- }
-
@Override
@UiThread
public int getTypes() {
diff --git a/core/java/android/view/InsetsController.java b/core/java/android/view/InsetsController.java
index 2d17b6d..758062f 100644
--- a/core/java/android/view/InsetsController.java
+++ b/core/java/android/view/InsetsController.java
@@ -35,6 +35,7 @@
import android.graphics.Rect;
import android.os.CancellationSignal;
import android.os.Handler;
+import android.os.Trace;
import android.util.ArraySet;
import android.util.Pair;
import android.util.SparseArray;
@@ -1143,6 +1144,8 @@
if (controller.isCancelled()) {
return;
}
+ Trace.asyncTraceBegin(Trace.TRACE_TAG_VIEW,
+ "InsetsAnimation: " + WindowInsets.Type.toString(types), types);
for (int i = mRunningAnimations.size() - 1; i >= 0; i--) {
RunningAnimation runningAnimation = mRunningAnimations.get(i);
if (runningAnimation.runner == controller) {
@@ -1159,6 +1162,9 @@
@VisibleForTesting
public void dispatchAnimationEnd(WindowInsetsAnimation animation) {
+ Trace.asyncTraceEnd(Trace.TRACE_TAG_VIEW,
+ "InsetsAnimation: " + WindowInsets.Type.toString(animation.getTypeMask()),
+ animation.getTypeMask());
mHost.dispatchWindowInsetsAnimationEnd(animation);
}
diff --git a/core/java/android/view/WindowInsets.java b/core/java/android/view/WindowInsets.java
index aad1c60..4d6b72f 100644
--- a/core/java/android/view/WindowInsets.java
+++ b/core/java/android/view/WindowInsets.java
@@ -1328,30 +1328,36 @@
}
}
- static String toString(@InsetsType int type) {
- switch (type) {
- case STATUS_BARS:
- return "statusBars";
- case NAVIGATION_BARS:
- return "navigationBars";
- case CAPTION_BAR:
- return "captionBar";
- case IME:
- return "ime";
- case SYSTEM_GESTURES:
- return "systemGestures";
- case MANDATORY_SYSTEM_GESTURES:
- return "mandatorySystemGestures";
- case TAPPABLE_ELEMENT:
- return "tappableElement";
- case DISPLAY_CUTOUT:
- return "displayCutout";
- case WINDOW_DECOR:
- return "windowDecor";
- default:
- throw new IllegalArgumentException("type needs to be >= FIRST and <= LAST,"
- + " type=" + type);
+ static String toString(@InsetsType int types) {
+ StringBuilder result = new StringBuilder();
+ if ((types & STATUS_BARS) != 0) {
+ result.append("statusBars |");
}
+ if ((types & NAVIGATION_BARS) != 0) {
+ result.append("navigationBars |");
+ }
+ if ((types & IME) != 0) {
+ result.append("ime |");
+ }
+ if ((types & SYSTEM_GESTURES) != 0) {
+ result.append("systemGestures |");
+ }
+ if ((types & MANDATORY_SYSTEM_GESTURES) != 0) {
+ result.append("mandatorySystemGestures |");
+ }
+ if ((types & TAPPABLE_ELEMENT) != 0) {
+ result.append("tappableElement |");
+ }
+ if ((types & DISPLAY_CUTOUT) != 0) {
+ result.append("displayCutout |");
+ }
+ if ((types & WINDOW_DECOR) != 0) {
+ result.append("windowDecor |");
+ }
+ if (result.length() > 0) {
+ result.delete(result.length() - 2, result.length());
+ }
+ return result.toString();
}
private Type() {