summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/ahat/src/heapdump/AhatSnapshot.java14
-rw-r--r--tools/ahat/test/InstanceTest.java6
-rw-r--r--tools/ahat/test/ObjectHandlerTest.java4
-rw-r--r--tools/ahat/test/TestDump.java53
4 files changed, 50 insertions, 27 deletions
diff --git a/tools/ahat/src/heapdump/AhatSnapshot.java b/tools/ahat/src/heapdump/AhatSnapshot.java
index fa41362cae..1b2cf3c59f 100644
--- a/tools/ahat/src/heapdump/AhatSnapshot.java
+++ b/tools/ahat/src/heapdump/AhatSnapshot.java
@@ -35,7 +35,6 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -48,9 +47,6 @@ public class AhatSnapshot implements Diffable<AhatSnapshot> {
// List of all ahat instances stored in increasing order by id.
private final List<AhatInstance> mInstances = new ArrayList<AhatInstance>();
- // Map from class name to class object.
- private final Map<String, AhatClassObj> mClasses = new HashMap<String, AhatClassObj>();
-
private final List<AhatHeap> mHeaps = new ArrayList<AhatHeap>();
private AhatSnapshot mBaseline = this;
@@ -113,7 +109,6 @@ public class AhatSnapshot implements Diffable<AhatSnapshot> {
} else if (inst instanceof ClassObj) {
AhatClassObj classObj = new AhatClassObj(id);
mInstances.add(classObj);
- mClasses.put(((ClassObj)inst).getClassName(), classObj);
}
return true;
}
@@ -212,15 +207,6 @@ public class AhatSnapshot implements Diffable<AhatSnapshot> {
}
/**
- * Returns the class object for the class with given name.
- * Returns null if there is no class object for the given name.
- * Note: This method is exposed for testing purposes.
- */
- public AhatClassObj findClass(String name) {
- return mClasses.get(name);
- }
-
- /**
* Returns the heap with the given name, if any.
* Returns null if no heap with the given name could be found.
*/
diff --git a/tools/ahat/test/InstanceTest.java b/tools/ahat/test/InstanceTest.java
index e05782c0b6..63055db93d 100644
--- a/tools/ahat/test/InstanceTest.java
+++ b/tools/ahat/test/InstanceTest.java
@@ -237,7 +237,7 @@ public class InstanceTest {
public void gcRootPath() throws IOException {
TestDump dump = TestDump.getTestDump();
- AhatClassObj main = dump.getAhatSnapshot().findClass("Main");
+ AhatClassObj main = dump.findClass("Main");
AhatInstance gcPathArray = dump.getDumpedAhatInstance("gcPathArray");
Value value = gcPathArray.asArrayInstance().getValue(2);
AhatInstance base = value.asAhatInstance();
@@ -333,7 +333,7 @@ public class InstanceTest {
@Test
public void classObjNotABitmap() throws IOException {
TestDump dump = TestDump.getTestDump();
- AhatInstance obj = dump.getAhatSnapshot().findClass("Main");
+ AhatInstance obj = dump.findClass("Main");
assertNull(obj.asBitmap());
}
@@ -348,7 +348,7 @@ public class InstanceTest {
@Test
public void classObjToString() throws IOException {
TestDump dump = TestDump.getTestDump();
- AhatInstance obj = dump.getAhatSnapshot().findClass("Main");
+ AhatInstance obj = dump.findClass("Main");
assertEquals("class Main", obj.toString());
}
diff --git a/tools/ahat/test/ObjectHandlerTest.java b/tools/ahat/test/ObjectHandlerTest.java
index cd0ba23013..1b8a781e0c 100644
--- a/tools/ahat/test/ObjectHandlerTest.java
+++ b/tools/ahat/test/ObjectHandlerTest.java
@@ -42,7 +42,7 @@ public class ObjectHandlerTest {
AhatSnapshot snapshot = dump.getAhatSnapshot();
AhatHandler handler = new ObjectHandler(snapshot);
- AhatInstance object = snapshot.findClass("Main");
+ AhatInstance object = dump.findClass("Main");
assertNotNull(object);
TestHandler.testNoCrash(handler, "http://localhost:7100/object?id=" + object.getId());
@@ -55,7 +55,7 @@ public class ObjectHandlerTest {
AhatSnapshot snapshot = dump.getAhatSnapshot();
AhatHandler handler = new ObjectHandler(snapshot);
- AhatInstance object = snapshot.findClass("java.lang.String");
+ AhatInstance object = dump.findClass("java.lang.String");
assertNotNull(object);
TestHandler.testNoCrash(handler, "http://localhost:7100/object?id=" + object.getId());
diff --git a/tools/ahat/test/TestDump.java b/tools/ahat/test/TestDump.java
index 3dce2dccfe..db9b25646a 100644
--- a/tools/ahat/test/TestDump.java
+++ b/tools/ahat/test/TestDump.java
@@ -21,11 +21,14 @@ import com.android.ahat.heapdump.AhatInstance;
import com.android.ahat.heapdump.AhatSnapshot;
import com.android.ahat.heapdump.Diff;
import com.android.ahat.heapdump.FieldValue;
+import com.android.ahat.heapdump.Site;
import com.android.ahat.heapdump.Value;
import com.android.tools.perflib.heap.ProguardMap;
import java.io.File;
import java.io.IOException;
import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Collection;
/**
* The TestDump class is used to get an AhatSnapshot for the test-dump
@@ -45,8 +48,10 @@ public class TestDump {
// fails and don't try to load it again.
private static boolean mTestDumpFailed = false;
- private AhatSnapshot mSnapshot = null;
- private AhatSnapshot mBaseline = null;
+ private AhatSnapshot mSnapshot;
+ private AhatSnapshot mBaseline;
+ private AhatClassObj mMain;
+ private AhatClassObj mBaselineMain;
/**
* Load the test-dump.hprof and test-dump-base.hprof files.
@@ -79,6 +84,12 @@ public class TestDump {
mSnapshot = AhatSnapshot.fromHprof(new File(hprof), map);
mBaseline = AhatSnapshot.fromHprof(new File(hprofBase), map);
Diff.snapshots(mSnapshot, mBaseline);
+
+ mMain = findClass(mSnapshot, "Main");
+ assert(mMain != null);
+
+ mBaselineMain = findClass(mBaseline, "Main");
+ assert(mBaselineMain != null);
}
/**
@@ -100,7 +111,7 @@ public class TestDump {
* snapshot for the test-dump program.
*/
public Value getDumpedValue(String name) {
- return getDumpedValue(name, mSnapshot);
+ return getDumpedValue(name, mMain);
}
/**
@@ -108,15 +119,14 @@ public class TestDump {
* baseline snapshot for the test-dump program.
*/
public Value getBaselineDumpedValue(String name) {
- return getDumpedValue(name, mBaseline);
+ return getDumpedValue(name, mBaselineMain);
}
/**
- * Returns the value of a field in the DumpedStuff instance in the
- * given snapshot for the test-dump program.
+ * Returns the value of a field in the DumpedStuff instance given the Main
+ * class object for the snapshot.
*/
- private Value getDumpedValue(String name, AhatSnapshot snapshot) {
- AhatClassObj main = snapshot.findClass("Main");
+ private static Value getDumpedValue(String name, AhatClassObj main) {
AhatInstance stuff = null;
for (FieldValue field : main.getStaticFieldValues()) {
if ("stuff".equals(field.name)) {
@@ -127,6 +137,33 @@ public class TestDump {
}
/**
+ * Returns a class object in the given heap dump whose name matches the
+ * given name, or null if no such class object could be found.
+ */
+ private static AhatClassObj findClass(AhatSnapshot snapshot, String name) {
+ Site root = snapshot.getRootSite();
+ Collection<AhatInstance> classes = new ArrayList<AhatInstance>();
+ root.getObjects(null, "java.lang.Class", classes);
+ for (AhatInstance inst : classes) {
+ if (inst.isClassObj()) {
+ AhatClassObj cls = inst.asClassObj();
+ if (name.equals(cls.getName())) {
+ return cls;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns a class object in the heap dump whose name matches the given
+ * name, or null if no such class object could be found.
+ */
+ public AhatClassObj findClass(String name) {
+ return findClass(mSnapshot, name);
+ }
+
+ /**
* Returns the value of a non-primitive field in the DumpedStuff instance in
* the snapshot for the test-dump program.
*/