summaryrefslogtreecommitdiff
path: root/tools/ahat
diff options
context:
space:
mode:
Diffstat (limited to 'tools/ahat')
l---------tools/ahat/.clang-format1
-rw-r--r--tools/ahat/Android.bp2
-rwxr-xr-xtools/ahat/ahat.sh (renamed from tools/ahat/ahat)0
-rw-r--r--tools/ahat/etc/style.css25
-rw-r--r--tools/ahat/src/main/com/android/ahat/DocString.java8
-rw-r--r--tools/ahat/src/main/com/android/ahat/HtmlDoc.java15
-rw-r--r--tools/ahat/src/main/com/android/ahat/ObjectsHandler.java2
-rw-r--r--tools/ahat/src/main/com/android/ahat/OverviewHandler.java2
-rw-r--r--tools/ahat/src/main/com/android/ahat/SiteHandler.java2
-rw-r--r--tools/ahat/src/test-dump/Main.java4
-rw-r--r--tools/ahat/src/test/com/android/ahat/InstanceTest.java1
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();