diff options
| -rwxr-xr-x | core/java/android/animation/ValueAnimator.java | 14 | ||||
| -rw-r--r-- | core/java/android/os/StrictMode.java | 12 | ||||
| -rw-r--r-- | services/java/com/android/server/am/ActivityManagerService.java | 3 |
3 files changed, 28 insertions, 1 deletions
diff --git a/core/java/android/animation/ValueAnimator.java b/core/java/android/animation/ValueAnimator.java index d60a598..e269c31 100755 --- a/core/java/android/animation/ValueAnimator.java +++ b/core/java/android/animation/ValueAnimator.java @@ -1215,4 +1215,16 @@ public class ValueAnimator extends Animator { void onAnimationUpdate(ValueAnimator animation); } -}
\ No newline at end of file + + /** + * Return the number of animations currently running. + * + * Used by StrictMode internally to annotate violations. Only + * called on the main thread. + * + * @hide + */ + public static int getCurrentAnimationsCount() { + return sAnimations.size(); + } +} diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java index e912089..9786959 100644 --- a/core/java/android/os/StrictMode.java +++ b/core/java/android/os/StrictMode.java @@ -15,6 +15,7 @@ */ package android.os; +import android.animation.ValueAnimator; import android.app.ActivityManagerNative; import android.app.ApplicationErrorReport; import android.util.Log; @@ -1110,6 +1111,11 @@ public final class StrictMode { public int durationMillis = -1; /** + * The number of animations currently running. + */ + public int numAnimationsRunning = 0; + + /** * Which violation number this was (1-based) since the last Looper loop, * from the perspective of the root caller (if it crossed any processes * via Binder calls). The value is 0 if the root caller wasn't on a Looper @@ -1138,6 +1144,7 @@ public final class StrictMode { crashInfo = new ApplicationErrorReport.CrashInfo(tr); violationUptimeMillis = SystemClock.uptimeMillis(); this.policy = policy; + this.numAnimationsRunning = ValueAnimator.getCurrentAnimationsCount(); } /** @@ -1163,6 +1170,7 @@ public final class StrictMode { } durationMillis = in.readInt(); violationNumThisLoop = in.readInt(); + numAnimationsRunning = in.readInt(); violationUptimeMillis = in.readLong(); } @@ -1174,6 +1182,7 @@ public final class StrictMode { dest.writeInt(policy); dest.writeInt(durationMillis); dest.writeInt(violationNumThisLoop); + dest.writeInt(numAnimationsRunning); dest.writeLong(violationUptimeMillis); } @@ -1190,6 +1199,9 @@ public final class StrictMode { if (violationNumThisLoop != 0) { pw.println(prefix + "violationNumThisLoop: " + violationNumThisLoop); } + if (numAnimationsRunning != 0) { + pw.println(prefix + "numAnimationsRunning: " + numAnimationsRunning); + } pw.println(prefix + "violationUptimeMillis: " + violationUptimeMillis); } diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index de2e965..8d36e4f 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -6676,6 +6676,9 @@ public final class ActivityManagerService extends ActivityManagerNative if (info.violationNumThisLoop != 0) { sb.append("Loop-Violation-Number: ").append(info.violationNumThisLoop).append("\n"); } + if (info.numAnimationsRunning != 0) { + sb.append("Animations-Running: ").append(info.numAnimationsRunning).append("\n"); + } if (info != null && info.durationMillis != -1) { sb.append("Duration-Millis: ").append(info.durationMillis).append("\n"); } |
