diff --git a/compiler/src/org.graalvm.compiler.core/src/org/graalvm/compiler/core/CompilationWrapper.java b/compiler/src/org.graalvm.compiler.core/src/org/graalvm/compiler/core/CompilationWrapper.java
index 0e3bfe4eaea6..7fe39f89b871 100644
--- a/compiler/src/org.graalvm.compiler.core/src/org/graalvm/compiler/core/CompilationWrapper.java
+++ b/compiler/src/org.graalvm.compiler.core/src/org/graalvm/compiler/core/CompilationWrapper.java
@@ -31,6 +31,8 @@
import static org.graalvm.compiler.core.GraalCompilerOptions.MaxCompilationProblemsPerAction;
import static org.graalvm.compiler.core.common.GraalOptions.TrackNodeSourcePosition;
import static org.graalvm.compiler.debug.DebugOptions.Dump;
+import static org.graalvm.compiler.debug.DebugOptions.Time;
+import static org.graalvm.compiler.debug.DebugOptions.Count;
import static org.graalvm.compiler.debug.DebugOptions.DumpPath;
import static org.graalvm.compiler.debug.DebugOptions.MethodFilter;
import static org.graalvm.compiler.debug.DebugOptions.PrintBackendCFG;
@@ -336,6 +338,8 @@ protected T handleFailure(DebugContext initialDebug, Throwable cause) {
OptionValues retryOptions = new OptionValues(initialOptions,
Dump, ":" + DebugOptions.DiagnoseDumpLevel.getValue(initialOptions),
MethodFilter, null,
+ Count, "",
+ Time, "",
DumpPath, dumpPath,
PrintBackendCFG, true,
TrackNodeSourcePosition, true);
@@ -343,26 +347,38 @@ protected T handleFailure(DebugContext initialDebug, Throwable cause) {
ByteArrayOutputStream logBaos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(logBaos);
try (DebugContext retryDebug = createRetryDebugContext(initialDebug, retryOptions, ps)) {
- T res = performCompilation(retryDebug);
+ T res;
+ try {
+ res = performCompilation(retryDebug);
+ } finally {
+ ps.println("");
+ retryDebug.printMetrics(initialDebug.getDescription(), ps, true);
+ ps.println("");
+ }
ps.println("There was no exception during retry.");
- return postRetry(action, retryLogFile, logBaos, ps, res);
+ finalizeRetryLog(retryLogFile, logBaos, ps);
+ return postRetry(action, res);
} catch (Throwable e) {
ps.println("Exception during retry:");
e.printStackTrace(ps);
- return postRetry(action, retryLogFile, logBaos, ps, handleException(cause));
+ finalizeRetryLog(retryLogFile, logBaos, ps);
+ return postRetry(action, handleException(cause));
}
}
}
- private T postRetry(ExceptionAction action, String retryLogFile, ByteArrayOutputStream logBaos, PrintStream ps, T res) {
+ private T postRetry(ExceptionAction action, T res) {
+ maybeExitVM(action);
+ return res;
+ }
+
+ private static void finalizeRetryLog(String retryLogFile, ByteArrayOutputStream logBaos, PrintStream ps) {
ps.close();
try (OutputStream fos = PathUtilities.openOutputStream(retryLogFile, true)) {
fos.write(logBaos.toByteArray());
} catch (Throwable e) {
TTY.printf("Error writing to %s: %s%n", retryLogFile, e);
}
- maybeExitVM(action);
- return res;
}
/**
diff --git a/compiler/src/org.graalvm.compiler.debug/src/org/graalvm/compiler/debug/DebugContext.java b/compiler/src/org.graalvm.compiler.debug/src/org/graalvm/compiler/debug/DebugContext.java
index 3f6f7e9c9384..60100da3c6fc 100644
--- a/compiler/src/org.graalvm.compiler.debug/src/org/graalvm/compiler/debug/DebugContext.java
+++ b/compiler/src/org.graalvm.compiler.debug/src/org/graalvm/compiler/debug/DebugContext.java
@@ -2301,7 +2301,22 @@ private void printMetricsCSV(PrintStream out, Object compilable, Integer identit
}
/**
- * Appends metrics in a human readable format to {@code out} for a single method compilation.
+ * Prints the metrics in a human-readable format to {@code out} for a single method compilation.
+ *
+ * @param clear specifies if the metrics should be cleared after printing
+ */
+ public void printMetrics(Description desc, PrintStream out, boolean clear) {
+ if (metricValues == null) {
+ return;
+ }
+ printMetrics(out, desc.compilable, 0, 0, desc.identifier);
+ if (clear) {
+ metricValues = null;
+ }
+ }
+
+ /**
+ * Appends metrics in a human-readable format to {@code out} for a single method compilation.
*
* @param identity the identity hash code of {@code compilable}
* @param compilationNr where this compilation lies in the ordered sequence of all compilations
diff --git a/compiler/src/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/CompilationWrapperTest.java b/compiler/src/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/CompilationWrapperTest.java
index 466c52a8e1b4..c833b0f6586d 100644
--- a/compiler/src/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/CompilationWrapperTest.java
+++ b/compiler/src/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/CompilationWrapperTest.java
@@ -195,7 +195,7 @@ public void testTruffleCompilation3() throws IOException, InterruptedException {
"org.graalvm.compiler.truffle.test.SLTruffleGraalTestSuite", "test");
}
- private static final boolean VERBOSE = Boolean.getBoolean(CompilationWrapperTest.class.getSimpleName() + ".verbose");
+ private static final boolean VERBOSE = Boolean.getBoolean("CompilationWrapperTest.verbose");
private static void testHelper(List initialProbes, List extraVmArgs, String... mainClassAndArgs) throws IOException, InterruptedException {
final File dumpPath = new File(CompilationWrapperTest.class.getSimpleName() + "_" + System.currentTimeMillis()).getAbsoluteFile();
@@ -262,6 +262,12 @@ String test() {
entries.add(name);
if (name.endsWith(".bgv") || name.endsWith(".cfg")) {
bgvOrCfgFiles++;
+ } else if (name.endsWith("retry.log")) {
+ String log = new String(dd.getInputStream(ze).readAllBytes());
+ Pattern re = Pattern.compile(".*", Pattern.DOTALL);
+ if (!re.matcher(log).find()) {
+ Assert.fail(String.format("Could not find %s in %s:%n%s", re.pattern(), name, log));
+ }
}
}
if (bgvOrCfgFiles == 0) {
diff --git a/compiler/src/org.graalvm.compiler.test/src/org/graalvm/compiler/test/SubprocessUtil.java b/compiler/src/org.graalvm.compiler.test/src/org/graalvm/compiler/test/SubprocessUtil.java
index 470220790561..b403b3ce03dd 100644
--- a/compiler/src/org.graalvm.compiler.test/src/org/graalvm/compiler/test/SubprocessUtil.java
+++ b/compiler/src/org.graalvm.compiler.test/src/org/graalvm/compiler/test/SubprocessUtil.java
@@ -53,10 +53,8 @@ public final class SubprocessUtil {
/**
* The name of the boolean system property that can be set to preserve temporary files created
* as arguments files passed to the java launcher.
- *
- * @see "https://docs.oracle.com/javase/9/tools/java.htm#JSWOR-GUID-4856361B-8BFD-4964-AE84-121F5F6CF111"
*/
- public static final String KEEP_TEMPORARY_ARGUMENT_FILES_PROPERTY_NAME = "test." + SubprocessUtil.class.getSimpleName() + ".keepTempArgumentFiles";
+ public static final String KEEP_TEMPORARY_ARGUMENT_FILES_PROPERTY_NAME = "test.SubprocessUtil.keepTempArgumentFiles";
private SubprocessUtil() {
}