summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xcore/java/android/animation/ValueAnimator.java14
-rw-r--r--core/java/android/os/StrictMode.java12
-rw-r--r--services/java/com/android/server/am/ActivityManagerService.java3
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");
}