diff options
author | 2017-10-09 09:23:03 +0100 | |
---|---|---|
committer | 2017-10-09 09:38:33 +0100 | |
commit | d94acefd62012791b09d51d54b39538d5f96eb41 (patch) | |
tree | cb548849892422ace16bcdea4ceda0dfc70a975e | |
parent | 25ae37970757ab06bb75b63a933926a4db4bb38d (diff) |
Revert "Don't show sizes with sample paths."
This reverts commit 4c0fe0240aaca472a045174d24b0846da33242d5.
Bug: 67234670
Test: m ahat-test
Test: Manually inspect some sample paths.
Change-Id: I66b32c3a7d19d9da7d56ab162313932411c9bbff
-rw-r--r-- | tools/ahat/src/ObjectHandler.java | 50 |
1 files changed, 41 insertions, 9 deletions
diff --git a/tools/ahat/src/ObjectHandler.java b/tools/ahat/src/ObjectHandler.java index 79f8b76c92..8a943477b8 100644 --- a/tools/ahat/src/ObjectHandler.java +++ b/tools/ahat/src/ObjectHandler.java @@ -19,6 +19,7 @@ package com.android.ahat; import com.android.ahat.heapdump.AhatArrayInstance; import com.android.ahat.heapdump.AhatClassInstance; import com.android.ahat.heapdump.AhatClassObj; +import com.android.ahat.heapdump.AhatHeap; import com.android.ahat.heapdump.AhatInstance; import com.android.ahat.heapdump.AhatSnapshot; import com.android.ahat.heapdump.DiffFields; @@ -264,16 +265,47 @@ class ObjectHandler implements AhatHandler { private void printGcRootPath(Doc doc, Query query, AhatInstance inst) { doc.section("Sample Path from GC Root"); List<PathElement> path = inst.getPathFromGcRoot(); - doc.table(new Column(""), new Column("Path Element")); - doc.row(DocString.text("(rooted)"), - DocString.link(DocString.uri("root"), DocString.text("ROOT"))); - for (PathElement element : path) { - DocString label = DocString.text("→ "); - label.append(Summarizer.summarize(element.instance)); - label.append(element.field); - doc.row(DocString.text(element.isDominator ? "(dominator)" : ""), label); + + // Add a dummy PathElement as a marker for the root. + final PathElement root = new PathElement(null, null); + path.add(0, root); + + HeapTable.TableConfig<PathElement> table = new HeapTable.TableConfig<PathElement>() { + public String getHeapsDescription() { + return "Bytes Retained by Heap (Dominators Only)"; + } + + public long getSize(PathElement element, AhatHeap heap) { + if (element == root) { + return heap.getSize().getSize(); + } + if (element.isDominator) { + return element.instance.getRetainedSize(heap).getSize(); + } + return 0; + } + + public List<HeapTable.ValueConfig<PathElement>> getValueConfigs() { + HeapTable.ValueConfig<PathElement> value = new HeapTable.ValueConfig<PathElement>() { + public String getDescription() { + return "Path Element"; + } + + public DocString render(PathElement element) { + if (element == root) { + return DocString.link(DocString.uri("rooted"), DocString.text("ROOT")); + } else { + DocString label = DocString.text("→ "); + label.append(Summarizer.summarize(element.instance)); + label.append(element.field); + return label; + } + } + }; + return Collections.singletonList(value); + } }; - doc.end(); + HeapTable.render(doc, query, DOMINATOR_PATH_ID, table, mSnapshot, path); } public void printDominatedObjects(Doc doc, Query query, AhatInstance inst) { |