< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.debug/src/org/graalvm/compiler/debug/DebugContext.java

Print this page

        

*** 27,39 **** --- 27,41 ---- import static org.graalvm.compiler.debug.DebugOptions.Count; import static org.graalvm.compiler.debug.DebugOptions.Counters; import static org.graalvm.compiler.debug.DebugOptions.Dump; import static org.graalvm.compiler.debug.DebugOptions.DumpOnError; import static org.graalvm.compiler.debug.DebugOptions.DumpOnPhaseChange; + import static org.graalvm.compiler.debug.DebugOptions.DumpPath; import static org.graalvm.compiler.debug.DebugOptions.ListMetrics; import static org.graalvm.compiler.debug.DebugOptions.Log; import static org.graalvm.compiler.debug.DebugOptions.MemUseTrackers; + import static org.graalvm.compiler.debug.DebugOptions.ShowDumpFiles; import static org.graalvm.compiler.debug.DebugOptions.Time; import static org.graalvm.compiler.debug.DebugOptions.Timers; import static org.graalvm.compiler.debug.DebugOptions.TrackMemUse; import java.io.ByteArrayOutputStream;
*** 54,63 **** --- 56,66 ---- import java.util.SortedMap; import java.util.TreeMap; import org.graalvm.compiler.options.OptionKey; import org.graalvm.compiler.options.OptionValues; + import org.graalvm.graphio.GraphOutput; import org.graalvm.util.EconomicMap; import org.graalvm.util.EconomicSet; import org.graalvm.util.Pair; import jdk.vm.ci.meta.JavaMethod;
*** 96,105 **** --- 99,110 ---- ScopeImpl currentScope; CloseableCounter currentTimer; CloseableCounter currentMemUseTracker; Scope lastClosedScope; Throwable lastExceptionThrown; + private IgvDumpChannel sharedChannel; + private GraphOutput<?, ?> parentOutput; /** * Stores the {@link MetricKey} values. */ private long[] metricValues;
*** 109,118 **** --- 114,136 ---- */ public boolean areScopesEnabled() { return immutable.scopesEnabled; } + public <G, N, M> GraphOutput<G, M> buildOutput(GraphOutput.Builder<G, N, M> builder) throws IOException { + if (parentOutput != null) { + return builder.build(parentOutput); + } else { + if (sharedChannel == null) { + sharedChannel = new IgvDumpChannel(() -> getDumpPath(".bgv", false), immutable.options); + } + final GraphOutput<G, M> output = builder.build(sharedChannel); + parentOutput = output; + return output; + } + } + /** * The immutable configuration that can be shared between {@link DebugContext} objects. */ static final class Immutable {
*** 321,330 **** --- 339,356 ---- @Override public String toString() { String compilableName = compilable instanceof JavaMethod ? ((JavaMethod) compilable).format("%H.%n(%p)%R") : String.valueOf(compilable); return identifier + ":" + compilableName; } + + final String getLabel() { + if (compilable instanceof JavaMethod) { + JavaMethod method = (JavaMethod) compilable; + return method.format("%h.%n(%p)%r"); + } + return String.valueOf(compilable); + } } private final Description description; /**
*** 392,401 **** --- 418,441 ---- } else { metricsEnabled = immutable.hasUnscopedMetrics() || immutable.listMetrics; } } + public Path getDumpPath(String extension, boolean directory) { + try { + String id = description == null ? null : description.identifier; + String label = description == null ? null : description.getLabel(); + Path result = PathUtilities.createUnique(immutable.options, DumpPath, id, label, extension, directory); + if (ShowDumpFiles.getValue(immutable.options)) { + TTY.println("Dumping debug output to %s", result.toAbsolutePath().toString()); + } + return result; + } catch (IOException ex) { + throw rethrowSilently(RuntimeException.class, ex); + } + } + /** * A special dump level that indicates the dumping machinery is enabled but no dumps will be * produced except through other options. */ public static final int ENABLED_LEVEL = 0;
*** 2041,2046 **** --- 2081,2091 ---- for (Map.Entry<String, String> e : res.entrySet()) { out.printf("%-" + String.valueOf(maxKeyWidth) + "s = %20s%n", e.getKey(), e.getValue()); } out.println(); } + + @SuppressWarnings({"unused", "unchecked"}) + private static <E extends Exception> E rethrowSilently(Class<E> type, Throwable ex) throws E { + throw (E) ex; + } }
< prev index next >