Fold output of each benchmark (#10914)

This commit is contained in:
Jaroslav Tulach 2024-09-09 12:30:22 +02:00 committed by GitHub
parent a86e37b36f
commit 89c5b31144
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 121 additions and 4 deletions

View File

@ -469,7 +469,21 @@ pub fn spawn_log_processor(
match String::from_utf8(line_bytes) { match String::from_utf8(line_bytes) {
Ok(line) => { Ok(line) => {
let line = line.trim_end_matches('\r'); let line = line.trim_end_matches('\r');
info!("{prefix} {line}"); let mut command = false;
if let Some(command_at) = line.find("::") {
if let Some(group_at) = line.find("group") {
// we support: `::group` and `::endgroup` right now
if command_at < group_at && group_at < command_at + 10 {
let line_without_prefix = &line[command_at..];
// intentionally using println to avoid info!'s prefix
println!("{line_without_prefix}");
command = true;
}
}
}
if !command {
info!("{prefix} {line}");
}
} }
Err(e) => { Err(e) => {
error!("{prefix} Failed to decode a line from output: {e}"); error!("{prefix} Failed to decode a line from output: {e}");

View File

@ -5,11 +5,19 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import org.openjdk.jmh.infra.BenchmarkParams;
import org.openjdk.jmh.infra.IterationParams;
import org.openjdk.jmh.results.BenchmarkResult;
import org.openjdk.jmh.results.IterationResult;
import org.openjdk.jmh.results.RunResult; import org.openjdk.jmh.results.RunResult;
import org.openjdk.jmh.runner.Defaults;
import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException; import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.format.OutputFormat;
import org.openjdk.jmh.runner.format.OutputFormatFactory;
import org.openjdk.jmh.runner.options.CommandLineOptionException; import org.openjdk.jmh.runner.options.CommandLineOptionException;
import org.openjdk.jmh.runner.options.CommandLineOptions; import org.openjdk.jmh.runner.options.CommandLineOptions;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder; import org.openjdk.jmh.runner.options.OptionsBuilder;
import org.openjdk.jmh.runner.options.TimeValue; import org.openjdk.jmh.runner.options.TimeValue;
@ -18,6 +26,9 @@ public class BenchmarksRunner {
public static final File REPORT_FILE = new File("./bench-report.xml"); public static final File REPORT_FILE = new File("./bench-report.xml");
public static void run(String[] args) throws RunnerException { public static void run(String[] args) throws RunnerException {
if (args.length == 0) {
args = new String[] {"--jvmArgs=-Dbench.all=true"};
}
CommandLineOptions cmdOpts = null; CommandLineOptions cmdOpts = null;
try { try {
cmdOpts = new CommandLineOptions(args); cmdOpts = new CommandLineOptions(args);
@ -31,7 +42,7 @@ public class BenchmarksRunner {
// Do not report results from `compileOnly` mode // Do not report results from `compileOnly` mode
runCompileOnly(cmdOpts.getIncludes()); runCompileOnly(cmdOpts.getIncludes());
} else { } else {
Runner jmhRunner = new Runner(cmdOpts); var jmhRunner = createRunner(cmdOpts);
if (cmdOpts.shouldHelp()) { if (cmdOpts.shouldHelp()) {
System.err.println("Enso benchmark runner: A modified JMH runner for Enso benchmarks."); System.err.println("Enso benchmark runner: A modified JMH runner for Enso benchmarks.");
@ -82,7 +93,7 @@ public class BenchmarksRunner {
.forks(0); .forks(0);
includes.forEach(optsBuilder::include); includes.forEach(optsBuilder::include);
var opts = optsBuilder.build(); var opts = optsBuilder.build();
var runner = new Runner(opts); var runner = createRunner(opts);
try { try {
runner.run(); runner.run();
System.out.println( System.out.println(
@ -107,4 +118,84 @@ public class BenchmarksRunner {
Report.writeToFile(report, REPORT_FILE); Report.writeToFile(report, REPORT_FILE);
return benchItem; return benchItem;
} }
private static Runner createRunner(Options cmdOpts) {
var output =
OutputFormatFactory.createFormatInstance(
System.out, cmdOpts.verbosity().orElse(Defaults.VERBOSITY));
Runner jmhRunner = new Runner(cmdOpts, new GitHubActionsFormat(output));
return jmhRunner;
}
private static final class GitHubActionsFormat implements OutputFormat {
private final OutputFormat output;
GitHubActionsFormat(OutputFormat output) {
this.output = output;
}
@Override
public void iteration(BenchmarkParams benchParams, IterationParams params, int iteration) {
output.iteration(benchParams, params, iteration);
}
@Override
public void iterationResult(
BenchmarkParams benchParams, IterationParams params, int iteration, IterationResult data) {
output.iterationResult(benchParams, params, iteration, data);
}
@Override
public void startBenchmark(BenchmarkParams benchParams) {
output.println("::group::" + benchParams.getBenchmark());
}
@Override
public void endBenchmark(BenchmarkResult result) {
output.println("::endgroup::");
}
@Override
public void startRun() {
output.startRun();
}
@Override
public void endRun(Collection<RunResult> result) {
output.endRun(result);
}
@Override
public void print(String s) {
output.print(s);
}
@Override
public void println(String s) {
output.println(s);
}
@Override
public void flush() {
output.flush();
}
@Override
public void close() {}
@Override
public void verbosePrintln(String s) {
output.verbosePrintln(s);
}
@Override
public void write(int b) {
output.write(b);
}
@Override
public void write(byte[] b) throws IOException {
output.write(b);
}
}
} }

View File

@ -347,7 +347,19 @@ public class BenchProcessor extends AbstractProcessor {
@TearDown @TearDown
public void checkNoTruffleCompilation(BenchmarkParams params) { public void checkNoTruffleCompilation(BenchmarkParams params) {
if (compilationMessagesFound) { if (compilationMessagesFound) {
System.err.println(compilationLog.toString()); var limit = Boolean.getBoolean("bench.all") ? 10 : Integer.MAX_VALUE;
for (var l : compilationLog.toString().split("\\n")) {
var pipe = l.indexOf('|');
if (pipe > 0) {
l = l.substring(0, pipe);
}
System.out.println(l);
if (limit-- <= 0) {
System.out.println("... to see more use:");
System.out.println("benchOnly " + params.getBenchmark());
break;
}
}
} }
} }