Add timing diagnostics to Retrace
Bug: 148690192
Change-Id: I650324730f739b68ae6484a5716b59f732107719
diff --git a/src/main/java/com/android/tools/r8/retrace/Retrace.java b/src/main/java/com/android/tools/r8/retrace/Retrace.java
index 057875d..0edcea8 100644
--- a/src/main/java/com/android/tools/r8/retrace/Retrace.java
+++ b/src/main/java/com/android/tools/r8/retrace/Retrace.java
@@ -16,6 +16,7 @@
import com.android.tools.r8.utils.OptionsParsing.ParseContext;
import com.android.tools.r8.utils.StringDiagnostic;
import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.Timing;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -118,10 +119,14 @@
*/
public static void run(RetraceCommand command) {
try {
+ Timing timing = Timing.create("R8 retrace", command.printMemory());
+ timing.begin("Read proguard map");
ClassNameMapper classNameMapper =
ClassNameMapper.mapperFromString(command.proguardMapProducer.get());
+ timing.end();
RetraceBase retraceBase = RetraceBaseImpl.create(classNameMapper);
RetraceCommandLineResult result;
+ timing.begin("Parse and Retrace");
if (command.regularExpression != null) {
result =
new RetraceRegularExpression(
@@ -136,7 +141,13 @@
retraceBase, command.stackTrace, command.diagnosticsHandler, command.isVerbose)
.retrace();
}
+ timing.end();
+ timing.begin("Report result");
command.retracedStackTraceConsumer.accept(result.getNodes());
+ timing.end();
+ if (command.printTimes()) {
+ timing.report();
+ }
} catch (IOException ex) {
command.diagnosticsHandler.error(
new StringDiagnostic("Could not open mapping input stream: " + ex.getMessage()));
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceCommand.java b/src/main/java/com/android/tools/r8/retrace/RetraceCommand.java
index 93addc4..64cf59a 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceCommand.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceCommand.java
@@ -40,6 +40,14 @@
assert this.retracedStackTraceConsumer != null;
}
+ public boolean printTimes() {
+ return System.getProperty("com.android.tools.r8.printtimes") != null;
+ }
+
+ public boolean printMemory() {
+ return System.getProperty("com.android.tools.r8.printmemory") != null;
+ }
+
/**
* Utility method for obtaining a RetraceCommand builder.
*
diff --git a/src/main/java/com/android/tools/r8/utils/Timing.java b/src/main/java/com/android/tools/r8/utils/Timing.java
index 78c1b44..5652476 100644
--- a/src/main/java/com/android/tools/r8/utils/Timing.java
+++ b/src/main/java/com/android/tools/r8/utils/Timing.java
@@ -75,6 +75,10 @@
: Timing.empty();
}
+ public static Timing create(String title, boolean printMemory) {
+ return new Timing(title, printMemory);
+ }
+
private final Node top;
private final Stack<Node> stack;
private final boolean trackMemory;