From 6f55382870cb26c908ae04ef4c73507a854abda5 Mon Sep 17 00:00:00 2001 From: Liu Fengyun Date: Sun, 26 Aug 2018 12:45:03 +0200 Subject: [PATCH 1/4] fail jhm on error --- bench/src/main/scala/Benchmarks.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/bench/src/main/scala/Benchmarks.scala b/bench/src/main/scala/Benchmarks.scala index b3224e6ee97b..411ff7593a5f 100644 --- a/bench/src/main/scala/Benchmarks.scala +++ b/bench/src/main/scala/Benchmarks.scala @@ -37,6 +37,7 @@ object Bench { val libs = System.getProperty("BENCH_CLASS_PATH") val opts = new OptionsBuilder() + .shouldFailOnError(true) .jvmArgsPrepend(s"-classpath $libs", "-Xms2G", "-Xmx2G") .mode(Mode.AverageTime) .timeUnit(TimeUnit.MILLISECONDS) From 8ea863b479eb0ffe9a8d32dc27abf36cec5d4ad2 Mon Sep 17 00:00:00 2001 From: Liu Fengyun Date: Sun, 26 Aug 2018 13:07:43 +0200 Subject: [PATCH 2/4] fix benchmarks The classpath is intended for type checking, not for compiler run-time. Thus, they should be passed as compiler options, not JVM options. It works before because the compiler makes bootstrap classpath available for type checking. However, we can no longer use bootstrap classpath after Java 9 support (#3138). --- bench/src/main/scala/Benchmarks.scala | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/bench/src/main/scala/Benchmarks.scala b/bench/src/main/scala/Benchmarks.scala index 411ff7593a5f..f3c7567c3d0d 100644 --- a/bench/src/main/scala/Benchmarks.scala +++ b/bench/src/main/scala/Benchmarks.scala @@ -34,11 +34,9 @@ object Bench { } storeCompileOptions(args2) - val libs = System.getProperty("BENCH_CLASS_PATH") - val opts = new OptionsBuilder() .shouldFailOnError(true) - .jvmArgsPrepend(s"-classpath $libs", "-Xms2G", "-Xmx2G") + .jvmArgs("-Xms2G", "-Xmx2G") .mode(Mode.AverageTime) .timeUnit(TimeUnit.MILLISECONDS) .warmupIterations(warmup) @@ -55,9 +53,13 @@ object Bench { def removeCompileOptions: Unit = new File(COMPILE_OPTS_FILE).delete() def storeCompileOptions(args: Array[String]): Unit = { + val libs = System.getProperty("BENCH_CLASS_PATH") + val file = new File(COMPILE_OPTS_FILE) val bw = new BufferedWriter(new FileWriter(file)) - bw.write(args.mkString("\n")) + bw.write(args.mkString("", "\n", "\n")) + bw.write("-classpath\n") + bw.write(libs) bw.close() } From 8412e00353423c0e803c7e16715bbf92b87e8e50 Mon Sep 17 00:00:00 2001 From: "Paolo G. Giarrusso" Date: Sun, 26 Aug 2018 15:35:47 +0200 Subject: [PATCH 3/4] Make benchmarks depend only on library classpath Testing that our benchmark program don't need to link against the compiler. Warning: This might make performance incomparable with earlier (similarly to other current changes. --- project/Build.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Build.scala b/project/Build.scala index e50bfa73362a..dabd615581fa 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -302,7 +302,7 @@ object Build { lazy val commonBenchmarkSettings = Seq( outputStrategy := Some(StdoutOutput), mainClass in (Jmh, run) := Some("dotty.tools.benchmarks.Bench"), // custom main for jmh:run - javaOptions += "-DBENCH_CLASS_PATH=" + Attributed.data((fullClasspath in Compile).value).mkString("", ":", "") + javaOptions += "-DBENCH_CLASS_PATH=" + Attributed.data((fullClasspath in (`dotty-library`, Compile)).value).mkString("", ":", "") ) // sbt >= 0.13.12 will automatically rewrite transitive dependencies on From 5ee3ad081bedfc0406c406da6f36f7af75acd4a8 Mon Sep 17 00:00:00 2001 From: "Paolo G. Giarrusso" Date: Sun, 26 Aug 2018 16:09:50 +0200 Subject: [PATCH 4/4] Address review comment --- project/Build.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Build.scala b/project/Build.scala index dabd615581fa..796788f9bedc 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -302,7 +302,7 @@ object Build { lazy val commonBenchmarkSettings = Seq( outputStrategy := Some(StdoutOutput), mainClass in (Jmh, run) := Some("dotty.tools.benchmarks.Bench"), // custom main for jmh:run - javaOptions += "-DBENCH_CLASS_PATH=" + Attributed.data((fullClasspath in (`dotty-library`, Compile)).value).mkString("", ":", "") + javaOptions += "-DBENCH_CLASS_PATH=" + Attributed.data((fullClasspath in (`dotty-library-bootstrapped`, Compile)).value).mkString("", ":", "") ) // sbt >= 0.13.12 will automatically rewrite transitive dependencies on