am ad4a285a: am ebac4d1b: Merge "Change conditionallyCheckInstanceCounts to use countInstancesOfClasses"
* commit 'ad4a285af619ea29f79dbe4da19061c49f24a8c9': Change conditionallyCheckInstanceCounts to use countInstancesOfClasses
This commit is contained in:
@@ -991,7 +991,7 @@ public final class ActivityThread {
|
|||||||
long nativeFree = Debug.getNativeHeapFreeSize() / 1024;
|
long nativeFree = Debug.getNativeHeapFreeSize() / 1024;
|
||||||
|
|
||||||
Runtime runtime = Runtime.getRuntime();
|
Runtime runtime = Runtime.getRuntime();
|
||||||
|
runtime.gc(); // Do GC since countInstancesOfClass counts unreachable objects.
|
||||||
long dalvikMax = runtime.totalMemory() / 1024;
|
long dalvikMax = runtime.totalMemory() / 1024;
|
||||||
long dalvikFree = runtime.freeMemory() / 1024;
|
long dalvikFree = runtime.freeMemory() / 1024;
|
||||||
long dalvikAllocated = dalvikMax - dalvikFree;
|
long dalvikAllocated = dalvikMax - dalvikFree;
|
||||||
|
|||||||
@@ -1574,7 +1574,8 @@ public final class StrictMode {
|
|||||||
*/
|
*/
|
||||||
public static void conditionallyCheckInstanceCounts() {
|
public static void conditionallyCheckInstanceCounts() {
|
||||||
VmPolicy policy = getVmPolicy();
|
VmPolicy policy = getVmPolicy();
|
||||||
if (policy.classInstanceLimit.size() == 0) {
|
int policySize = policy.classInstanceLimit.size();
|
||||||
|
if (policySize == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1583,15 +1584,17 @@ public final class StrictMode {
|
|||||||
System.gc();
|
System.gc();
|
||||||
|
|
||||||
// Note: classInstanceLimit is immutable, so this is lock-free
|
// Note: classInstanceLimit is immutable, so this is lock-free
|
||||||
for (Map.Entry<Class, Integer> entry : policy.classInstanceLimit.entrySet()) {
|
// Create the classes array.
|
||||||
Class klass = entry.getKey();
|
Class[] classes = policy.classInstanceLimit.keySet().toArray(new Class[policySize]);
|
||||||
int limit = entry.getValue();
|
long[] instanceCounts = VMDebug.countInstancesOfClasses(classes, false);
|
||||||
long instances = VMDebug.countInstancesOfClass(klass, false);
|
for (int i = 0; i < classes.length; ++i) {
|
||||||
if (instances <= limit) {
|
Class klass = classes[i];
|
||||||
continue;
|
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user