diff --git a/jastadd-mquat-benchmark/src/main/java/de/tudresden/inf/st/mquat/benchmark/FullBenchmarkMain.java b/jastadd-mquat-benchmark/src/main/java/de/tudresden/inf/st/mquat/benchmark/FullBenchmarkMain.java index 706ff95be0466597507193a68048e79342862687..4fcbbe0658242d11cb4a0673b63eb4e42982aa71 100644 --- a/jastadd-mquat-benchmark/src/main/java/de/tudresden/inf/st/mquat/benchmark/FullBenchmarkMain.java +++ b/jastadd-mquat-benchmark/src/main/java/de/tudresden/inf/st/mquat/benchmark/FullBenchmarkMain.java @@ -32,12 +32,20 @@ public class FullBenchmarkMain { static class InvokeJavaVMBenchmark extends Benchmark { BenchmarkSettings settings; int repetitions; + private boolean useGradleConnection = false; + private final String gradleCommand = System.getProperty("os.name") + .toLowerCase().contains("windows") ? "./gradle.bat" : "./gradlew"; InvokeJavaVMBenchmark(BenchmarkSettings settings, int repetitions) { this.settings = settings; this.repetitions = repetitions; } + InvokeJavaVMBenchmark setUseGradleConnection(boolean useGradleConnection) { + this.useGradleConnection = useGradleConnection; + return this; + } + @Override public void run() { for (int i = 0; i < this.repetitions; i++) { @@ -49,21 +57,46 @@ public class FullBenchmarkMain { logger.catching(e); throw new RuntimeException("Could not create temporary file for sandBoxed use. Exiting."); } - // invoke Gradle target - ProjectConnection connection = GradleConnector.newConnector() - .forProjectDirectory(new File(".")) - .connect(); - try { - connection.newBuild() - .forTasks("sandboxRun") - .withArguments("-PrunSettingsFile=" + tempPath.toAbsolutePath().toString()) - .setStandardOutput(System.out) - .run(); - } finally { - connection.close(); + if (useGradleConnection) { + // invoke Gradle target directly + ProjectConnection connection = GradleConnector.newConnector() + .forProjectDirectory(new File(".")) + .connect(); + try { + connection.newBuild() + .forTasks("sandboxRun") + .withArguments("-PrunSettingsFile=" + tempPath.toAbsolutePath().toString()) + .setStandardOutput(System.out) + .run(); + } finally { + connection.close(); + } + } else { + // start a new process calling gradle + File currentDir = getCurrentDir(); + try { + ProcessBuilder pb = new ProcessBuilder(gradleCommand, "sandboxRun", + "-PrunSettingsFile=" + tempPath.toAbsolutePath().toString()); + pb.redirectOutput(ProcessBuilder.Redirect.INHERIT); + pb.redirectError(ProcessBuilder.Redirect.INHERIT); + pb.directory(currentDir); + Process p = pb.start(); + p.waitFor(); + } catch (IOException | InterruptedException e) { + e.printStackTrace(); + } } } } + + private File getCurrentDir() { + // hacky solution to get to the root of the repository + File maybeCurrentDir = new File("").getAbsoluteFile(); + if ("jastadd-mquat-benchmark".equals(maybeCurrentDir.getName())) { + maybeCurrentDir = maybeCurrentDir.getParentFile(); + } + return maybeCurrentDir; + } } public static void main(String[] args) { @@ -95,7 +128,7 @@ public class FullBenchmarkMain { .map(SolverFactory::getSolverByName).collect(Collectors.toList()); return settings.scenarios.stream() .filter(data -> takeAll || allowedIds.contains(data.getId()) || allowedNames.contains(data.name)) - .map(data -> create(from(settings, data), solvers, settings.repetitions, settings.sandBoxed)) + .map(data -> create(settings, data, solvers)) .collect(Collectors.toList()); } @@ -143,10 +176,15 @@ public class FullBenchmarkMain { return result; } - private static Benchmark create(BenchmarkSettings settings, List<BenchmarkableSolver> solvers, int repetitions, boolean sandBoxed) { - return sandBoxed ? - new InvokeJavaVMBenchmark(settings, repetitions) : - new ScenarioBenchmark(settings, solvers, repetitions); + private static Benchmark create(ScenarioSettings scenarioSettings, ScenarioData data, + List<BenchmarkableSolver> solvers) { + BenchmarkSettings settings = from(scenarioSettings, data); + if (scenarioSettings.sandBoxed) { + return new InvokeJavaVMBenchmark(settings, scenarioSettings.repetitions) + .setUseGradleConnection(scenarioSettings.useGradleConnection); + } else { + return new ScenarioBenchmark(settings, solvers, scenarioSettings.repetitions); + } } } diff --git a/jastadd-mquat-benchmark/src/main/java/de/tudresden/inf/st/mquat/benchmark/data/ScenarioSettings.java b/jastadd-mquat-benchmark/src/main/java/de/tudresden/inf/st/mquat/benchmark/data/ScenarioSettings.java index 9614f3fc64696c3649929325850e117b905d8f41..3d2fa733087fc1e52d0519114e0a7e83afc0b7b7 100644 --- a/jastadd-mquat-benchmark/src/main/java/de/tudresden/inf/st/mquat/benchmark/data/ScenarioSettings.java +++ b/jastadd-mquat-benchmark/src/main/java/de/tudresden/inf/st/mquat/benchmark/data/ScenarioSettings.java @@ -17,4 +17,5 @@ public class ScenarioSettings { public int repetitions = 1; public List<ScenarioData> scenarios; public boolean sandBoxed; + public boolean useGradleConnection = false; }