# HG changeset patch # User Lukas Stadler # Date 1365756628 -7200 # Node ID 0279403fc3c965fd2b97ce6c85c99394f9ca9b03 # Parent 8e093f170343366253604ac814f65029b524f502 make GraalOptions.BenchmarkDynamicCounters configurable diff -r 8e093f170343 -r 0279403fc3c9 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java Thu Apr 11 18:37:26 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java Fri Apr 12 10:50:28 2013 +0200 @@ -37,6 +37,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.debug.*; import com.oracle.graal.debug.internal.*; +import com.oracle.graal.graph.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.debug.*; import com.oracle.graal.hotspot.meta.*; @@ -204,9 +205,22 @@ t.start(); } - if (GraalOptions.BenchmarkDynamicCounters) { - System.setErr(new PrintStream(new BenchmarkCountersOutputStream(System.err, " starting =====", " PASSED in ", "\n"))); - System.setOut(new PrintStream(new BenchmarkCountersOutputStream(System.out, "Iteration ~ (~s) begins: ", "Iteration ~ (~s) ends: ", "\n"))); + if (GraalOptions.BenchmarkDynamicCounters != null) { + String[] arguments = GraalOptions.BenchmarkDynamicCounters.split(","); + if (arguments.length == 0 || (arguments.length % 3) != 0) { + throw new GraalInternalError("invalid arguments to BenchmarkDynamicCounters: (err|out),start,end,(err|out),start,end,... (~ matches multiple digits)"); + } + for (int i = 0; i < arguments.length; i += 3) { + if (arguments[i].equals("err")) { + System.setErr(new PrintStream(new BenchmarkCountersOutputStream(System.err, arguments[i + 1], arguments[i + 2]))); + } else if (arguments[i].equals("out")) { + System.setOut(new PrintStream(new BenchmarkCountersOutputStream(System.out, arguments[i + 1], arguments[i + 2]))); + } else { + throw new GraalInternalError("invalid arguments to BenchmarkDynamicCounters: err|out"); + } + // dacapo: "err, starting =====, PASSED in " + // specjvm2008: "out,Iteration ~ (~s) begins: ,Iteration ~ (~s) ends: " + } DynamicCounterNode.excludedClassPrefix = "Lcom/oracle/graal/"; DynamicCounterNode.enabled = true; } @@ -221,8 +235,8 @@ private long startTime; private boolean waitingForEnd; - private BenchmarkCountersOutputStream(PrintStream delegate, String... patterns) { - super(delegate, patterns); + private BenchmarkCountersOutputStream(PrintStream delegate, String start, String end) { + super(delegate, new String[]{start, end, "\n"}); } @Override diff -r 8e093f170343 -r 0279403fc3c9 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java Thu Apr 11 18:37:26 2013 +0200 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java Fri Apr 12 10:50:28 2013 +0200 @@ -128,7 +128,7 @@ public static String MethodFilter = null; public static boolean DumpOnError = ____; public static boolean GenericDynamicCounters = ____; - public static boolean BenchmarkDynamicCounters = ____; + public static String BenchmarkDynamicCounters = null; // Ideal graph visualizer output settings public static boolean PrintBinaryGraphs = true;