From be4dbf2dcd3fe7886f1a608b6d3be43ca8d01cae Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Tue, 21 Jul 2020 12:16:33 +0300 Subject: [PATCH] Create gradle scripts to run and analyze benchmark results --- benchmarks/build.gradle.kts | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/benchmarks/build.gradle.kts b/benchmarks/build.gradle.kts index a7b8a1896b3..4de32aa649a 100644 --- a/benchmarks/build.gradle.kts +++ b/benchmarks/build.gradle.kts @@ -110,3 +110,38 @@ tasks.named("classes") { } } } + +tasks.register("runBenchmark") { + val jmhArgs: String by project // example: -PjmhArgs='CommonCalls -p size=500 -p isIR=true -p useNI=true -f 1' + val resultFilePath = "$buildDir/benchmarks/jmh-result.json" + val ideaHome = intellijRootDir().canonicalPath + + val benchmarkJarPath = "$buildDir/benchmarks/main/jars/benchmarks.jar" + args = mutableListOf("-Didea.home.path=$ideaHome", benchmarkJarPath, "-rf", "json", "-rff", resultFilePath) + jmhArgs.split("\\s".toRegex()) + main = "-jar" + + + doLast { + if (project.kotlinBuildProperties.isTeamcityBuild) { + val jsonArray = com.google.gson.JsonParser.parseString(File(resultFilePath).readText()).asJsonArray + jsonArray.forEach { + val benchmark = it.asJsonObject + // remove unnecessary name parts from string like this "org.jetbrains.kotlin.benchmarks.CommonCallsBenchmark.benchmark" + val name = benchmark["benchmark"].asString.removeSuffix(".benchmark").let { + val indexOfLastDot = it.indexOfLast { it == '.' } + it.removeRange(0..indexOfLastDot) + } + val params = benchmark["params"].asJsonObject + val isIR = if (params.has("isIR")) params["isIR"].asString else "false" + val useNI = if (params.has("useNI")) params["useNI"].asString else "false" + val size = params["size"].asString + val score = "%.3f".format(benchmark["primaryMetric"].asJsonObject["score"].asString.toFloat()) + + val irPostfix = if (isIR.toBoolean()) " isIR=true" else "" + val niPostfix = if (useNI.toBoolean() && !isIR.toBoolean()) " isNI=true" else "" + + println("""##teamcity[buildStatisticValue key='$name size=$size${irPostfix}$niPostfix' value='$score']""") + } + } + } +}