am ad4a285a: am ebac4d1b: Merge "Change conditionallyCheckInstanceCounts to use countInstancesOfClasses"

* commit 'ad4a285af619ea29f79dbe4da19061c49f24a8c9':
  Change conditionallyCheckInstanceCounts to use countInstancesOfClasses
This commit is contained in:
Mathieu Chartier
2015-07-14 20:27:42 +00:00
committed by Android Git Automerger
2 changed files with 13 additions and 10 deletions

View File

@@ -991,7 +991,7 @@ public final class ActivityThread {
long nativeFree = Debug.getNativeHeapFreeSize() / 1024;
Runtime runtime = Runtime.getRuntime();
runtime.gc(); // Do GC since countInstancesOfClass counts unreachable objects.
long dalvikMax = runtime.totalMemory() / 1024;
long dalvikFree = runtime.freeMemory() / 1024;
long dalvikAllocated = dalvikMax - dalvikFree;

View File

@@ -1574,7 +1574,8 @@ public final class StrictMode {
*/
public static void conditionallyCheckInstanceCounts() {
VmPolicy policy = getVmPolicy();
if (policy.classInstanceLimit.size() == 0) {
int policySize = policy.classInstanceLimit.size();
if (policySize == 0) {
return;
}
@@ -1583,15 +1584,17 @@ public final class StrictMode {
System.gc();
// Note: classInstanceLimit is immutable, so this is lock-free
for (Map.Entry<Class, Integer> entry : policy.classInstanceLimit.entrySet()) {
Class klass = entry.getKey();
int limit = entry.getValue();
long instances = VMDebug.countInstancesOfClass(klass, false);
if (instances <= limit) {
continue;
// Create the classes array.
Class[] classes = policy.classInstanceLimit.keySet().toArray(new Class[policySize]);
long[] instanceCounts = VMDebug.countInstancesOfClasses(classes, false);
for (int i = 0; i < classes.length; ++i) {
Class klass = classes[i];
int limit = policy.classInstanceLimit.get(klass);
long instances = instanceCounts[i];
if (instances > limit) {
Throwable tr = new InstanceCountViolation(klass, instances, limit);
onVmPolicyViolation(tr.getMessage(), tr);
}
Throwable tr = new InstanceCountViolation(klass, instances, limit);
onVmPolicyViolation(tr.getMessage(), tr);
}
}