diff options
Diffstat (limited to 'tools/ahat')
| l--------- | tools/ahat/.clang-format | 1 | ||||
| -rw-r--r-- | tools/ahat/Android.bp | 2 | ||||
| -rwxr-xr-x | tools/ahat/ahat.sh (renamed from tools/ahat/ahat) | 0 | ||||
| -rw-r--r-- | tools/ahat/etc/style.css | 25 | ||||
| -rw-r--r-- | tools/ahat/src/main/com/android/ahat/DocString.java | 8 | ||||
| -rw-r--r-- | tools/ahat/src/main/com/android/ahat/HtmlDoc.java | 15 | ||||
| -rw-r--r-- | tools/ahat/src/main/com/android/ahat/ObjectsHandler.java | 2 | ||||
| -rw-r--r-- | tools/ahat/src/main/com/android/ahat/OverviewHandler.java | 2 | ||||
| -rw-r--r-- | tools/ahat/src/main/com/android/ahat/SiteHandler.java | 2 | ||||
| -rw-r--r-- | tools/ahat/src/test-dump/Main.java | 4 | ||||
| -rw-r--r-- | tools/ahat/src/test/com/android/ahat/InstanceTest.java | 1 |
11 files changed, 52 insertions, 10 deletions
diff --git a/tools/ahat/.clang-format b/tools/ahat/.clang-format new file mode 120000 index 0000000000..88ab38e627 --- /dev/null +++ b/tools/ahat/.clang-format @@ -0,0 +1 @@ +../../.clang-format-java-2
\ No newline at end of file diff --git a/tools/ahat/Android.bp b/tools/ahat/Android.bp index affa2e0585..5f6ba819fc 100644 --- a/tools/ahat/Android.bp +++ b/tools/ahat/Android.bp @@ -27,7 +27,7 @@ java_binary_host { visibility: [ "//libcore/metrictests/memory/host", ], - wrapper: "ahat", + wrapper: "ahat.sh", srcs: ["src/main/**/*.java"], manifest: "etc/ahat.mf", java_resources: ["etc/style.css"], diff --git a/tools/ahat/ahat b/tools/ahat/ahat.sh index 77c1d6e430..77c1d6e430 100755 --- a/tools/ahat/ahat +++ b/tools/ahat/ahat.sh diff --git a/tools/ahat/etc/style.css b/tools/ahat/etc/style.css index 47fae1d551..83e5b20c3c 100644 --- a/tools/ahat/etc/style.css +++ b/tools/ahat/etc/style.css @@ -14,6 +14,11 @@ * limitations under the License. */ +html { + /* Roboto has tabular numbers, use it if available, fallback to other sans. */ + font-family: "Roboto", "Arial", "sans-serif"; +} + div.menu { background-color: #eeffff; } @@ -39,3 +44,23 @@ table th { padding-left: 8px; padding-right: 8px; } + +.sidebar { + position: fixed; + right: 0; + top: 48px; + padding-left: 12px; + padding-right: 24px; + font-size: small; + border-left: 4px solid #dcedc8; +} + +.sidebar a { + text-decoration: none; + color: #4285f4; +} + +.sidebar a:hover { + text-decoration: underline; + color: #073042; +}
\ No newline at end of file diff --git a/tools/ahat/src/main/com/android/ahat/DocString.java b/tools/ahat/src/main/com/android/ahat/DocString.java index eda9b383c4..ca5dbf06ce 100644 --- a/tools/ahat/src/main/com/android/ahat/DocString.java +++ b/tools/ahat/src/main/com/android/ahat/DocString.java @@ -136,7 +136,7 @@ class DocString { if (isPlaceHolder) { string.append(DocString.removed("del")); } else if (size != 0) { - string.appendFormat("%,14d", size); + string.appendFormat("%,d", size); } return string; } @@ -162,13 +162,13 @@ class DocString { public DocString appendDelta(boolean noCurrent, boolean noBaseline, long current, long baseline) { if (noCurrent) { - append(removed(format("%+,14d", 0 - baseline))); + append(removed(format("%+,d", 0 - baseline))); } else if (noBaseline) { append(added("new")); } else if (current > baseline) { - append(added(format("%+,14d", current - baseline))); + append(added(format("%+,d", current - baseline))); } else if (current < baseline) { - append(removed(format("%+,14d", current - baseline))); + append(removed(format("%+,d", current - baseline))); } return this; } diff --git a/tools/ahat/src/main/com/android/ahat/HtmlDoc.java b/tools/ahat/src/main/com/android/ahat/HtmlDoc.java index d5106dc1dd..6c3ab2fe3e 100644 --- a/tools/ahat/src/main/com/android/ahat/HtmlDoc.java +++ b/tools/ahat/src/main/com/android/ahat/HtmlDoc.java @@ -18,6 +18,7 @@ package com.android.ahat; import java.io.PrintStream; import java.net.URI; +import java.util.ArrayList; import java.util.List; /** @@ -26,6 +27,7 @@ import java.util.List; class HtmlDoc implements Doc { private PrintStream ps; private Column[] mCurrentTableColumns; + private List<String> mSections; /** * Create an HtmlDoc that writes to the given print stream. @@ -34,6 +36,7 @@ class HtmlDoc implements Doc { */ public HtmlDoc(PrintStream ps, DocString title, URI style) { this.ps = ps; + mSections = new ArrayList<>(); ps.println("<!DOCTYPE html>"); ps.println("<html>"); @@ -59,9 +62,10 @@ class HtmlDoc implements Doc { @Override public void section(String title) { - ps.print("<h2>"); + ps.format("<h2 id=\"%d\">", mSections.size()); ps.print(DocString.text(title).html()); ps.println(":</h2>"); + mSections.add(title); } @Override @@ -182,8 +186,17 @@ class HtmlDoc implements Doc { mCurrentTableColumns = null; } + private void sidebar() { + ps.println("<div class=\"sidebar\">"); + for (int i = 0; i < mSections.size(); i++) { + ps.format("<p><a href=\"#%d\">%s</a></p>", i, mSections.get(i)); + } + ps.println("</div>"); + } + @Override public void close() { + sidebar(); ps.println("</body>"); ps.println("</html>"); ps.close(); diff --git a/tools/ahat/src/main/com/android/ahat/ObjectsHandler.java b/tools/ahat/src/main/com/android/ahat/ObjectsHandler.java index 81611b6c72..4cdbaf4270 100644 --- a/tools/ahat/src/main/com/android/ahat/ObjectsHandler.java +++ b/tools/ahat/src/main/com/android/ahat/ObjectsHandler.java @@ -111,7 +111,7 @@ class ObjectsHandler implements AhatHandler { heapChoice.append(")"); doc.description(DocString.text("Heap"), heapChoice); - doc.description(DocString.text("Count"), DocString.format("%,14d", insts.size())); + doc.description(DocString.text("Count"), DocString.format("%,d", insts.size())); doc.end(); doc.println(DocString.text("")); diff --git a/tools/ahat/src/main/com/android/ahat/OverviewHandler.java b/tools/ahat/src/main/com/android/ahat/OverviewHandler.java index 5f0b473d1d..c6f4a54080 100644 --- a/tools/ahat/src/main/com/android/ahat/OverviewHandler.java +++ b/tools/ahat/src/main/com/android/ahat/OverviewHandler.java @@ -57,8 +57,6 @@ class OverviewHandler implements AhatHandler { doc.section("Bytes Retained by Heap"); printHeapSizes(doc); - - doc.big(Menu.getMenu()); } private void printHeapSizes(Doc doc) { diff --git a/tools/ahat/src/main/com/android/ahat/SiteHandler.java b/tools/ahat/src/main/com/android/ahat/SiteHandler.java index 5093f0d43e..671784efca 100644 --- a/tools/ahat/src/main/com/android/ahat/SiteHandler.java +++ b/tools/ahat/src/main/com/android/ahat/SiteHandler.java @@ -102,7 +102,7 @@ class SiteHandler implements AhatHandler { DocString.link( DocString.formattedUri("objects?id=%d&heap=%s&class=%s", site.getId(), info.heap.getName(), className), - DocString.format("%,14d", info.numInstances)), + DocString.format("%,d", info.numInstances)), DocString.delta(false, false, info.numInstances, baseinfo.numInstances), DocString.text(info.heap.getName()), Summarizer.summarize(info.classObj)); diff --git a/tools/ahat/src/test-dump/Main.java b/tools/ahat/src/test-dump/Main.java index 2e2907690d..711d66200c 100644 --- a/tools/ahat/src/test-dump/Main.java +++ b/tools/ahat/src/test-dump/Main.java @@ -43,6 +43,10 @@ public class Main { // Allocate the instance of DumpedStuff. stuff = new DumpedStuff(baseline); + // Preemptively garbage collect to avoid an inopportune GC triggering + // after this. + Runtime.getRuntime().gc(); + // Create a bunch of unreachable objects pointing to basicString for the // reverseReferencesAreNotUnreachable test for (int i = 0; i < 100; i++) { diff --git a/tools/ahat/src/test/com/android/ahat/InstanceTest.java b/tools/ahat/src/test/com/android/ahat/InstanceTest.java index 376122ba23..1f290304c0 100644 --- a/tools/ahat/src/test/com/android/ahat/InstanceTest.java +++ b/tools/ahat/src/test/com/android/ahat/InstanceTest.java @@ -224,6 +224,7 @@ public class InstanceTest { @Test public void reachability() throws IOException { TestDump dump = TestDump.getTestDump(); + // We were careful to avoid GC before dumping, so nothing here should be null. AhatInstance strong1 = dump.getDumpedAhatInstance("reachabilityReferenceChain"); AhatInstance soft1 = strong1.getField("referent").asAhatInstance(); AhatInstance strong2 = soft1.getField("referent").asAhatInstance(); |