diff --git a/README.md b/README.md index f0613437..07499216 100644 --- a/README.md +++ b/README.md @@ -427,6 +427,30 @@ Refer to our [comprehensive guide](docs/configuration-options.md) to learn about Often you want to have benchmarks in the same project, but separated from main code, much like tests. Refer to our [detailed documentation](docs/separate-benchmark-source-set.md) on configuring your project to set up a separate source set for benchmarks. +## Analyzing results + +Upon finishing benchmarks execution, the plugin prints out a summary table with results. +In addition to that table, it also saves results into a file. By default, that would be a JSON file with a format +compatible with the format used by JMH. The format is configured using `reportFormat` option, you can read more about +it in the [configuration documentation](docs/configuration-options.md). + +While runs consisting of a few benchmarks could be analyzed without any additional tools, +analyzing run results consisting of dozens of benchmarks could quickly become tedious. + +To facilitate this process, you can use [Kotlin Notebooks](https://kotlinlang.org/docs/kotlin-notebook-overview.html), +which provides means for manipulating, analyzing and visualizing data. + +We prepared several notebooks demonstrating different analysis techniques using our [example](#Examples) projects. +Namely, +- [Performing single run analysis](examples/simple-benchmark-analysis.ipynb) + ![SingleRunAnalysis](docs/notebooks-single-run-demo.png) +- [Comparing different runs with each other](examples/compare-benchmark-runs.ipynb) + ![MultiRunAnalysis](docs/notebooks-multi-run-demo.png) +- [Comparing benchmark functions from the same run with each other](examples/compare-hypothesis.ipynb) + ![HypothesisAnalysis](docs/notebooks-compare-hypothesis-demo.png) + +You can always copy these notebooks into your projects and adapt for your particular needs. + ## Examples To help you better understand how to use the `kotlinx-benchmark` library, we've provided an [examples](examples) subproject. diff --git a/build.gradle.kts b/build.gradle.kts index 926bd3ac..c2b358ae 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -124,6 +124,7 @@ apiValidation { "java", "kotlin-jvm-separate-benchmark-source-set", "kotlin-jvm", + "kotlin-jvm-compare-hypothesis", "kotlin-multiplatform", "integration", ) diff --git a/docs/notebooks-compare-hypothesis-demo.png b/docs/notebooks-compare-hypothesis-demo.png new file mode 100644 index 00000000..1ee4b8f0 Binary files /dev/null and b/docs/notebooks-compare-hypothesis-demo.png differ diff --git a/docs/notebooks-multi-run-demo.png b/docs/notebooks-multi-run-demo.png new file mode 100644 index 00000000..35f26c6f Binary files /dev/null and b/docs/notebooks-multi-run-demo.png differ diff --git a/docs/notebooks-single-run-demo.png b/docs/notebooks-single-run-demo.png new file mode 100644 index 00000000..c243c254 Binary files /dev/null and b/docs/notebooks-single-run-demo.png differ diff --git a/examples/compare-benchmark-runs.ipynb b/examples/compare-benchmark-runs.ipynb index 24d675ac..470488ae 100644 --- a/examples/compare-benchmark-runs.ipynb +++ b/examples/compare-benchmark-runs.ipynb @@ -24,13 +24,8 @@ }, { "metadata": { - "ExecuteTime": { - "end_time": "2025-10-15T06:52:36.539161Z", - "start_time": "2025-10-15T06:52:32.150691Z" - }, "executionRelatedData": { "compiledClasses": [ - "Line_2_jupyter", "Line_3_jupyter", "Line_4_jupyter", "Line_5_jupyter", @@ -43,8 +38,13 @@ "Line_12_jupyter", "Line_13_jupyter", "Line_14_jupyter", - "Line_15_jupyter" + "Line_15_jupyter", + "Line_16_jupyter" ] + }, + "ExecuteTime": { + "end_time": "2025-11-12T23:01:09.608819Z", + "start_time": "2025-11-12T23:01:04.678470Z" } }, "cell_type": "code", @@ -54,14 +54,59 @@ }, { "metadata": { - "ExecuteTime": { - "end_time": "2025-10-15T06:52:36.792711Z", - "start_time": "2025-10-15T06:52:36.540356Z" + "executionRelatedData": { + "compiledClasses": [ + "Line_17_jupyter" + ] }, + "ExecuteTime": { + "end_time": "2025-11-12T23:01:10.065548Z", + "start_time": "2025-11-12T23:01:09.615279Z" + } + }, + "cell_type": "code", + "source": [ + "// Serialization classes matching the JMH-alike JSON format.\n", + "// We define these classes manually so we can keep `params` as a JsonObject, as it means we can handle them\n", + "// in a generic manner. If you benchmark have fixed params, using `\"\".deserializeThis()` is\n", + "// faster and easier.\n", + "\n", + "@Serializable\n", + "public data class Benchmark(\n", + " public val benchmark: String,\n", + " public val mode: String,\n", + " public val warmupIterations: Int,\n", + " public val warmupTime: String,\n", + " public val measurementIterations: Int,\n", + " public val measurementTime: String,\n", + " public val primaryMetric: PrimaryMetric,\n", + " public val secondaryMetrics: Map,\n", + " public val params: JsonObject? = null\n", + ")\n", + "\n", + "@Serializable\n", + "public data class PrimaryMetric(\n", + " public val score: Double,\n", + " public val scoreError: Double,\n", + " public val scoreConfidence: List,\n", + " public val scorePercentiles: Map,\n", + " public val scoreUnit: String,\n", + " public val rawData: List>,\n", + ")" + ], + "outputs": [], + "execution_count": 2 + }, + { + "metadata": { "executionRelatedData": { "compiledClasses": [ - "Line_16_jupyter" + "Line_18_jupyter" ] + }, + "ExecuteTime": { + "end_time": "2025-11-12T23:01:10.621667Z", + "start_time": "2025-11-12T23:01:10.097804Z" } }, "cell_type": "code", @@ -83,47 +128,44 @@ " .map { it.resolve(\"jvm.json\") }" ], "outputs": [], - "execution_count": 2 + "execution_count": 3 }, { "metadata": { - "ExecuteTime": { - "end_time": "2025-10-15T06:52:37.905784Z", - "start_time": "2025-10-15T06:52:36.794274Z" - }, "executionRelatedData": { "compiledClasses": [ - "Line_17_jupyter", - "Line_18_jupyter", - "Line_19_jupyter", - "Line_20_jupyter", - "Line_21_jupyter" + "Line_19_jupyter" ] + }, + "ExecuteTime": { + "end_time": "2025-11-12T23:01:10.770928Z", + "start_time": "2025-11-12T23:01:10.626280Z" } }, "cell_type": "code", "source": [ - "// Convert to \"typed\" JSON\n", - "val newRun = outputFiles.first().readText().deserializeJson()\n", - "val oldRun = outputFiles.last().readText().deserializeJson()" + "// Convert to typed JSON\n", + "val json = Json { ignoreUnknownKeys = true }\n", + "val newRun = json.decodeFromString>(outputFiles.first().readText())\n", + "val oldRun = json.decodeFromString>(outputFiles.last().readText())" ], "outputs": [], - "execution_count": 3 + "execution_count": 4 }, { "metadata": { - "ExecuteTime": { - "end_time": "2025-10-15T06:52:38.536966Z", - "start_time": "2025-10-15T06:52:37.906464Z" - }, "executionRelatedData": { "compiledClasses": [ + "Line_20_jupyter", + "Line_21_jupyter", "Line_22_jupyter", "Line_23_jupyter", - "Line_24_jupyter", - "Line_25_jupyter", - "Line_26_jupyter" + "Line_24_jupyter" ] + }, + "ExecuteTime": { + "end_time": "2025-11-12T23:01:11.249299Z", + "start_time": "2025-11-12T23:01:10.775339Z" } }, "cell_type": "code", @@ -136,20 +178,20 @@ "val newDf = newRun.toDataFrame().addId(\"rowIndex\")" ], "outputs": [], - "execution_count": 4 + "execution_count": 5 }, { "metadata": { - "ExecuteTime": { - "end_time": "2025-10-15T06:52:38.914275Z", - "start_time": "2025-10-15T06:52:38.543089Z" - }, "executionRelatedData": { "compiledClasses": [ - "Line_27_jupyter", - "Line_28_jupyter", - "Line_29_jupyter" + "Line_25_jupyter", + "Line_26_jupyter", + "Line_27_jupyter" ] + }, + "ExecuteTime": { + "end_time": "2025-11-12T23:01:11.560635Z", + "start_time": "2025-11-12T23:01:11.256258Z" } }, "cell_type": "code", @@ -159,28 +201,34 @@ "// combinedData" ], "outputs": [], - "execution_count": 5 + "execution_count": 6 }, { "metadata": { - "ExecuteTime": { - "end_time": "2025-10-15T06:52:39.257941Z", - "start_time": "2025-10-15T06:52:38.915574Z" - }, "executionRelatedData": { "compiledClasses": [ - "Line_30_jupyter", - "Line_31_jupyter", - "Line_32_jupyter" + "Line_28_jupyter", + "Line_29_jupyter", + "Line_30_jupyter" ] + }, + "ExecuteTime": { + "end_time": "2025-11-12T23:01:11.982028Z", + "start_time": "2025-11-12T23:01:11.565945Z" } }, "cell_type": "code", "source": [ + "import kotlinx.serialization.json.encodeToJsonElement\n", + "\n", "// Reduce the combined data into the exact format we need\n", "val resultData = combinedData.mapToFrame {\n", " \"name\" from { it.benchmark }\n", - " \"params\" from { it.params?.let { params -> \"data=${params.data},text=\\\"${params.text}\\\",value=${params.value}\"} ?: \"\" }\n", + " \"params\" from {\n", + " it.params?.entries.orEmpty()\n", + " .sortedBy { it.key }\n", + " .joinToString(\",\") { entry -> \"${entry.key}=${entry.value.jsonPrimitive.content}\" }\n", + " }\n", " \"mode\" from { it.mode } // \"avgt\" or \"thrpt\"\n", " \"unit\" from { it.primaryMetric.scoreUnit }\n", " \"runOld\" {\n", @@ -196,20 +244,20 @@ "// resultData" ], "outputs": [], - "execution_count": 6 + "execution_count": 7 }, { "metadata": { - "ExecuteTime": { - "end_time": "2025-10-15T06:52:39.400795Z", - "start_time": "2025-10-15T06:52:39.259607Z" - }, "executionRelatedData": { "compiledClasses": [ - "Line_33_jupyter", - "Line_34_jupyter", - "Line_35_jupyter" + "Line_31_jupyter", + "Line_32_jupyter", + "Line_33_jupyter" ] + }, + "ExecuteTime": { + "end_time": "2025-11-12T23:01:12.181560Z", + "start_time": "2025-11-12T23:01:11.996744Z" } }, "cell_type": "code", @@ -220,20 +268,20 @@ "// mergedData" ], "outputs": [], - "execution_count": 7 + "execution_count": 8 }, { "metadata": { - "ExecuteTime": { - "end_time": "2025-10-15T06:52:39.899417Z", - "start_time": "2025-10-15T06:52:39.403744Z" - }, "executionRelatedData": { "compiledClasses": [ - "Line_36_jupyter", - "Line_37_jupyter", - "Line_38_jupyter" + "Line_34_jupyter", + "Line_35_jupyter", + "Line_36_jupyter" ] + }, + "ExecuteTime": { + "end_time": "2025-11-12T23:01:12.492447Z", + "start_time": "2025-11-12T23:01:12.187988Z" } }, "cell_type": "code", @@ -455,7 +503,7 @@ " </style>\n", " </head>\n", " <body>\n", - " <table class="dataframe" id="df_-1107296256"></table>\n", + " <table class="dataframe" id="df_-268435456"></table>\n", "\n", "<p class="dataframe_description">DataFrame: rowsCount = 20, columnsCount = 12</p>\n", "\n", @@ -737,21 +785,21 @@ "\n", "/*<!--*/\n", "call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"name: String\">name</span>", children: [], rightAlign: false, values: ["test.InheritedBenchmark.baseBenchmark","<span class=\"formatted\" title=\"test.InheritedBenchmark.inheritedBenchmark\">test.InheritedBenchmark.inheritedBenc<span class=\"structural\">...</span></span>","test.ParamBenchmark.mathBenchmark","test.ParamBenchmark.mathBenchmark","test.ParamBenchmark.mathBenchmark","test.ParamBenchmark.mathBenchmark","test.ParamBenchmark.otherBenchmark","test.ParamBenchmark.otherBenchmark","test.ParamBenchmark.otherBenchmark","test.ParamBenchmark.otherBenchmark","test.ParamBenchmark.textContentCheck","test.ParamBenchmark.textContentCheck","test.ParamBenchmark.textContentCheck","test.ParamBenchmark.textContentCheck","<span class=\"formatted\" title=\"test.nested.CommonBenchmark.mathBenchmark\">test.nested.CommonBenchmark.mathBench<span class=\"structural\">...</span></span>","test.CommonBenchmark.longBenchmark","<span class=\"formatted\" title=\"test.CommonBenchmark.longBlackholeBenchmark\">test.CommonBenchmark.longBlackholeBen<span class=\"structural\">...</span></span>","test.CommonBenchmark.mathBenchmark","test.JvmTestBenchmark.cosBenchmark","test.JvmTestBenchmark.sqrtBenchmark"] }, \n", - "{ name: "<span title=\"params: String\">params</span>", children: [], rightAlign: false, values: ["","","<span class=\"formatted\" title=\"data=1,text=&#34;a &#34;string&#34; with quotes&#34;,value=1\">data=1,text=&#34;a &#34;string&#34; with quotes&#34;,<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=1,text=&#34;a &#34;string&#34; with quotes&#34;,value=2\">data=1,text=&#34;a &#34;string&#34; with quotes&#34;,<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=2,text=&#34;a &#34;string&#34; with quotes&#34;,value=1\">data=2,text=&#34;a &#34;string&#34; with quotes&#34;,<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=2,text=&#34;a &#34;string&#34; with quotes&#34;,value=2\">data=2,text=&#34;a &#34;string&#34; with quotes&#34;,<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=1,text=&#34;a &#34;string&#34; with quotes&#34;,value=1\">data=1,text=&#34;a &#34;string&#34; with quotes&#34;,<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=1,text=&#34;a &#34;string&#34; with quotes&#34;,value=2\">data=1,text=&#34;a &#34;string&#34; with quotes&#34;,<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=2,text=&#34;a &#34;string&#34; with quotes&#34;,value=1\">data=2,text=&#34;a &#34;string&#34; with quotes&#34;,<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=2,text=&#34;a &#34;string&#34; with quotes&#34;,value=2\">data=2,text=&#34;a &#34;string&#34; with quotes&#34;,<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=1,text=&#34;a &#34;string&#34; with quotes&#34;,value=1\">data=1,text=&#34;a &#34;string&#34; with quotes&#34;,<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=1,text=&#34;a &#34;string&#34; with quotes&#34;,value=2\">data=1,text=&#34;a &#34;string&#34; with quotes&#34;,<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=2,text=&#34;a &#34;string&#34; with quotes&#34;,value=1\">data=2,text=&#34;a &#34;string&#34; with quotes&#34;,<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=2,text=&#34;a &#34;string&#34; with quotes&#34;,value=2\">data=2,text=&#34;a &#34;string&#34; with quotes&#34;,<span class=\"structural\">...</span></span>","","","","","",""] }, \n", + "{ name: "<span title=\"params: String\">params</span>", children: [], rightAlign: false, values: ["","","<span class=\"formatted\" title=\"data=1,text=a &#34;string&#34; with quotes,value=1\">data=1,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=1,text=a &#34;string&#34; with quotes,value=2\">data=1,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=2,text=a &#34;string&#34; with quotes,value=1\">data=2,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=2,text=a &#34;string&#34; with quotes,value=2\">data=2,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=1,text=a &#34;string&#34; with quotes,value=1\">data=1,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=1,text=a &#34;string&#34; with quotes,value=2\">data=1,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=2,text=a &#34;string&#34; with quotes,value=1\">data=2,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=2,text=a &#34;string&#34; with quotes,value=2\">data=2,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=1,text=a &#34;string&#34; with quotes,value=1\">data=1,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=1,text=a &#34;string&#34; with quotes,value=2\">data=1,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=2,text=a &#34;string&#34; with quotes,value=1\">data=2,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=2,text=a &#34;string&#34; with quotes,value=2\">data=2,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","","","","","",""] }, \n", "{ name: "<span title=\"mode: String\">mode</span>", children: [], rightAlign: false, values: ["thrpt","thrpt","thrpt","thrpt","thrpt","thrpt","thrpt","thrpt","thrpt","thrpt","thrpt","thrpt","thrpt","thrpt","thrpt","avgt","avgt","avgt","avgt","avgt"] }, \n", "{ name: "<span title=\"unit: String\">unit</span>", children: [], rightAlign: false, values: ["ops/s","ops/s","ops/ms","ops/ms","ops/ms","ops/ms","ops/ms","ops/ms","ops/ms","ops/ms","ops/ms","ops/ms","ops/ms","ops/ms","ops/ms","ms/op","ms/op","ms/op","ns/op","ns/op"] }, \n", - "{ name: "<span title=\"score: Double\">score</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1124169.302037</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">145630568.901834</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">215040.426488</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">216167.949476</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">102937.094929</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">103082.844856</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2672623.997717</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2654913.294925</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2676852.389264</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2676496.835154</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">155929.815236</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">156259.919330</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">155811.883306</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">154835.234029</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">149758.678427</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000844</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000022</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000007</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.472485</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.534808</span></span>"] }, \n", - "{ name: "<span title=\"range: ranges.ClosedFloatingPointRange<Double>\">range</span>", children: [], rightAlign: false, values: ["1048963.3505892197..1199375.2534848445","<span class=\"formatted\" title=\"1.4257469243792653E8..1.4868644536574084E8\">1.4257469243792653E8..1.4868644536574<span class=\"structural\">...</span></span>","209159.44934415395..220921.40363117142","209816.26197479176..222519.63697705854","102198.8667788953..103675.32307942082","102746.60675391225..103419.08295814389","2581766.221460874..2763481.7739724927","2530927.3446583785..2778899.245191074","2585653.063020375..2768051.715507899","2585056.261771287..2767937.4085372332","155267.27942953032..156592.35104171414","155967.2972273164..156552.54143332926","154012.99823010628..157610.76838288622","152299.566575624..157370.90148168168","149465.14095246932..150052.21590221935","<span class=\"formatted\" title=\"8.372522775198425E-4..8.511642692950413E-4\">8.372522775198425E-4..8.5116426929504<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"2.1394152325114E-5..2.1901024502437323E-5\">2.1394152325114E-5..2.190102450243732<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"6.650531071713415E-6..6.736213057094142E-6\">6.650531071713415E-6..6.7362130570941<span class=\"structural\">...</span></span>","3.4596934638924464..3.485277224458304","0.5300538318352048..0.5395626553267283"] }, \n", - "{ name: "<span title=\"score1: Double\">score1</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1104972.670689</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">146349897.456097</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">213019.578414</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">214917.724126</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">102424.759291</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">101173.752493</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2680506.786161</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2585022.664468</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2614856.411872</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2585237.244524</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">150449.209123</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">147058.565627</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">146125.997244</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">150019.932114</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">145509.901147</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000897</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000024</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000007</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.544540</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.542828</span></span>"] }, \n", - "{ name: "<span title=\"range1: ranges.ClosedFloatingPointRange<Double>\">range1</span>", children: [], rightAlign: false, values: ["1055663.3534587221..1154281.987920151","1.437328117109918E8..1.489669832012015E8","204650.0532153221..221389.10361238578","208616.32754332913..221219.12070789465","101113.46667154715..103736.05191104818","99908.94648785368..102438.55849807907","2646872.2297869264..2714141.3425343693","2454777.568459309..2715267.760476164","2580741.3402635106..2648971.483481024","2552358.4905912033..2618115.998457625","147414.465281937..153483.95296329833","140116.58313969668..154000.5481141382","143504.1570471993..148747.83743989808","145881.2852993276..154158.57892833705","143242.89296995336..147776.90932420595","<span class=\"formatted\" title=\"8.737790976669418E-4..9.206484453035511E-4\">8.737790976669418E-4..9.2064844530355<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"2.3161777788037864E-5..2.4221992778145036E-5\">2.3161777788037864E-5..2.422199277814<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"6.710269330854009E-6..6.8730920645926235E-6\">6.710269330854009E-6..6.8730920645926<span class=\"structural\">...</span></span>","3.5170213910539556..3.572058960798929","0.5388189143575554..0.5468378157356791"] }, \n", - "{ name: "<span title=\"diffScore: Double\">diffScore</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">-19196.631348</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">719328.554263</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-2020.848074</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-1250.225350</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-512.335638</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-1909.092363</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">7882.788444</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-69890.630457</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-61995.977392</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-91259.590630</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-5480.606113</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-9201.353703</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-9685.886063</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-4815.301915</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-4248.777280</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-0.000053</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-0.000002</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-0.000000</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-0.072055</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-0.008020</span></span>"] }, \n", - "{ name: "<span title=\"diffScorePercentage: Double\">diffScorePercentage</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">-1.707628</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.493941</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-0.939753</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-0.578358</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-0.497717</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-1.851998</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.294946</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-2.632501</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-2.316003</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-3.409666</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-3.514790</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-5.888493</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-6.216398</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-3.109952</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-2.837083</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-6.278723</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-9.443532</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-1.468746</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-2.075022</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-1.499626</span></span>"] }, \n", - "{ name: "<span title=\"testLabel: String\">testLabel</span>", children: [], rightAlign: false, values: ["test.InheritedBenchmark.baseBenchmark","<span class=\"formatted\" title=\"test.InheritedBenchmark.inheritedBenchmark\">test.InheritedBenchmark.inheritedBenc<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.mathBenchmark\n[data=1,text=&#34;a &#34;string&#34; with quotes&#34;,value=1]\">test.ParamBenchmark.mathBenchmark\n[da<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.mathBenchmark\n[data=1,text=&#34;a &#34;string&#34; with quotes&#34;,value=2]\">test.ParamBenchmark.mathBenchmark\n[da<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.mathBenchmark\n[data=2,text=&#34;a &#34;string&#34; with quotes&#34;,value=1]\">test.ParamBenchmark.mathBenchmark\n[da<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.mathBenchmark\n[data=2,text=&#34;a &#34;string&#34; with quotes&#34;,value=2]\">test.ParamBenchmark.mathBenchmark\n[da<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.otherBenchmark\n[data=1,text=&#34;a &#34;string&#34; with quotes&#34;,value=1]\">test.ParamBenchmark.otherBenchmark\n[d<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.otherBenchmark\n[data=1,text=&#34;a &#34;string&#34; with quotes&#34;,value=2]\">test.ParamBenchmark.otherBenchmark\n[d<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.otherBenchmark\n[data=2,text=&#34;a &#34;string&#34; with quotes&#34;,value=1]\">test.ParamBenchmark.otherBenchmark\n[d<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.otherBenchmark\n[data=2,text=&#34;a &#34;string&#34; with quotes&#34;,value=2]\">test.ParamBenchmark.otherBenchmark\n[d<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.textContentCheck\n[data=1,text=&#34;a &#34;string&#34; with quotes&#34;,value=1]\">test.ParamBenchmark.textContentCheck\n<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.textContentCheck\n[data=1,text=&#34;a &#34;string&#34; with quotes&#34;,value=2]\">test.ParamBenchmark.textContentCheck\n<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.textContentCheck\n[data=2,text=&#34;a &#34;string&#34; with quotes&#34;,value=1]\">test.ParamBenchmark.textContentCheck\n<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.textContentCheck\n[data=2,text=&#34;a &#34;string&#34; with quotes&#34;,value=2]\">test.ParamBenchmark.textContentCheck\n<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.nested.CommonBenchmark.mathBenchmark\">test.nested.CommonBenchmark.mathBench<span class=\"structural\">...</span></span>","test.CommonBenchmark.longBenchmark","<span class=\"formatted\" title=\"test.CommonBenchmark.longBlackholeBenchmark\">test.CommonBenchmark.longBlackholeBen<span class=\"structural\">...</span></span>","test.CommonBenchmark.mathBenchmark","test.JvmTestBenchmark.cosBenchmark","test.JvmTestBenchmark.sqrtBenchmark"] }, \n", - "{ name: "<span title=\"barColor: String\">barColor</span>", children: [], rightAlign: false, values: ["neg","pos","neg","neg","neg","neg","pos","neg","neg","neg","neg","neg","neg","neg","neg","neg","neg","neg","neg","neg"] }, \n", - "], id: -1107296256, rootId: -1107296256, totalRows: 20 } ) });\n", + "{ name: "<span title=\"score: Double\">score</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">999715.573058</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">132519854.002753</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">196902.036134</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">198982.020454</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">76487.508628</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">77218.536895</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2312642.773644</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2295922.938822</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2295223.364007</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2295128.593211</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">139497.981811</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">139472.551215</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">137951.951688</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">135829.985631</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">133932.193305</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.001020</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000026</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000008</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.971338</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.606598</span></span>"] }, \n", + "{ name: "<span title=\"range: ranges.ClosedFloatingPointRange<Double>\">range</span>", children: [], rightAlign: false, values: ["974954.2809652109..1024476.8651513313","<span class=\"formatted\" title=\"1.2936737342079675E8..1.3567233458470887E8\">1.2936737342079675E8..1.3567233458470<span class=\"structural\">...</span></span>","191654.7423267418..202149.32994077116","194497.3197739599..203466.72113419612","74595.04831374026..78379.96894260854","75599.16372724227..78837.91006301393","2091779.438724716..2533506.1085633924","2089935.2366487498..2501910.6409945134","2115768.594299648..2474678.1337146433","2082445.0002591067..2507812.186162458","135894.93943472698..143101.02418653402","135249.9703875965..143695.13204299458","133789.3696336104..142114.53374258292","131190.7048701939..140469.26639132493","129878.2239827778..137986.16262644873","<span class=\"formatted\" title=\"9.902780506238168E-4..0.0010504284290899577\">9.902780506238168E-4..0.0010504284290<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"2.5596365181913836E-5..2.6979490207589775E-5\">2.5596365181913836E-5..2.697949020758<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"7.456424871291536E-6..7.77349973367662E-6\">7.456424871291536E-6..7.7734997336766<span class=\"structural\">...</span></span>","3.8358525869703075..4.1068243414082675","0.5901377228601924..0.62305902250719"] }, \n", + "{ name: "<span title=\"score1: Double\">score1</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1140852.957229</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">146792560.895807</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">217133.491804</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">216593.775142</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">86523.588517</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">85944.381961</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2616589.198790</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2629054.441671</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2646402.737052</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2652047.742142</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">154381.766970</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">153578.254496</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">153262.850584</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">153672.584595</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">148921.638469</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000854</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000023</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000007</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.495849</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.541162</span></span>"] }, \n", + "{ name: "<span title=\"range1: ranges.ClosedFloatingPointRange<Double>\">range1</span>", children: [], rightAlign: false, values: ["1106659.7386652725..1175046.1757937148","<span class=\"formatted\" title=\"1.4482756334251586E8..1.4875755844909838E8\">1.4482756334251586E8..1.4875755844909<span class=\"structural\">...</span></span>","215027.16316066374..219239.82044761901","212594.8732753121..220592.677009433","82315.21514352418..90731.96188974172","81177.07416021802..90711.68976101496","2579570.7359826625..2653607.6615965427","2524752.102688715..2733356.780654085","2616649.4130033795..2676156.0611009924","2627344.681389795..2676750.802894536","153348.64196544446..155414.89197494255","150716.46891485332..156440.04007752796","150745.58896373163..155780.11220499463","150946.56541126606..156398.60377851175","148674.35770053475..149168.91923706495","<span class=\"formatted\" title=\"8.428241181867443E-4..8.649269988130904E-4\">8.428241181867443E-4..8.6492699881309<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"2.284205842928573E-5..2.3608924259914014E-5\">2.284205842928573E-5..2.3608924259914<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"6.685553120802533E-6..6.873011588250474E-6\">6.685553120802533E-6..6.8730115882504<span class=\"structural\">...</span></span>","3.48368627561432..3.5080116159522237","0.5348433328074729..0.5474798680717454"] }, \n", + "{ name: "<span title=\"diffScore: Double\">diffScore</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">141137.384171</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">14272706.893054</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">20231.455670</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">17611.754688</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10036.079888</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">8725.845065</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">303946.425146</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">333131.502850</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">351179.373045</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">356919.148931</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">14883.785160</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">14105.703281</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">15310.898896</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">17842.598964</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">14989.445164</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000166</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000003</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000001</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.475490</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.065437</span></span>"] }, \n", + "{ name: "<span title=\"diffScorePercentage: Double\">diffScorePercentage</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">14.117754</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10.770240</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10.274884</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">8.850928</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">13.121201</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">11.300195</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">13.142818</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">14.509699</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">15.300444</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">15.551161</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10.669534</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10.113605</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">11.098719</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">13.135979</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">11.191816</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">16.315691</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">11.649592</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10.974184</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">11.973029</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10.787496</span></span>"] }, \n", + "{ name: "<span title=\"testLabel: String\">testLabel</span>", children: [], rightAlign: false, values: ["test.InheritedBenchmark.baseBenchmark","<span class=\"formatted\" title=\"test.InheritedBenchmark.inheritedBenchmark\">test.InheritedBenchmark.inheritedBenc<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.mathBenchmark\n[data=1,text=a &#34;string&#34; with quotes,value=1]\">test.ParamBenchmark.mathBenchmark\n[da<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.mathBenchmark\n[data=1,text=a &#34;string&#34; with quotes,value=2]\">test.ParamBenchmark.mathBenchmark\n[da<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.mathBenchmark\n[data=2,text=a &#34;string&#34; with quotes,value=1]\">test.ParamBenchmark.mathBenchmark\n[da<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.mathBenchmark\n[data=2,text=a &#34;string&#34; with quotes,value=2]\">test.ParamBenchmark.mathBenchmark\n[da<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.otherBenchmark\n[data=1,text=a &#34;string&#34; with quotes,value=1]\">test.ParamBenchmark.otherBenchmark\n[d<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.otherBenchmark\n[data=1,text=a &#34;string&#34; with quotes,value=2]\">test.ParamBenchmark.otherBenchmark\n[d<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.otherBenchmark\n[data=2,text=a &#34;string&#34; with quotes,value=1]\">test.ParamBenchmark.otherBenchmark\n[d<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.otherBenchmark\n[data=2,text=a &#34;string&#34; with quotes,value=2]\">test.ParamBenchmark.otherBenchmark\n[d<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.textContentCheck\n[data=1,text=a &#34;string&#34; with quotes,value=1]\">test.ParamBenchmark.textContentCheck\n<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.textContentCheck\n[data=1,text=a &#34;string&#34; with quotes,value=2]\">test.ParamBenchmark.textContentCheck\n<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.textContentCheck\n[data=2,text=a &#34;string&#34; with quotes,value=1]\">test.ParamBenchmark.textContentCheck\n<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.textContentCheck\n[data=2,text=a &#34;string&#34; with quotes,value=2]\">test.ParamBenchmark.textContentCheck\n<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.nested.CommonBenchmark.mathBenchmark\">test.nested.CommonBenchmark.mathBench<span class=\"structural\">...</span></span>","test.CommonBenchmark.longBenchmark","<span class=\"formatted\" title=\"test.CommonBenchmark.longBlackholeBenchmark\">test.CommonBenchmark.longBlackholeBen<span class=\"structural\">...</span></span>","test.CommonBenchmark.mathBenchmark","test.JvmTestBenchmark.cosBenchmark","test.JvmTestBenchmark.sqrtBenchmark"] }, \n", + "{ name: "<span title=\"barColor: String\">barColor</span>", children: [], rightAlign: false, values: ["pos","pos","pos","pos","pos","pos","pos","pos","pos","pos","pos","pos","pos","pos","pos","pos","pos","pos","pos","pos"] }, \n", + "], id: -268435456, rootId: -268435456, totalRows: 20 } ) });\n", "/*-->*/\n", "\n", - "call_DataFrame(function() { DataFrame.renderTable(-1107296256) });\n", + "call_DataFrame(function() { DataFrame.renderTable(-268435456) });\n", "\n", "\n", " </script>\n", @@ -924,52 +972,50 @@ " \n", " \n", " \n", - "
nameparamsmodeunitscorerangescore1range1diffScorediffScorePercentagetestLabelbarColor
test.InheritedBenchmark.baseBenchmarkthrptops/s1124169.3020371048963.3505892197..1199375.25348484451104972.6706891055663.3534587221..1154281.987920151-19196.631348-1.707628test.InheritedBenchmark.baseBenchmarkneg
test.InheritedBenchmark.inheritedBenc...thrptops/s145630568.9018341.4257469243792653E8..1.4868644536574...146349897.4560971.437328117109918E8..1.489669832012015E8719328.5542630.493941test.InheritedBenchmark.inheritedBenc...pos
test.ParamBenchmark.mathBenchmarkdata=1,text="a "string" with quotes",...thrptops/ms215040.426488209159.44934415395..220921.40363117142213019.578414204650.0532153221..221389.10361238578-2020.848074-0.939753test.ParamBenchmark.mathBenchmark\n", - "[da...neg
test.ParamBenchmark.mathBenchmarkdata=1,text="a "string" with quotes",...thrptops/ms216167.949476209816.26197479176..222519.63697705854214917.724126208616.32754332913..221219.12070789465-1250.225350-0.578358test.ParamBenchmark.mathBenchmark\n", - "[da...neg
test.ParamBenchmark.mathBenchmarkdata=2,text="a "string" with quotes",...thrptops/ms102937.094929102198.8667788953..103675.32307942082102424.759291101113.46667154715..103736.05191104818-512.335638-0.497717test.ParamBenchmark.mathBenchmark\n", - "[da...neg
test.ParamBenchmark.mathBenchmarkdata=2,text="a "string" with quotes",...thrptops/ms103082.844856102746.60675391225..103419.08295814389101173.75249399908.94648785368..102438.55849807907-1909.092363-1.851998test.ParamBenchmark.mathBenchmark\n", - "[da...neg
test.ParamBenchmark.otherBenchmarkdata=1,text="a "string" with quotes",...thrptops/ms2672623.9977172581766.221460874..2763481.77397249272680506.7861612646872.2297869264..2714141.34253436937882.7884440.294946test.ParamBenchmark.otherBenchmark\n", - "[d...pos
test.ParamBenchmark.otherBenchmarkdata=1,text="a "string" with quotes",...thrptops/ms2654913.2949252530927.3446583785..2778899.2451910742585022.6644682454777.568459309..2715267.760476164-69890.630457-2.632501test.ParamBenchmark.otherBenchmark\n", - "[d...neg
test.ParamBenchmark.otherBenchmarkdata=2,text="a "string" with quotes",...thrptops/ms2676852.3892642585653.063020375..2768051.7155078992614856.4118722580741.3402635106..2648971.483481024-61995.977392-2.316003test.ParamBenchmark.otherBenchmark\n", - "[d...neg
test.ParamBenchmark.otherBenchmarkdata=2,text="a "string" with quotes",...thrptops/ms2676496.8351542585056.261771287..2767937.40853723322585237.2445242552358.4905912033..2618115.998457625-91259.590630-3.409666test.ParamBenchmark.otherBenchmark\n", - "[d...neg
test.ParamBenchmark.textContentCheckdata=1,text="a "string" with quotes",...thrptops/ms155929.815236155267.27942953032..156592.35104171414150449.209123147414.465281937..153483.95296329833-5480.606113-3.514790test.ParamBenchmark.textContentCheck\n", - "...neg
test.ParamBenchmark.textContentCheckdata=1,text="a "string" with quotes",...thrptops/ms156259.919330155967.2972273164..156552.54143332926147058.565627140116.58313969668..154000.5481141382-9201.353703-5.888493test.ParamBenchmark.textContentCheck\n", - "...neg
test.ParamBenchmark.textContentCheckdata=2,text="a "string" with quotes",...thrptops/ms155811.883306154012.99823010628..157610.76838288622146125.997244143504.1570471993..148747.83743989808-9685.886063-6.216398test.ParamBenchmark.textContentCheck\n", - "...neg
test.ParamBenchmark.textContentCheckdata=2,text="a "string" with quotes",...thrptops/ms154835.234029152299.566575624..157370.90148168168150019.932114145881.2852993276..154158.57892833705-4815.301915-3.109952test.ParamBenchmark.textContentCheck\n", - "...neg
test.nested.CommonBenchmark.mathBench...thrptops/ms149758.678427149465.14095246932..150052.21590221935145509.901147143242.89296995336..147776.90932420595-4248.777280-2.837083test.nested.CommonBenchmark.mathBench...neg
test.CommonBenchmark.longBenchmarkavgtms/op0.0008448.372522775198425E-4..8.5116426929504...0.0008978.737790976669418E-4..9.2064844530355...-0.000053-6.278723test.CommonBenchmark.longBenchmarkneg
test.CommonBenchmark.longBlackholeBen...avgtms/op0.0000222.1394152325114E-5..2.190102450243732...0.0000242.3161777788037864E-5..2.422199277814...-0.000002-9.443532test.CommonBenchmark.longBlackholeBen...neg
test.CommonBenchmark.mathBenchmarkavgtms/op0.0000076.650531071713415E-6..6.7362130570941...0.0000076.710269330854009E-6..6.8730920645926...-0.000000-1.468746test.CommonBenchmark.mathBenchmarkneg
test.JvmTestBenchmark.cosBenchmarkavgtns/op3.4724853.4596934638924464..3.4852772244583043.5445403.5170213910539556..3.572058960798929-0.072055-2.075022test.JvmTestBenchmark.cosBenchmarkneg
test.JvmTestBenchmark.sqrtBenchmarkavgtns/op0.5348080.5300538318352048..0.53956265532672830.5428280.5388189143575554..0.5468378157356791-0.008020-1.499626test.JvmTestBenchmark.sqrtBenchmarkneg
\n", + "
nameparamsmodeunitscorerangescore1range1diffScorediffScorePercentagetestLabelbarColor
test.InheritedBenchmark.baseBenchmarkthrptops/s999715.573058974954.2809652109..1024476.86515133131140852.9572291106659.7386652725..1175046.1757937148141137.38417114.117754test.InheritedBenchmark.baseBenchmarkpos
test.InheritedBenchmark.inheritedBenc...thrptops/s132519854.0027531.2936737342079675E8..1.3567233458470...146792560.8958071.4482756334251586E8..1.4875755844909...14272706.89305410.770240test.InheritedBenchmark.inheritedBenc...pos
test.ParamBenchmark.mathBenchmarkdata=1,text=a "string" with quotes,va...thrptops/ms196902.036134191654.7423267418..202149.32994077116217133.491804215027.16316066374..219239.8204476190120231.45567010.274884test.ParamBenchmark.mathBenchmark\n", + "[da...pos
test.ParamBenchmark.mathBenchmarkdata=1,text=a "string" with quotes,va...thrptops/ms198982.020454194497.3197739599..203466.72113419612216593.775142212594.8732753121..220592.67700943317611.7546888.850928test.ParamBenchmark.mathBenchmark\n", + "[da...pos
test.ParamBenchmark.mathBenchmarkdata=2,text=a "string" with quotes,va...thrptops/ms76487.50862874595.04831374026..78379.9689426085486523.58851782315.21514352418..90731.9618897417210036.07988813.121201test.ParamBenchmark.mathBenchmark\n", + "[da...pos
test.ParamBenchmark.mathBenchmarkdata=2,text=a "string" with quotes,va...thrptops/ms77218.53689575599.16372724227..78837.9100630139385944.38196181177.07416021802..90711.689761014968725.84506511.300195test.ParamBenchmark.mathBenchmark\n", + "[da...pos
test.ParamBenchmark.otherBenchmarkdata=1,text=a "string" with quotes,va...thrptops/ms2312642.7736442091779.438724716..2533506.10856339242616589.1987902579570.7359826625..2653607.6615965427303946.42514613.142818test.ParamBenchmark.otherBenchmark\n", + "[d...pos
test.ParamBenchmark.otherBenchmarkdata=1,text=a "string" with quotes,va...thrptops/ms2295922.9388222089935.2366487498..2501910.64099451342629054.4416712524752.102688715..2733356.780654085333131.50285014.509699test.ParamBenchmark.otherBenchmark\n", + "[d...pos
test.ParamBenchmark.otherBenchmarkdata=2,text=a "string" with quotes,va...thrptops/ms2295223.3640072115768.594299648..2474678.13371464332646402.7370522616649.4130033795..2676156.0611009924351179.37304515.300444test.ParamBenchmark.otherBenchmark\n", + "[d...pos
test.ParamBenchmark.otherBenchmarkdata=2,text=a "string" with quotes,va...thrptops/ms2295128.5932112082445.0002591067..2507812.1861624582652047.7421422627344.681389795..2676750.802894536356919.14893115.551161test.ParamBenchmark.otherBenchmark\n", + "[d...pos
test.ParamBenchmark.textContentCheckdata=1,text=a "string" with quotes,va...thrptops/ms139497.981811135894.93943472698..143101.02418653402154381.766970153348.64196544446..155414.8919749425514883.78516010.669534test.ParamBenchmark.textContentCheck\n", + "...pos
test.ParamBenchmark.textContentCheckdata=1,text=a "string" with quotes,va...thrptops/ms139472.551215135249.9703875965..143695.13204299458153578.254496150716.46891485332..156440.0400775279614105.70328110.113605test.ParamBenchmark.textContentCheck\n", + "...pos
test.ParamBenchmark.textContentCheckdata=2,text=a "string" with quotes,va...thrptops/ms137951.951688133789.3696336104..142114.53374258292153262.850584150745.58896373163..155780.1122049946315310.89889611.098719test.ParamBenchmark.textContentCheck\n", + "...pos
test.ParamBenchmark.textContentCheckdata=2,text=a "string" with quotes,va...thrptops/ms135829.985631131190.7048701939..140469.26639132493153672.584595150946.56541126606..156398.6037785117517842.59896413.135979test.ParamBenchmark.textContentCheck\n", + "...pos
test.nested.CommonBenchmark.mathBench...thrptops/ms133932.193305129878.2239827778..137986.16262644873148921.638469148674.35770053475..149168.9192370649514989.44516411.191816test.nested.CommonBenchmark.mathBench...pos
test.CommonBenchmark.longBenchmarkavgtms/op0.0010209.902780506238168E-4..0.0010504284290...0.0008548.428241181867443E-4..8.6492699881309...0.00016616.315691test.CommonBenchmark.longBenchmarkpos
test.CommonBenchmark.longBlackholeBen...avgtms/op0.0000262.5596365181913836E-5..2.697949020758...0.0000232.284205842928573E-5..2.3608924259914...0.00000311.649592test.CommonBenchmark.longBlackholeBen...pos
test.CommonBenchmark.mathBenchmarkavgtms/op0.0000087.456424871291536E-6..7.7734997336766...0.0000076.685553120802533E-6..6.8730115882504...0.00000110.974184test.CommonBenchmark.mathBenchmarkpos
test.JvmTestBenchmark.cosBenchmarkavgtns/op3.9713383.8358525869703075..4.10682434140826753.4958493.48368627561432..3.50801161595222370.47549011.973029test.JvmTestBenchmark.cosBenchmarkpos
test.JvmTestBenchmark.sqrtBenchmarkavgtns/op0.6065980.5901377228601924..0.623059022507190.5411620.5348433328074729..0.54747986807174540.06543710.787496test.JvmTestBenchmark.sqrtBenchmarkpos
\n", " \n", " \n", " " ], - "application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"name\",\"params\",\"mode\",\"unit\",\"score\",\"range\",\"score1\",\"range1\",\"diffScore\",\"diffScorePercentage\",\"testLabel\",\"barColor\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.ranges.ClosedFloatingPointRange\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.ranges.ClosedFloatingPointRange\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":20,\"ncol\":12,\"is_formatted\":false},\"kotlin_dataframe\":[{\"name\":\"test.InheritedBenchmark.baseBenchmark\",\"params\":\"\",\"mode\":\"thrpt\",\"unit\":\"ops/s\",\"score\":1124169.302037032,\"range\":\"1048963.3505892197..1199375.2534848445\",\"score1\":1104972.6706894366,\"range1\":\"1055663.3534587221..1154281.987920151\",\"diffScore\":-19196.63134759548,\"diffScorePercentage\":-1.7076281404242712,\"testLabel\":\"test.InheritedBenchmark.baseBenchmark\",\"barColor\":\"neg\"},{\"name\":\"test.InheritedBenchmark.inheritedBenchmark\",\"params\":\"\",\"mode\":\"thrpt\",\"unit\":\"ops/s\",\"score\":1.4563056890183368E8,\"range\":\"1.4257469243792653E8..1.4868644536574084E8\",\"score1\":1.4634989745609665E8,\"range1\":\"1.437328117109918E8..1.489669832012015E8\",\"diffScore\":719328.5542629659,\"diffScorePercentage\":0.4939406332662542,\"testLabel\":\"test.InheritedBenchmark.inheritedBenchmark\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.mathBenchmark\",\"params\":\"data=1,text=\\\"a \\\"string\\\" with quotes\\\",value=1\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":215040.42648766268,\"range\":\"209159.44934415395..220921.40363117142\",\"score1\":213019.57841385395,\"range1\":\"204650.0532153221..221389.10361238578\",\"diffScore\":-2020.8480738087383,\"diffScorePercentage\":-0.9397526348026837,\"testLabel\":\"test.ParamBenchmark.mathBenchmark\\n[data=1,text=\\\"a \\\"string\\\" with quotes\\\",value=1]\",\"barColor\":\"neg\"},{\"name\":\"test.ParamBenchmark.mathBenchmark\",\"params\":\"data=1,text=\\\"a \\\"string\\\" with quotes\\\",value=2\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":216167.94947592515,\"range\":\"209816.26197479176..222519.63697705854\",\"score1\":214917.7241256119,\"range1\":\"208616.32754332913..221219.12070789465\",\"diffScore\":-1250.225350313267,\"diffScorePercentage\":-0.5783583335754896,\"testLabel\":\"test.ParamBenchmark.mathBenchmark\\n[data=1,text=\\\"a \\\"string\\\" with quotes\\\",value=2]\",\"barColor\":\"neg\"},{\"name\":\"test.ParamBenchmark.mathBenchmark\",\"params\":\"data=2,text=\\\"a \\\"string\\\" with quotes\\\",value=1\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":102937.09492915806,\"range\":\"102198.8667788953..103675.32307942082\",\"score1\":102424.75929129767,\"range1\":\"101113.46667154715..103736.05191104818\",\"diffScore\":-512.335637860393,\"diffScorePercentage\":-0.4977172108975735,\"testLabel\":\"test.ParamBenchmark.mathBenchmark\\n[data=2,text=\\\"a \\\"string\\\" with quotes\\\",value=1]\",\"barColor\":\"neg\"},{\"name\":\"test.ParamBenchmark.mathBenchmark\",\"params\":\"data=2,text=\\\"a \\\"string\\\" with quotes\\\",value=2\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":103082.84485602807,\"range\":\"102746.60675391225..103419.08295814389\",\"score1\":101173.75249296638,\"range1\":\"99908.94648785368..102438.55849807907\",\"diffScore\":-1909.092363061689,\"diffScorePercentage\":-1.8519981338583025,\"testLabel\":\"test.ParamBenchmark.mathBenchmark\\n[data=2,text=\\\"a \\\"string\\\" with quotes\\\",value=2]\",\"barColor\":\"neg\"},{\"name\":\"test.ParamBenchmark.otherBenchmark\",\"params\":\"data=1,text=\\\"a \\\"string\\\" with quotes\\\",value=1\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":2672623.9977166834,\"range\":\"2581766.221460874..2763481.7739724927\",\"score1\":2680506.786160648,\"range1\":\"2646872.2297869264..2714141.3425343693\",\"diffScore\":7882.78844396444,\"diffScorePercentage\":0.2949456583005684,\"testLabel\":\"test.ParamBenchmark.otherBenchmark\\n[data=1,text=\\\"a \\\"string\\\" with quotes\\\",value=1]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.otherBenchmark\",\"params\":\"data=1,text=\\\"a \\\"string\\\" with quotes\\\",value=2\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":2654913.2949247262,\"range\":\"2530927.3446583785..2778899.245191074\",\"score1\":2585022.6644677366,\"range1\":\"2454777.568459309..2715267.760476164\",\"diffScore\":-69890.63045698963,\"diffScorePercentage\":-2.6325014301068244,\"testLabel\":\"test.ParamBenchmark.otherBenchmark\\n[data=1,text=\\\"a \\\"string\\\" with quotes\\\",value=2]\",\"barColor\":\"neg\"},{\"name\":\"test.ParamBenchmark.otherBenchmark\",\"params\":\"data=2,text=\\\"a \\\"string\\\" with quotes\\\",value=1\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":2676852.389264137,\"range\":\"2585653.063020375..2768051.715507899\",\"score1\":2614856.4118722673,\"range1\":\"2580741.3402635106..2648971.483481024\",\"diffScore\":-61995.97739186976,\"diffScorePercentage\":-2.3160028412665805,\"testLabel\":\"test.ParamBenchmark.otherBenchmark\\n[data=2,text=\\\"a \\\"string\\\" with quotes\\\",value=1]\",\"barColor\":\"neg\"},{\"name\":\"test.ParamBenchmark.otherBenchmark\",\"params\":\"data=2,text=\\\"a \\\"string\\\" with quotes\\\",value=2\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":2676496.83515426,\"range\":\"2585056.261771287..2767937.4085372332\",\"score1\":2585237.244524414,\"range1\":\"2552358.4905912033..2618115.998457625\",\"diffScore\":-91259.59062984586,\"diffScorePercentage\":-3.409665553540104,\"testLabel\":\"test.ParamBenchmark.otherBenchmark\\n[data=2,text=\\\"a \\\"string\\\" with quotes\\\",value=2]\",\"barColor\":\"neg\"},{\"name\":\"test.ParamBenchmark.textContentCheck\",\"params\":\"data=1,text=\\\"a \\\"string\\\" with quotes\\\",value=1\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":155929.81523562223,\"range\":\"155267.27942953032..156592.35104171414\",\"score1\":150449.20912261767,\"range1\":\"147414.465281937..153483.95296329833\",\"diffScore\":-5480.606113004556,\"diffScorePercentage\":-3.5147903591900813,\"testLabel\":\"test.ParamBenchmark.textContentCheck\\n[data=1,text=\\\"a \\\"string\\\" with quotes\\\",value=1]\",\"barColor\":\"neg\"},{\"name\":\"test.ParamBenchmark.textContentCheck\",\"params\":\"data=1,text=\\\"a \\\"string\\\" with quotes\\\",value=2\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":156259.91933032282,\"range\":\"155967.2972273164..156552.54143332926\",\"score1\":147058.56562691744,\"range1\":\"140116.58313969668..154000.5481141382\",\"diffScore\":-9201.353703405388,\"diffScorePercentage\":-5.888492546802327,\"testLabel\":\"test.ParamBenchmark.textContentCheck\\n[data=1,text=\\\"a \\\"string\\\" with quotes\\\",value=2]\",\"barColor\":\"neg\"},{\"name\":\"test.ParamBenchmark.textContentCheck\",\"params\":\"data=2,text=\\\"a \\\"string\\\" with quotes\\\",value=1\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":155811.88330649625,\"range\":\"154012.99823010628..157610.76838288622\",\"score1\":146125.99724354869,\"range1\":\"143504.1570471993..148747.83743989808\",\"diffScore\":-9685.886062947568,\"diffScorePercentage\":-6.216397528482819,\"testLabel\":\"test.ParamBenchmark.textContentCheck\\n[data=2,text=\\\"a \\\"string\\\" with quotes\\\",value=1]\",\"barColor\":\"neg\"},{\"name\":\"test.ParamBenchmark.textContentCheck\",\"params\":\"data=2,text=\\\"a \\\"string\\\" with quotes\\\",value=2\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":154835.23402865283,\"range\":\"152299.566575624..157370.90148168168\",\"score1\":150019.93211383233,\"range1\":\"145881.2852993276..154158.57892833705\",\"diffScore\":-4815.301914820506,\"diffScorePercentage\":-3.109952295437753,\"testLabel\":\"test.ParamBenchmark.textContentCheck\\n[data=2,text=\\\"a \\\"string\\\" with quotes\\\",value=2]\",\"barColor\":\"neg\"},{\"name\":\"test.nested.CommonBenchmark.mathBenchmark\",\"params\":\"\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":149758.67842734433,\"range\":\"149465.14095246932..150052.21590221935\",\"score1\":145509.90114707965,\"range1\":\"143242.89296995336..147776.90932420595\",\"diffScore\":-4248.77728026468,\"diffScorePercentage\":-2.8370825149381784,\"testLabel\":\"test.nested.CommonBenchmark.mathBenchmark\",\"barColor\":\"neg\"},{\"name\":\"test.CommonBenchmark.longBenchmark\",\"params\":\"\",\"mode\":\"avgt\",\"unit\":\"ms/op\",\"score\":8.442082734074419E-4,\"range\":\"8.372522775198425E-4..8.511642692950413E-4\",\"score1\":8.972137714852465E-4,\"range1\":\"8.737790976669418E-4..9.206484453035511E-4\",\"diffScore\":-5.3005498077804544E-5,\"diffScorePercentage\":-6.278722887168673,\"testLabel\":\"test.CommonBenchmark.longBenchmark\",\"barColor\":\"neg\"},{\"name\":\"test.CommonBenchmark.longBlackholeBenchmark\",\"params\":\"\",\"mode\":\"avgt\",\"unit\":\"ms/op\",\"score\":2.1647588413775662E-5,\"range\":\"2.1394152325114E-5..2.1901024502437323E-5\",\"score1\":2.369188528309145E-5,\"range1\":\"2.3161777788037864E-5..2.4221992778145036E-5\",\"diffScore\":-2.044296869315788E-6,\"diffScorePercentage\":-9.443531677712787,\"testLabel\":\"test.CommonBenchmark.longBlackholeBenchmark\",\"barColor\":\"neg\"},{\"name\":\"test.CommonBenchmark.mathBenchmark\",\"params\":\"\",\"mode\":\"avgt\",\"unit\":\"ms/op\",\"score\":6.6933720644037785E-6,\"range\":\"6.650531071713415E-6..6.736213057094142E-6\",\"score1\":6.7916806977233165E-6,\"range1\":\"6.710269330854009E-6..6.8730920645926235E-6\",\"diffScore\":-9.830863331953794E-8,\"diffScorePercentage\":-1.4687459829456666,\"testLabel\":\"test.CommonBenchmark.mathBenchmark\",\"barColor\":\"neg\"},{\"name\":\"test.JvmTestBenchmark.cosBenchmark\",\"params\":\"\",\"mode\":\"avgt\",\"unit\":\"ns/op\",\"score\":3.472485344175375,\"range\":\"3.4596934638924464..3.485277224458304\",\"score1\":3.5445401759264423,\"range1\":\"3.5170213910539556..3.572058960798929\",\"diffScore\":-0.0720548317510672,\"diffScorePercentage\":-2.075021911091128,\"testLabel\":\"test.JvmTestBenchmark.cosBenchmark\",\"barColor\":\"neg\"},{\"name\":\"test.JvmTestBenchmark.sqrtBenchmark\",\"params\":\"\",\"mode\":\"avgt\",\"unit\":\"ns/op\",\"score\":0.5348082435809666,\"range\":\"0.5300538318352048..0.5395626553267283\",\"score1\":0.5428283650466172,\"range1\":\"0.5388189143575554..0.5468378157356791\",\"diffScore\":-0.008020121465650676,\"diffScorePercentage\":-1.4996256250557365,\"testLabel\":\"test.JvmTestBenchmark.sqrtBenchmark\",\"barColor\":\"neg\"}]}" + "application/kotlindataframe+json": "{\"$version\":\"2.1.1\",\"metadata\":{\"columns\":[\"name\",\"params\",\"mode\",\"unit\",\"score\",\"range\",\"score1\",\"range1\",\"diffScore\",\"diffScorePercentage\",\"testLabel\",\"barColor\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.ranges.ClosedFloatingPointRange\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.ranges.ClosedFloatingPointRange\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":20,\"ncol\":12},\"kotlin_dataframe\":[{\"name\":\"test.InheritedBenchmark.baseBenchmark\",\"params\":\"\",\"mode\":\"thrpt\",\"unit\":\"ops/s\",\"score\":999715.5730582711,\"range\":\"974954.2809652109..1024476.8651513313\",\"score1\":1140852.9572294937,\"range1\":\"1106659.7386652725..1175046.1757937148\",\"diffScore\":141137.38417122257,\"diffScorePercentage\":14.117753886684326,\"testLabel\":\"test.InheritedBenchmark.baseBenchmark\",\"barColor\":\"pos\"},{\"name\":\"test.InheritedBenchmark.inheritedBenchmark\",\"params\":\"\",\"mode\":\"thrpt\",\"unit\":\"ops/s\",\"score\":1.3251985400275281E8,\"range\":\"1.2936737342079675E8..1.3567233458470887E8\",\"score1\":1.4679256089580712E8,\"range1\":\"1.4482756334251586E8..1.4875755844909838E8\",\"diffScore\":1.4272706893054307E7,\"diffScorePercentage\":10.770240429602211,\"testLabel\":\"test.InheritedBenchmark.inheritedBenchmark\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.mathBenchmark\",\"params\":\"data=1,text=a \\\"string\\\" with quotes,value=1\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":196902.03613375648,\"range\":\"191654.7423267418..202149.32994077116\",\"score1\":217133.49180414138,\"range1\":\"215027.16316066374..219239.82044761901\",\"diffScore\":20231.455670384894,\"diffScorePercentage\":10.274883930931813,\"testLabel\":\"test.ParamBenchmark.mathBenchmark\\n[data=1,text=a \\\"string\\\" with quotes,value=1]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.mathBenchmark\",\"params\":\"data=1,text=a \\\"string\\\" with quotes,value=2\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":198982.020454078,\"range\":\"194497.3197739599..203466.72113419612\",\"score1\":216593.77514237256,\"range1\":\"212594.8732753121..220592.677009433\",\"diffScore\":17611.754688294546,\"diffScorePercentage\":8.85092766075268,\"testLabel\":\"test.ParamBenchmark.mathBenchmark\\n[data=1,text=a \\\"string\\\" with quotes,value=2]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.mathBenchmark\",\"params\":\"data=2,text=a \\\"string\\\" with quotes,value=1\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":76487.5086281744,\"range\":\"74595.04831374026..78379.96894260854\",\"score1\":86523.58851663295,\"range1\":\"82315.21514352418..90731.96188974172\",\"diffScore\":10036.079888458553,\"diffScorePercentage\":13.121201184949738,\"testLabel\":\"test.ParamBenchmark.mathBenchmark\\n[data=2,text=a \\\"string\\\" with quotes,value=1]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.mathBenchmark\",\"params\":\"data=2,text=a \\\"string\\\" with quotes,value=2\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":77218.5368951281,\"range\":\"75599.16372724227..78837.91006301393\",\"score1\":85944.38196061649,\"range1\":\"81177.07416021802..90711.68976101496\",\"diffScore\":8725.845065488393,\"diffScorePercentage\":11.300194767143958,\"testLabel\":\"test.ParamBenchmark.mathBenchmark\\n[data=2,text=a \\\"string\\\" with quotes,value=2]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.otherBenchmark\",\"params\":\"data=1,text=a \\\"string\\\" with quotes,value=1\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":2312642.7736440543,\"range\":\"2091779.438724716..2533506.1085633924\",\"score1\":2616589.1987896026,\"range1\":\"2579570.7359826625..2653607.6615965427\",\"diffScore\":303946.4251455483,\"diffScorePercentage\":13.142817758516887,\"testLabel\":\"test.ParamBenchmark.otherBenchmark\\n[data=1,text=a \\\"string\\\" with quotes,value=1]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.otherBenchmark\",\"params\":\"data=1,text=a \\\"string\\\" with quotes,value=2\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":2295922.9388216315,\"range\":\"2089935.2366487498..2501910.6409945134\",\"score1\":2629054.4416714,\"range1\":\"2524752.102688715..2733356.780654085\",\"diffScore\":333131.5028497684,\"diffScorePercentage\":14.509698788964847,\"testLabel\":\"test.ParamBenchmark.otherBenchmark\\n[data=1,text=a \\\"string\\\" with quotes,value=2]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.otherBenchmark\",\"params\":\"data=2,text=a \\\"string\\\" with quotes,value=1\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":2295223.3640071456,\"range\":\"2115768.594299648..2474678.1337146433\",\"score1\":2646402.737052186,\"range1\":\"2616649.4130033795..2676156.0611009924\",\"diffScore\":351179.3730450403,\"diffScorePercentage\":15.300444329388892,\"testLabel\":\"test.ParamBenchmark.otherBenchmark\\n[data=2,text=a \\\"string\\\" with quotes,value=1]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.otherBenchmark\",\"params\":\"data=2,text=a \\\"string\\\" with quotes,value=2\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":2295128.5932107824,\"range\":\"2082445.0002591067..2507812.186162458\",\"score1\":2652047.7421421655,\"range1\":\"2627344.681389795..2676750.802894536\",\"diffScore\":356919.14893138316,\"diffScorePercentage\":15.551161272060545,\"testLabel\":\"test.ParamBenchmark.otherBenchmark\\n[data=2,text=a \\\"string\\\" with quotes,value=2]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.textContentCheck\",\"params\":\"data=1,text=a \\\"string\\\" with quotes,value=1\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":139497.9818106305,\"range\":\"135894.93943472698..143101.02418653402\",\"score1\":154381.7669701935,\"range1\":\"153348.64196544446..155414.89197494255\",\"diffScore\":14883.785159563005,\"diffScorePercentage\":10.669534402130527,\"testLabel\":\"test.ParamBenchmark.textContentCheck\\n[data=1,text=a \\\"string\\\" with quotes,value=1]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.textContentCheck\",\"params\":\"data=1,text=a \\\"string\\\" with quotes,value=2\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":139472.55121529553,\"range\":\"135249.9703875965..143695.13204299458\",\"score1\":153578.25449619064,\"range1\":\"150716.46891485332..156440.04007752796\",\"diffScore\":14105.703280895104,\"diffScorePercentage\":10.113605263533874,\"testLabel\":\"test.ParamBenchmark.textContentCheck\\n[data=1,text=a \\\"string\\\" with quotes,value=2]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.textContentCheck\",\"params\":\"data=2,text=a \\\"string\\\" with quotes,value=1\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":137951.95168809665,\"range\":\"133789.3696336104..142114.53374258292\",\"score1\":153262.85058436313,\"range1\":\"150745.58896373163..155780.11220499463\",\"diffScore\":15310.898896266473,\"diffScorePercentage\":11.098718582020316,\"testLabel\":\"test.ParamBenchmark.textContentCheck\\n[data=2,text=a \\\"string\\\" with quotes,value=1]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.textContentCheck\",\"params\":\"data=2,text=a \\\"string\\\" with quotes,value=2\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":135829.98563075942,\"range\":\"131190.7048701939..140469.26639132493\",\"score1\":153672.5845948889,\"range1\":\"150946.56541126606..156398.60377851175\",\"diffScore\":17842.598964129487,\"diffScorePercentage\":13.13597942403738,\"testLabel\":\"test.ParamBenchmark.textContentCheck\\n[data=2,text=a \\\"string\\\" with quotes,value=2]\",\"barColor\":\"pos\"},{\"name\":\"test.nested.CommonBenchmark.mathBenchmark\",\"params\":\"\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":133932.19330461326,\"range\":\"129878.2239827778..137986.16262644873\",\"score1\":148921.63846879985,\"range1\":\"148674.35770053475..149168.91923706495\",\"diffScore\":14989.445164186589,\"diffScorePercentage\":11.191816391817635,\"testLabel\":\"test.nested.CommonBenchmark.mathBenchmark\",\"barColor\":\"pos\"},{\"name\":\"test.CommonBenchmark.longBenchmark\",\"params\":\"\",\"mode\":\"avgt\",\"unit\":\"ms/op\",\"score\":0.0010203532398568873,\"range\":\"9.902780506238168E-4..0.0010504284290899577\",\"score1\":8.538755584999174E-4,\"range1\":\"8.428241181867443E-4..8.649269988130904E-4\",\"diffScore\":1.6647768135696992E-4,\"diffScorePercentage\":16.31569096407434,\"testLabel\":\"test.CommonBenchmark.longBenchmark\",\"barColor\":\"pos\"},{\"name\":\"test.CommonBenchmark.longBlackholeBenchmark\",\"params\":\"\",\"mode\":\"avgt\",\"unit\":\"ms/op\",\"score\":2.6287927694751805E-5,\"range\":\"2.5596365181913836E-5..2.6979490207589775E-5\",\"score1\":2.3225491344599873E-5,\"range1\":\"2.284205842928573E-5..2.3608924259914014E-5\",\"diffScore\":3.0624363501519328E-6,\"diffScorePercentage\":11.649592108256316,\"testLabel\":\"test.CommonBenchmark.longBlackholeBenchmark\",\"barColor\":\"pos\"},{\"name\":\"test.CommonBenchmark.mathBenchmark\",\"params\":\"\",\"mode\":\"avgt\",\"unit\":\"ms/op\",\"score\":7.614962302484078E-6,\"range\":\"7.456424871291536E-6..7.77349973367662E-6\",\"score1\":6.779282354526504E-6,\"range1\":\"6.685553120802533E-6..6.873011588250474E-6\",\"diffScore\":8.356799479575747E-7,\"diffScorePercentage\":10.974183650061766,\"testLabel\":\"test.CommonBenchmark.mathBenchmark\",\"barColor\":\"pos\"},{\"name\":\"test.JvmTestBenchmark.cosBenchmark\",\"params\":\"\",\"mode\":\"avgt\",\"unit\":\"ns/op\",\"score\":3.9713384641892873,\"range\":\"3.8358525869703075..4.1068243414082675\",\"score1\":3.4958489457832718,\"range1\":\"3.48368627561432..3.5080116159522237\",\"diffScore\":0.4754895184060155,\"diffScorePercentage\":11.973029312249324,\"testLabel\":\"test.JvmTestBenchmark.cosBenchmark\",\"barColor\":\"pos\"},{\"name\":\"test.JvmTestBenchmark.sqrtBenchmark\",\"params\":\"\",\"mode\":\"avgt\",\"unit\":\"ns/op\",\"score\":0.6065983726836912,\"range\":\"0.5901377228601924..0.62305902250719\",\"score1\":0.5411616004396091,\"range1\":\"0.5348433328074729..0.5474798680717454\",\"diffScore\":0.06543677224408206,\"diffScorePercentage\":10.787495514466844,\"testLabel\":\"test.JvmTestBenchmark.sqrtBenchmark\",\"barColor\":\"pos\"}]}" }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 8 + "execution_count": 9 }, { "metadata": { - "ExecuteTime": { - "end_time": "2025-10-15T06:52:40.654419Z", - "start_time": "2025-10-15T06:52:39.985683Z" - }, "executionRelatedData": { "compiledClasses": [ - "Line_40_jupyter" + "Line_38_jupyter" ] + }, + "ExecuteTime": { + "end_time": "2025-11-12T23:01:13.096488Z", + "start_time": "2025-11-12T23:01:12.552457Z" } }, "cell_type": "code", "source": [ "import org.jetbrains.kotlinx.kandy.util.color.Color\n", "import org.jetbrains.letsPlot.core.spec.plotson.fill\n", - "import org.jetbrains.letsPlot.core.spec.plotson.format\n", - "import org.jetbrains.letsPlot.core.spec.plotson.title\n", "import org.jetbrains.letsPlot.label.ggtitle\n", "import org.jetbrains.letsPlot.scale.guideLegend\n", "import org.jetbrains.letsPlot.scale.guides\n", @@ -1010,47 +1056,23 @@ " \n", + "</html>\"> \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " -8\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " -6\n", + " \n", + " \n", + " 0\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " -4\n", + " \n", + " \n", + " 5\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " -2\n", + " \n", + " \n", + " 10\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " 0\n", + " \n", + " \n", + " 15\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " test.CommonBenchmark.longBlackholeBenchmark\n", + " \n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.mathBenchmark [data=1,text=a "string" with quotes,value=2]\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " test.CommonBenchmark.longBenchmark\n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.textContentCheck [data=1,text=a "string" with quotes,value=2]\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " test.ParamBenchmark.textContentCheck\n", - " \n", - " \n", - " [data=2,text="a "string" with quotes",value=1]\n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.mathBenchmark [data=1,text=a "string" with quotes,value=1]\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " test.ParamBenchmark.textContentCheck\n", - " \n", - " \n", - " [data=1,text="a "string" with quotes",value=2]\n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.textContentCheck [data=1,text=a "string" with quotes,value=1]\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " test.ParamBenchmark.textContentCheck\n", - " \n", - " \n", - " [data=1,text="a "string" with quotes",value=1]\n", + " \n", + " \n", + " \n", + " test.InheritedBenchmark.inheritedBenchmark\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " test.ParamBenchmark.otherBenchmark\n", - " \n", - " \n", - " [data=2,text="a "string" with quotes",value=2]\n", + " \n", + " \n", + " \n", + " test.JvmTestBenchmark.sqrtBenchmark\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " test.ParamBenchmark.textContentCheck\n", + " \n", + " \n", + " \n", + " test.CommonBenchmark.mathBenchmark\n", " \n", - " \n", - " [data=2,text="a "string" with quotes",value=2]\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.textContentCheck [data=2,text=a "string" with quotes,value=1]\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " test.nested.CommonBenchmark.mathBenchmark\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " test.ParamBenchmark.otherBenchmark\n", - " \n", - " \n", - " [data=1,text="a "string" with quotes",value=2]\n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.mathBenchmark [data=2,text=a "string" with quotes,value=2]\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " test.ParamBenchmark.otherBenchmark\n", - " \n", - " \n", - " [data=2,text="a "string" with quotes",value=1]\n", + " \n", + " \n", + " \n", + " test.CommonBenchmark.longBlackholeBenchmark\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " test.JvmTestBenchmark.cosBenchmark\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " test.ParamBenchmark.mathBenchmark\n", - " \n", - " \n", - " [data=2,text="a "string" with quotes",value=2]\n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.mathBenchmark [data=2,text=a "string" with quotes,value=1]\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " test.InheritedBenchmark.baseBenchmark\n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.textContentCheck [data=2,text=a "string" with quotes,value=2]\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " test.JvmTestBenchmark.sqrtBenchmark\n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.otherBenchmark [data=1,text=a "string" with quotes,value=1]\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " test.CommonBenchmark.mathBenchmark\n", + " \n", + " \n", + " \n", + " test.InheritedBenchmark.baseBenchmark\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " test.ParamBenchmark.mathBenchmark\n", - " \n", - " \n", - " [data=1,text="a "string" with quotes",value=1]\n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.otherBenchmark [data=1,text=a "string" with quotes,value=2]\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " test.ParamBenchmark.mathBenchmark\n", - " \n", - " \n", - " [data=1,text="a "string" with quotes",value=2]\n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.otherBenchmark [data=2,text=a "string" with quotes,value=1]\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " test.ParamBenchmark.mathBenchmark\n", - " \n", - " \n", - " [data=2,text="a "string" with quotes",value=1]\n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.otherBenchmark [data=2,text=a "string" with quotes,value=2]\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " test.ParamBenchmark.otherBenchmark\n", - " \n", - " \n", - " [data=1,text="a "string" with quotes",value=1]\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " test.InheritedBenchmark.inheritedBenchmark\n", + " \n", + " \n", + " \n", + " test.CommonBenchmark.longBenchmark\n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -1638,9 +1594,12 @@ " \n", " \n", " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " Diff %\n", " \n", @@ -1648,10 +1607,10 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", "\n", - " " + " " ], "application/plot+json": { "output_type": "lets_plot_spec", @@ -1659,68 +1618,68 @@ "mapping": {}, "data": { "testLabel": [ - "test.CommonBenchmark.longBlackholeBenchmark", - "test.CommonBenchmark.longBenchmark", - "test.ParamBenchmark.textContentCheck\n[data=2,text=\"a \"string\" with quotes\",value=1]", - "test.ParamBenchmark.textContentCheck\n[data=1,text=\"a \"string\" with quotes\",value=2]", - "test.ParamBenchmark.textContentCheck\n[data=1,text=\"a \"string\" with quotes\",value=1]", - "test.ParamBenchmark.otherBenchmark\n[data=2,text=\"a \"string\" with quotes\",value=2]", - "test.ParamBenchmark.textContentCheck\n[data=2,text=\"a \"string\" with quotes\",value=2]", + "test.ParamBenchmark.mathBenchmark\n[data=1,text=a \"string\" with quotes,value=2]", + "test.ParamBenchmark.textContentCheck\n[data=1,text=a \"string\" with quotes,value=2]", + "test.ParamBenchmark.mathBenchmark\n[data=1,text=a \"string\" with quotes,value=1]", + "test.ParamBenchmark.textContentCheck\n[data=1,text=a \"string\" with quotes,value=1]", + "test.InheritedBenchmark.inheritedBenchmark", + "test.JvmTestBenchmark.sqrtBenchmark", + "test.CommonBenchmark.mathBenchmark", + "test.ParamBenchmark.textContentCheck\n[data=2,text=a \"string\" with quotes,value=1]", "test.nested.CommonBenchmark.mathBenchmark", - "test.ParamBenchmark.otherBenchmark\n[data=1,text=\"a \"string\" with quotes\",value=2]", - "test.ParamBenchmark.otherBenchmark\n[data=2,text=\"a \"string\" with quotes\",value=1]", + "test.ParamBenchmark.mathBenchmark\n[data=2,text=a \"string\" with quotes,value=2]", + "test.CommonBenchmark.longBlackholeBenchmark", "test.JvmTestBenchmark.cosBenchmark", - "test.ParamBenchmark.mathBenchmark\n[data=2,text=\"a \"string\" with quotes\",value=2]", + "test.ParamBenchmark.mathBenchmark\n[data=2,text=a \"string\" with quotes,value=1]", + "test.ParamBenchmark.textContentCheck\n[data=2,text=a \"string\" with quotes,value=2]", + "test.ParamBenchmark.otherBenchmark\n[data=1,text=a \"string\" with quotes,value=1]", "test.InheritedBenchmark.baseBenchmark", - "test.JvmTestBenchmark.sqrtBenchmark", - "test.CommonBenchmark.mathBenchmark", - "test.ParamBenchmark.mathBenchmark\n[data=1,text=\"a \"string\" with quotes\",value=1]", - "test.ParamBenchmark.mathBenchmark\n[data=1,text=\"a \"string\" with quotes\",value=2]", - "test.ParamBenchmark.mathBenchmark\n[data=2,text=\"a \"string\" with quotes\",value=1]", - "test.ParamBenchmark.otherBenchmark\n[data=1,text=\"a \"string\" with quotes\",value=1]", - "test.InheritedBenchmark.inheritedBenchmark" + "test.ParamBenchmark.otherBenchmark\n[data=1,text=a \"string\" with quotes,value=2]", + "test.ParamBenchmark.otherBenchmark\n[data=2,text=a \"string\" with quotes,value=1]", + "test.ParamBenchmark.otherBenchmark\n[data=2,text=a \"string\" with quotes,value=2]", + "test.CommonBenchmark.longBenchmark" ], "diffScorePercentage": [ - -9.443531677712787, - -6.278722887168673, - -6.216397528482819, - -5.888492546802327, - -3.5147903591900813, - -3.409665553540104, - -3.109952295437753, - -2.8370825149381784, - -2.6325014301068244, - -2.3160028412665805, - -2.075021911091128, - -1.8519981338583025, - -1.7076281404242712, - -1.4996256250557365, - -1.4687459829456666, - -0.9397526348026837, - -0.5783583335754896, - -0.4977172108975735, - 0.2949456583005684, - 0.4939406332662542 + 8.85092766075268, + 10.113605263533874, + 10.274883930931813, + 10.669534402130527, + 10.770240429602211, + 10.787495514466844, + 10.974183650061766, + 11.098718582020316, + 11.191816391817635, + 11.300194767143958, + 11.649592108256316, + 11.973029312249324, + 13.121201184949738, + 13.13597942403738, + 13.142817758516887, + 14.117753886684326, + 14.509698788964847, + 15.300444329388892, + 15.551161272060545, + 16.31569096407434 ], "barColor": [ - "neg", - "neg", - "neg", - "neg", - "neg", - "neg", - "neg", - "neg", - "neg", - "neg", - "neg", - "neg", - "neg", - "neg", - "neg", - "neg", - "neg", - "neg", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", "pos", "pos" ] @@ -1819,23 +1778,23 @@ "swing_enabled": true } }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 9 + "execution_count": 10 }, { "metadata": { - "ExecuteTime": { - "end_time": "2025-10-15T06:52:40.787999Z", - "start_time": "2025-10-15T06:52:40.667895Z" - }, "executionRelatedData": { "compiledClasses": [ - "Line_41_jupyter" + "Line_39_jupyter" ] + }, + "ExecuteTime": { + "end_time": "2025-11-12T23:01:13.354938Z", + "start_time": "2025-11-12T23:01:13.243696Z" } }, "cell_type": "code", @@ -2037,9 +1996,9 @@ " </style>\n", " </head>\n", " <body>\n", - " <table class="dataframe" id="df_-1107296252"></table>\n", + " <table class="dataframe" id="df_-268435452"></table>\n", "\n", - "<p class="dataframe_description">DataFrame: rowsCount = 8, columnsCount = 12</p>\n", + "<p class="dataframe_description">DataFrame: rowsCount = 20, columnsCount = 12</p>\n", "\n", " </body>\n", " <script>\n", @@ -2318,22 +2277,22 @@ "})()\n", "\n", "/*<!--*/\n", - "call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"name: String\">name</span>", children: [], rightAlign: false, values: ["test.ParamBenchmark.mathBenchmark","test.ParamBenchmark.textContentCheck","test.ParamBenchmark.textContentCheck","test.ParamBenchmark.textContentCheck","<span class=\"formatted\" title=\"test.nested.CommonBenchmark.mathBenchmark\">test.nested.CommonBenchmark.mathBench<span class=\"structural\">...</span></span>","test.CommonBenchmark.longBenchmark","<span class=\"formatted\" title=\"test.CommonBenchmark.longBlackholeBenchmark\">test.CommonBenchmark.longBlackholeBen<span class=\"structural\">...</span></span>","test.JvmTestBenchmark.cosBenchmark"] }, \n", - "{ name: "<span title=\"params: String\">params</span>", children: [], rightAlign: false, values: ["<span class=\"formatted\" title=\"data=2,text=&#34;a &#34;string&#34; with quotes&#34;,value=2\">data=2,text=&#34;a &#34;string&#34; with quotes&#34;,<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=1,text=&#34;a &#34;string&#34; with quotes&#34;,value=1\">data=1,text=&#34;a &#34;string&#34; with quotes&#34;,<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=1,text=&#34;a &#34;string&#34; with quotes&#34;,value=2\">data=1,text=&#34;a &#34;string&#34; with quotes&#34;,<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=2,text=&#34;a &#34;string&#34; with quotes&#34;,value=1\">data=2,text=&#34;a &#34;string&#34; with quotes&#34;,<span class=\"structural\">...</span></span>","","","",""] }, \n", - "{ name: "<span title=\"mode: String\">mode</span>", children: [], rightAlign: false, values: ["thrpt","thrpt","thrpt","thrpt","thrpt","avgt","avgt","avgt"] }, \n", - "{ name: "<span title=\"unit: String\">unit</span>", children: [], rightAlign: false, values: ["ops/ms","ops/ms","ops/ms","ops/ms","ops/ms","ms/op","ms/op","ns/op"] }, \n", - "{ name: "<span title=\"score: Double\">score</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">103082.844856</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">155929.815236</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">156259.919330</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">155811.883306</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">149758.678427</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000844</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000022</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.472485</span></span>"] }, \n", - "{ name: "<span title=\"range: ranges.ClosedFloatingPointRange<Double>\">range</span>", children: [], rightAlign: false, values: ["102746.60675391225..103419.08295814389","155267.27942953032..156592.35104171414","155967.2972273164..156552.54143332926","154012.99823010628..157610.76838288622","149465.14095246932..150052.21590221935","<span class=\"formatted\" title=\"8.372522775198425E-4..8.511642692950413E-4\">8.372522775198425E-4..8.5116426929504<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"2.1394152325114E-5..2.1901024502437323E-5\">2.1394152325114E-5..2.190102450243732<span class=\"structural\">...</span></span>","3.4596934638924464..3.485277224458304"] }, \n", - "{ name: "<span title=\"score1: Double\">score1</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">101173.752493</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">150449.209123</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">147058.565627</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">146125.997244</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">145509.901147</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000897</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000024</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.544540</span></span>"] }, \n", - "{ name: "<span title=\"range1: ranges.ClosedFloatingPointRange<Double>\">range1</span>", children: [], rightAlign: false, values: ["99908.94648785368..102438.55849807907","147414.465281937..153483.95296329833","140116.58313969668..154000.5481141382","143504.1570471993..148747.83743989808","143242.89296995336..147776.90932420595","<span class=\"formatted\" title=\"8.737790976669418E-4..9.206484453035511E-4\">8.737790976669418E-4..9.2064844530355<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"2.3161777788037864E-5..2.4221992778145036E-5\">2.3161777788037864E-5..2.422199277814<span class=\"structural\">...</span></span>","3.5170213910539556..3.572058960798929"] }, \n", - "{ name: "<span title=\"diffScore: Double\">diffScore</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">-1909.092363</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-5480.606113</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-9201.353703</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-9685.886063</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-4248.777280</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-0.000053</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-0.000002</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-0.072055</span></span>"] }, \n", - "{ name: "<span title=\"diffScorePercentage: Double\">diffScorePercentage</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">-1.851998</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-3.514790</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-5.888493</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-6.216398</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-2.837083</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-6.278723</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-9.443532</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">-2.075022</span></span>"] }, \n", - "{ name: "<span title=\"testLabel: String\">testLabel</span>", children: [], rightAlign: false, values: ["<span class=\"formatted\" title=\"test.ParamBenchmark.mathBenchmark\n[data=2,text=&#34;a &#34;string&#34; with quotes&#34;,value=2]\">test.ParamBenchmark.mathBenchmark\n[da<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.textContentCheck\n[data=1,text=&#34;a &#34;string&#34; with quotes&#34;,value=1]\">test.ParamBenchmark.textContentCheck\n<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.textContentCheck\n[data=1,text=&#34;a &#34;string&#34; with quotes&#34;,value=2]\">test.ParamBenchmark.textContentCheck\n<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.textContentCheck\n[data=2,text=&#34;a &#34;string&#34; with quotes&#34;,value=1]\">test.ParamBenchmark.textContentCheck\n<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.nested.CommonBenchmark.mathBenchmark\">test.nested.CommonBenchmark.mathBench<span class=\"structural\">...</span></span>","test.CommonBenchmark.longBenchmark","<span class=\"formatted\" title=\"test.CommonBenchmark.longBlackholeBenchmark\">test.CommonBenchmark.longBlackholeBen<span class=\"structural\">...</span></span>","test.JvmTestBenchmark.cosBenchmark"] }, \n", - "{ name: "<span title=\"barColor: String\">barColor</span>", children: [], rightAlign: false, values: ["neg","neg","neg","neg","neg","neg","neg","neg"] }, \n", - "], id: -1107296252, rootId: -1107296252, totalRows: 8 } ) });\n", + "call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: "<span title=\"name: String\">name</span>", children: [], rightAlign: false, values: ["test.InheritedBenchmark.baseBenchmark","<span class=\"formatted\" title=\"test.InheritedBenchmark.inheritedBenchmark\">test.InheritedBenchmark.inheritedBenc<span class=\"structural\">...</span></span>","test.ParamBenchmark.mathBenchmark","test.ParamBenchmark.mathBenchmark","test.ParamBenchmark.mathBenchmark","test.ParamBenchmark.mathBenchmark","test.ParamBenchmark.otherBenchmark","test.ParamBenchmark.otherBenchmark","test.ParamBenchmark.otherBenchmark","test.ParamBenchmark.otherBenchmark","test.ParamBenchmark.textContentCheck","test.ParamBenchmark.textContentCheck","test.ParamBenchmark.textContentCheck","test.ParamBenchmark.textContentCheck","<span class=\"formatted\" title=\"test.nested.CommonBenchmark.mathBenchmark\">test.nested.CommonBenchmark.mathBench<span class=\"structural\">...</span></span>","test.CommonBenchmark.longBenchmark","<span class=\"formatted\" title=\"test.CommonBenchmark.longBlackholeBenchmark\">test.CommonBenchmark.longBlackholeBen<span class=\"structural\">...</span></span>","test.CommonBenchmark.mathBenchmark","test.JvmTestBenchmark.cosBenchmark","test.JvmTestBenchmark.sqrtBenchmark"] }, \n", + "{ name: "<span title=\"params: String\">params</span>", children: [], rightAlign: false, values: ["","","<span class=\"formatted\" title=\"data=1,text=a &#34;string&#34; with quotes,value=1\">data=1,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=1,text=a &#34;string&#34; with quotes,value=2\">data=1,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=2,text=a &#34;string&#34; with quotes,value=1\">data=2,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=2,text=a &#34;string&#34; with quotes,value=2\">data=2,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=1,text=a &#34;string&#34; with quotes,value=1\">data=1,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=1,text=a &#34;string&#34; with quotes,value=2\">data=1,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=2,text=a &#34;string&#34; with quotes,value=1\">data=2,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=2,text=a &#34;string&#34; with quotes,value=2\">data=2,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=1,text=a &#34;string&#34; with quotes,value=1\">data=1,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=1,text=a &#34;string&#34; with quotes,value=2\">data=1,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=2,text=a &#34;string&#34; with quotes,value=1\">data=2,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"data=2,text=a &#34;string&#34; with quotes,value=2\">data=2,text=a &#34;string&#34; with quotes,va<span class=\"structural\">...</span></span>","","","","","",""] }, \n", + "{ name: "<span title=\"mode: String\">mode</span>", children: [], rightAlign: false, values: ["thrpt","thrpt","thrpt","thrpt","thrpt","thrpt","thrpt","thrpt","thrpt","thrpt","thrpt","thrpt","thrpt","thrpt","thrpt","avgt","avgt","avgt","avgt","avgt"] }, \n", + "{ name: "<span title=\"unit: String\">unit</span>", children: [], rightAlign: false, values: ["ops/s","ops/s","ops/ms","ops/ms","ops/ms","ops/ms","ops/ms","ops/ms","ops/ms","ops/ms","ops/ms","ops/ms","ops/ms","ops/ms","ops/ms","ms/op","ms/op","ms/op","ns/op","ns/op"] }, \n", + "{ name: "<span title=\"score: Double\">score</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">999715.573058</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">132519854.002753</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">196902.036134</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">198982.020454</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">76487.508628</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">77218.536895</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2312642.773644</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2295922.938822</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2295223.364007</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2295128.593211</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">139497.981811</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">139472.551215</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">137951.951688</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">135829.985631</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">133932.193305</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.001020</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000026</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000008</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.971338</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.606598</span></span>"] }, \n", + "{ name: "<span title=\"range: ranges.ClosedFloatingPointRange<Double>\">range</span>", children: [], rightAlign: false, values: ["974954.2809652109..1024476.8651513313","<span class=\"formatted\" title=\"1.2936737342079675E8..1.3567233458470887E8\">1.2936737342079675E8..1.3567233458470<span class=\"structural\">...</span></span>","191654.7423267418..202149.32994077116","194497.3197739599..203466.72113419612","74595.04831374026..78379.96894260854","75599.16372724227..78837.91006301393","2091779.438724716..2533506.1085633924","2089935.2366487498..2501910.6409945134","2115768.594299648..2474678.1337146433","2082445.0002591067..2507812.186162458","135894.93943472698..143101.02418653402","135249.9703875965..143695.13204299458","133789.3696336104..142114.53374258292","131190.7048701939..140469.26639132493","129878.2239827778..137986.16262644873","<span class=\"formatted\" title=\"9.902780506238168E-4..0.0010504284290899577\">9.902780506238168E-4..0.0010504284290<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"2.5596365181913836E-5..2.6979490207589775E-5\">2.5596365181913836E-5..2.697949020758<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"7.456424871291536E-6..7.77349973367662E-6\">7.456424871291536E-6..7.7734997336766<span class=\"structural\">...</span></span>","3.8358525869703075..4.1068243414082675","0.5901377228601924..0.62305902250719"] }, \n", + "{ name: "<span title=\"score1: Double\">score1</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">1140852.957229</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">146792560.895807</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">217133.491804</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">216593.775142</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">86523.588517</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">85944.381961</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2616589.198790</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2629054.441671</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2646402.737052</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">2652047.742142</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">154381.766970</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">153578.254496</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">153262.850584</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">153672.584595</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">148921.638469</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000854</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000023</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000007</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">3.495849</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.541162</span></span>"] }, \n", + "{ name: "<span title=\"range1: ranges.ClosedFloatingPointRange<Double>\">range1</span>", children: [], rightAlign: false, values: ["1106659.7386652725..1175046.1757937148","<span class=\"formatted\" title=\"1.4482756334251586E8..1.4875755844909838E8\">1.4482756334251586E8..1.4875755844909<span class=\"structural\">...</span></span>","215027.16316066374..219239.82044761901","212594.8732753121..220592.677009433","82315.21514352418..90731.96188974172","81177.07416021802..90711.68976101496","2579570.7359826625..2653607.6615965427","2524752.102688715..2733356.780654085","2616649.4130033795..2676156.0611009924","2627344.681389795..2676750.802894536","153348.64196544446..155414.89197494255","150716.46891485332..156440.04007752796","150745.58896373163..155780.11220499463","150946.56541126606..156398.60377851175","148674.35770053475..149168.91923706495","<span class=\"formatted\" title=\"8.428241181867443E-4..8.649269988130904E-4\">8.428241181867443E-4..8.6492699881309<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"2.284205842928573E-5..2.3608924259914014E-5\">2.284205842928573E-5..2.3608924259914<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"6.685553120802533E-6..6.873011588250474E-6\">6.685553120802533E-6..6.8730115882504<span class=\"structural\">...</span></span>","3.48368627561432..3.5080116159522237","0.5348433328074729..0.5474798680717454"] }, \n", + "{ name: "<span title=\"diffScore: Double\">diffScore</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">141137.384171</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">14272706.893054</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">20231.455670</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">17611.754688</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10036.079888</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">8725.845065</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">303946.425146</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">333131.502850</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">351179.373045</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">356919.148931</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">14883.785160</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">14105.703281</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">15310.898896</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">17842.598964</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">14989.445164</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000166</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000003</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.000001</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.475490</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">0.065437</span></span>"] }, \n", + "{ name: "<span title=\"diffScorePercentage: Double\">diffScorePercentage</span>", children: [], rightAlign: true, values: ["<span class=\"formatted\" title=\"\"><span class=\"numbers\">14.117754</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10.770240</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10.274884</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">8.850928</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">13.121201</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">11.300195</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">13.142818</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">14.509699</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">15.300444</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">15.551161</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10.669534</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10.113605</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">11.098719</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">13.135979</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">11.191816</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">16.315691</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">11.649592</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10.974184</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">11.973029</span></span>","<span class=\"formatted\" title=\"\"><span class=\"numbers\">10.787496</span></span>"] }, \n", + "{ name: "<span title=\"testLabel: String\">testLabel</span>", children: [], rightAlign: false, values: ["test.InheritedBenchmark.baseBenchmark","<span class=\"formatted\" title=\"test.InheritedBenchmark.inheritedBenchmark\">test.InheritedBenchmark.inheritedBenc<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.mathBenchmark\n[data=1,text=a &#34;string&#34; with quotes,value=1]\">test.ParamBenchmark.mathBenchmark\n[da<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.mathBenchmark\n[data=1,text=a &#34;string&#34; with quotes,value=2]\">test.ParamBenchmark.mathBenchmark\n[da<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.mathBenchmark\n[data=2,text=a &#34;string&#34; with quotes,value=1]\">test.ParamBenchmark.mathBenchmark\n[da<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.mathBenchmark\n[data=2,text=a &#34;string&#34; with quotes,value=2]\">test.ParamBenchmark.mathBenchmark\n[da<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.otherBenchmark\n[data=1,text=a &#34;string&#34; with quotes,value=1]\">test.ParamBenchmark.otherBenchmark\n[d<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.otherBenchmark\n[data=1,text=a &#34;string&#34; with quotes,value=2]\">test.ParamBenchmark.otherBenchmark\n[d<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.otherBenchmark\n[data=2,text=a &#34;string&#34; with quotes,value=1]\">test.ParamBenchmark.otherBenchmark\n[d<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.otherBenchmark\n[data=2,text=a &#34;string&#34; with quotes,value=2]\">test.ParamBenchmark.otherBenchmark\n[d<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.textContentCheck\n[data=1,text=a &#34;string&#34; with quotes,value=1]\">test.ParamBenchmark.textContentCheck\n<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.textContentCheck\n[data=1,text=a &#34;string&#34; with quotes,value=2]\">test.ParamBenchmark.textContentCheck\n<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.textContentCheck\n[data=2,text=a &#34;string&#34; with quotes,value=1]\">test.ParamBenchmark.textContentCheck\n<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.ParamBenchmark.textContentCheck\n[data=2,text=a &#34;string&#34; with quotes,value=2]\">test.ParamBenchmark.textContentCheck\n<span class=\"structural\">...</span></span>","<span class=\"formatted\" title=\"test.nested.CommonBenchmark.mathBenchmark\">test.nested.CommonBenchmark.mathBench<span class=\"structural\">...</span></span>","test.CommonBenchmark.longBenchmark","<span class=\"formatted\" title=\"test.CommonBenchmark.longBlackholeBenchmark\">test.CommonBenchmark.longBlackholeBen<span class=\"structural\">...</span></span>","test.CommonBenchmark.mathBenchmark","test.JvmTestBenchmark.cosBenchmark","test.JvmTestBenchmark.sqrtBenchmark"] }, \n", + "{ name: "<span title=\"barColor: String\">barColor</span>", children: [], rightAlign: false, values: ["pos","pos","pos","pos","pos","pos","pos","pos","pos","pos","pos","pos","pos","pos","pos","pos","pos","pos","pos","pos"] }, \n", + "], id: -268435452, rootId: -268435452, totalRows: 20 } ) });\n", "/*-->*/\n", "\n", - "call_DataFrame(function() { DataFrame.renderTable(-1107296252) });\n", + "call_DataFrame(function() { DataFrame.renderTable(-268435452) });\n", "\n", "\n", " </script>\n", @@ -2506,36 +2465,44 @@ " \n", " \n", " \n", - "
nameparamsmodeunitscorerangescore1range1diffScorediffScorePercentagetestLabelbarColor
test.ParamBenchmark.mathBenchmarkdata=2,text="a "string" with quotes",...thrptops/ms103082.844856102746.60675391225..103419.08295814389101173.75249399908.94648785368..102438.55849807907-1909.092363-1.851998test.ParamBenchmark.mathBenchmark\n", - "[da...neg
test.ParamBenchmark.textContentCheckdata=1,text="a "string" with quotes",...thrptops/ms155929.815236155267.27942953032..156592.35104171414150449.209123147414.465281937..153483.95296329833-5480.606113-3.514790test.ParamBenchmark.textContentCheck\n", - "...neg
test.ParamBenchmark.textContentCheckdata=1,text="a "string" with quotes",...thrptops/ms156259.919330155967.2972273164..156552.54143332926147058.565627140116.58313969668..154000.5481141382-9201.353703-5.888493test.ParamBenchmark.textContentCheck\n", - "...neg
test.ParamBenchmark.textContentCheckdata=2,text="a "string" with quotes",...thrptops/ms155811.883306154012.99823010628..157610.76838288622146125.997244143504.1570471993..148747.83743989808-9685.886063-6.216398test.ParamBenchmark.textContentCheck\n", - "...neg
test.nested.CommonBenchmark.mathBench...thrptops/ms149758.678427149465.14095246932..150052.21590221935145509.901147143242.89296995336..147776.90932420595-4248.777280-2.837083test.nested.CommonBenchmark.mathBench...neg
test.CommonBenchmark.longBenchmarkavgtms/op0.0008448.372522775198425E-4..8.5116426929504...0.0008978.737790976669418E-4..9.2064844530355...-0.000053-6.278723test.CommonBenchmark.longBenchmarkneg
test.CommonBenchmark.longBlackholeBen...avgtms/op0.0000222.1394152325114E-5..2.190102450243732...0.0000242.3161777788037864E-5..2.422199277814...-0.000002-9.443532test.CommonBenchmark.longBlackholeBen...neg
test.JvmTestBenchmark.cosBenchmarkavgtns/op3.4724853.4596934638924464..3.4852772244583043.5445403.5170213910539556..3.572058960798929-0.072055-2.075022test.JvmTestBenchmark.cosBenchmarkneg
\n", + "
nameparamsmodeunitscorerangescore1range1diffScorediffScorePercentagetestLabelbarColor
test.InheritedBenchmark.baseBenchmarkthrptops/s999715.573058974954.2809652109..1024476.86515133131140852.9572291106659.7386652725..1175046.1757937148141137.38417114.117754test.InheritedBenchmark.baseBenchmarkpos
test.InheritedBenchmark.inheritedBenc...thrptops/s132519854.0027531.2936737342079675E8..1.3567233458470...146792560.8958071.4482756334251586E8..1.4875755844909...14272706.89305410.770240test.InheritedBenchmark.inheritedBenc...pos
test.ParamBenchmark.mathBenchmarkdata=1,text=a "string" with quotes,va...thrptops/ms196902.036134191654.7423267418..202149.32994077116217133.491804215027.16316066374..219239.8204476190120231.45567010.274884test.ParamBenchmark.mathBenchmark\n", + "[da...pos
test.ParamBenchmark.mathBenchmarkdata=1,text=a "string" with quotes,va...thrptops/ms198982.020454194497.3197739599..203466.72113419612216593.775142212594.8732753121..220592.67700943317611.7546888.850928test.ParamBenchmark.mathBenchmark\n", + "[da...pos
test.ParamBenchmark.mathBenchmarkdata=2,text=a "string" with quotes,va...thrptops/ms76487.50862874595.04831374026..78379.9689426085486523.58851782315.21514352418..90731.9618897417210036.07988813.121201test.ParamBenchmark.mathBenchmark\n", + "[da...pos
test.ParamBenchmark.mathBenchmarkdata=2,text=a "string" with quotes,va...thrptops/ms77218.53689575599.16372724227..78837.9100630139385944.38196181177.07416021802..90711.689761014968725.84506511.300195test.ParamBenchmark.mathBenchmark\n", + "[da...pos
test.ParamBenchmark.otherBenchmarkdata=1,text=a "string" with quotes,va...thrptops/ms2312642.7736442091779.438724716..2533506.10856339242616589.1987902579570.7359826625..2653607.6615965427303946.42514613.142818test.ParamBenchmark.otherBenchmark\n", + "[d...pos
test.ParamBenchmark.otherBenchmarkdata=1,text=a "string" with quotes,va...thrptops/ms2295922.9388222089935.2366487498..2501910.64099451342629054.4416712524752.102688715..2733356.780654085333131.50285014.509699test.ParamBenchmark.otherBenchmark\n", + "[d...pos
test.ParamBenchmark.otherBenchmarkdata=2,text=a "string" with quotes,va...thrptops/ms2295223.3640072115768.594299648..2474678.13371464332646402.7370522616649.4130033795..2676156.0611009924351179.37304515.300444test.ParamBenchmark.otherBenchmark\n", + "[d...pos
test.ParamBenchmark.otherBenchmarkdata=2,text=a "string" with quotes,va...thrptops/ms2295128.5932112082445.0002591067..2507812.1861624582652047.7421422627344.681389795..2676750.802894536356919.14893115.551161test.ParamBenchmark.otherBenchmark\n", + "[d...pos
test.ParamBenchmark.textContentCheckdata=1,text=a "string" with quotes,va...thrptops/ms139497.981811135894.93943472698..143101.02418653402154381.766970153348.64196544446..155414.8919749425514883.78516010.669534test.ParamBenchmark.textContentCheck\n", + "...pos
test.ParamBenchmark.textContentCheckdata=1,text=a "string" with quotes,va...thrptops/ms139472.551215135249.9703875965..143695.13204299458153578.254496150716.46891485332..156440.0400775279614105.70328110.113605test.ParamBenchmark.textContentCheck\n", + "...pos
test.ParamBenchmark.textContentCheckdata=2,text=a "string" with quotes,va...thrptops/ms137951.951688133789.3696336104..142114.53374258292153262.850584150745.58896373163..155780.1122049946315310.89889611.098719test.ParamBenchmark.textContentCheck\n", + "...pos
test.ParamBenchmark.textContentCheckdata=2,text=a "string" with quotes,va...thrptops/ms135829.985631131190.7048701939..140469.26639132493153672.584595150946.56541126606..156398.6037785117517842.59896413.135979test.ParamBenchmark.textContentCheck\n", + "...pos
test.nested.CommonBenchmark.mathBench...thrptops/ms133932.193305129878.2239827778..137986.16262644873148921.638469148674.35770053475..149168.9192370649514989.44516411.191816test.nested.CommonBenchmark.mathBench...pos
test.CommonBenchmark.longBenchmarkavgtms/op0.0010209.902780506238168E-4..0.0010504284290...0.0008548.428241181867443E-4..8.6492699881309...0.00016616.315691test.CommonBenchmark.longBenchmarkpos
test.CommonBenchmark.longBlackholeBen...avgtms/op0.0000262.5596365181913836E-5..2.697949020758...0.0000232.284205842928573E-5..2.3608924259914...0.00000311.649592test.CommonBenchmark.longBlackholeBen...pos
test.CommonBenchmark.mathBenchmarkavgtms/op0.0000087.456424871291536E-6..7.7734997336766...0.0000076.685553120802533E-6..6.8730115882504...0.00000110.974184test.CommonBenchmark.mathBenchmarkpos
test.JvmTestBenchmark.cosBenchmarkavgtns/op3.9713383.8358525869703075..4.10682434140826753.4958493.48368627561432..3.50801161595222370.47549011.973029test.JvmTestBenchmark.cosBenchmarkpos
test.JvmTestBenchmark.sqrtBenchmarkavgtns/op0.6065980.5901377228601924..0.623059022507190.5411620.5348433328074729..0.54747986807174540.06543710.787496test.JvmTestBenchmark.sqrtBenchmarkpos
\n", " \n", " \n", " " ], - "application/kotlindataframe+json": "{\"$version\":\"2.2.0\",\"metadata\":{\"columns\":[\"name\",\"params\",\"mode\",\"unit\",\"score\",\"range\",\"score1\",\"range1\",\"diffScore\",\"diffScorePercentage\",\"testLabel\",\"barColor\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.ranges.ClosedFloatingPointRange\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.ranges.ClosedFloatingPointRange\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":8,\"ncol\":12,\"is_formatted\":false},\"kotlin_dataframe\":[{\"name\":\"test.ParamBenchmark.mathBenchmark\",\"params\":\"data=2,text=\\\"a \\\"string\\\" with quotes\\\",value=2\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":103082.84485602807,\"range\":\"102746.60675391225..103419.08295814389\",\"score1\":101173.75249296638,\"range1\":\"99908.94648785368..102438.55849807907\",\"diffScore\":-1909.092363061689,\"diffScorePercentage\":-1.8519981338583025,\"testLabel\":\"test.ParamBenchmark.mathBenchmark\\n[data=2,text=\\\"a \\\"string\\\" with quotes\\\",value=2]\",\"barColor\":\"neg\"},{\"name\":\"test.ParamBenchmark.textContentCheck\",\"params\":\"data=1,text=\\\"a \\\"string\\\" with quotes\\\",value=1\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":155929.81523562223,\"range\":\"155267.27942953032..156592.35104171414\",\"score1\":150449.20912261767,\"range1\":\"147414.465281937..153483.95296329833\",\"diffScore\":-5480.606113004556,\"diffScorePercentage\":-3.5147903591900813,\"testLabel\":\"test.ParamBenchmark.textContentCheck\\n[data=1,text=\\\"a \\\"string\\\" with quotes\\\",value=1]\",\"barColor\":\"neg\"},{\"name\":\"test.ParamBenchmark.textContentCheck\",\"params\":\"data=1,text=\\\"a \\\"string\\\" with quotes\\\",value=2\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":156259.91933032282,\"range\":\"155967.2972273164..156552.54143332926\",\"score1\":147058.56562691744,\"range1\":\"140116.58313969668..154000.5481141382\",\"diffScore\":-9201.353703405388,\"diffScorePercentage\":-5.888492546802327,\"testLabel\":\"test.ParamBenchmark.textContentCheck\\n[data=1,text=\\\"a \\\"string\\\" with quotes\\\",value=2]\",\"barColor\":\"neg\"},{\"name\":\"test.ParamBenchmark.textContentCheck\",\"params\":\"data=2,text=\\\"a \\\"string\\\" with quotes\\\",value=1\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":155811.88330649625,\"range\":\"154012.99823010628..157610.76838288622\",\"score1\":146125.99724354869,\"range1\":\"143504.1570471993..148747.83743989808\",\"diffScore\":-9685.886062947568,\"diffScorePercentage\":-6.216397528482819,\"testLabel\":\"test.ParamBenchmark.textContentCheck\\n[data=2,text=\\\"a \\\"string\\\" with quotes\\\",value=1]\",\"barColor\":\"neg\"},{\"name\":\"test.nested.CommonBenchmark.mathBenchmark\",\"params\":\"\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":149758.67842734433,\"range\":\"149465.14095246932..150052.21590221935\",\"score1\":145509.90114707965,\"range1\":\"143242.89296995336..147776.90932420595\",\"diffScore\":-4248.77728026468,\"diffScorePercentage\":-2.8370825149381784,\"testLabel\":\"test.nested.CommonBenchmark.mathBenchmark\",\"barColor\":\"neg\"},{\"name\":\"test.CommonBenchmark.longBenchmark\",\"params\":\"\",\"mode\":\"avgt\",\"unit\":\"ms/op\",\"score\":8.442082734074419E-4,\"range\":\"8.372522775198425E-4..8.511642692950413E-4\",\"score1\":8.972137714852465E-4,\"range1\":\"8.737790976669418E-4..9.206484453035511E-4\",\"diffScore\":-5.3005498077804544E-5,\"diffScorePercentage\":-6.278722887168673,\"testLabel\":\"test.CommonBenchmark.longBenchmark\",\"barColor\":\"neg\"},{\"name\":\"test.CommonBenchmark.longBlackholeBenchmark\",\"params\":\"\",\"mode\":\"avgt\",\"unit\":\"ms/op\",\"score\":2.1647588413775662E-5,\"range\":\"2.1394152325114E-5..2.1901024502437323E-5\",\"score1\":2.369188528309145E-5,\"range1\":\"2.3161777788037864E-5..2.4221992778145036E-5\",\"diffScore\":-2.044296869315788E-6,\"diffScorePercentage\":-9.443531677712787,\"testLabel\":\"test.CommonBenchmark.longBlackholeBenchmark\",\"barColor\":\"neg\"},{\"name\":\"test.JvmTestBenchmark.cosBenchmark\",\"params\":\"\",\"mode\":\"avgt\",\"unit\":\"ns/op\",\"score\":3.472485344175375,\"range\":\"3.4596934638924464..3.485277224458304\",\"score1\":3.5445401759264423,\"range1\":\"3.5170213910539556..3.572058960798929\",\"diffScore\":-0.0720548317510672,\"diffScorePercentage\":-2.075021911091128,\"testLabel\":\"test.JvmTestBenchmark.cosBenchmark\",\"barColor\":\"neg\"}]}" + "application/kotlindataframe+json": "{\"$version\":\"2.1.1\",\"metadata\":{\"columns\":[\"name\",\"params\",\"mode\",\"unit\",\"score\",\"range\",\"score1\",\"range1\",\"diffScore\",\"diffScorePercentage\",\"testLabel\",\"barColor\"],\"types\":[{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.ranges.ClosedFloatingPointRange\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.ranges.ClosedFloatingPointRange\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.Double\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"},{\"kind\":\"ValueColumn\",\"type\":\"kotlin.String\"}],\"nrow\":20,\"ncol\":12},\"kotlin_dataframe\":[{\"name\":\"test.InheritedBenchmark.baseBenchmark\",\"params\":\"\",\"mode\":\"thrpt\",\"unit\":\"ops/s\",\"score\":999715.5730582711,\"range\":\"974954.2809652109..1024476.8651513313\",\"score1\":1140852.9572294937,\"range1\":\"1106659.7386652725..1175046.1757937148\",\"diffScore\":141137.38417122257,\"diffScorePercentage\":14.117753886684326,\"testLabel\":\"test.InheritedBenchmark.baseBenchmark\",\"barColor\":\"pos\"},{\"name\":\"test.InheritedBenchmark.inheritedBenchmark\",\"params\":\"\",\"mode\":\"thrpt\",\"unit\":\"ops/s\",\"score\":1.3251985400275281E8,\"range\":\"1.2936737342079675E8..1.3567233458470887E8\",\"score1\":1.4679256089580712E8,\"range1\":\"1.4482756334251586E8..1.4875755844909838E8\",\"diffScore\":1.4272706893054307E7,\"diffScorePercentage\":10.770240429602211,\"testLabel\":\"test.InheritedBenchmark.inheritedBenchmark\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.mathBenchmark\",\"params\":\"data=1,text=a \\\"string\\\" with quotes,value=1\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":196902.03613375648,\"range\":\"191654.7423267418..202149.32994077116\",\"score1\":217133.49180414138,\"range1\":\"215027.16316066374..219239.82044761901\",\"diffScore\":20231.455670384894,\"diffScorePercentage\":10.274883930931813,\"testLabel\":\"test.ParamBenchmark.mathBenchmark\\n[data=1,text=a \\\"string\\\" with quotes,value=1]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.mathBenchmark\",\"params\":\"data=1,text=a \\\"string\\\" with quotes,value=2\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":198982.020454078,\"range\":\"194497.3197739599..203466.72113419612\",\"score1\":216593.77514237256,\"range1\":\"212594.8732753121..220592.677009433\",\"diffScore\":17611.754688294546,\"diffScorePercentage\":8.85092766075268,\"testLabel\":\"test.ParamBenchmark.mathBenchmark\\n[data=1,text=a \\\"string\\\" with quotes,value=2]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.mathBenchmark\",\"params\":\"data=2,text=a \\\"string\\\" with quotes,value=1\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":76487.5086281744,\"range\":\"74595.04831374026..78379.96894260854\",\"score1\":86523.58851663295,\"range1\":\"82315.21514352418..90731.96188974172\",\"diffScore\":10036.079888458553,\"diffScorePercentage\":13.121201184949738,\"testLabel\":\"test.ParamBenchmark.mathBenchmark\\n[data=2,text=a \\\"string\\\" with quotes,value=1]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.mathBenchmark\",\"params\":\"data=2,text=a \\\"string\\\" with quotes,value=2\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":77218.5368951281,\"range\":\"75599.16372724227..78837.91006301393\",\"score1\":85944.38196061649,\"range1\":\"81177.07416021802..90711.68976101496\",\"diffScore\":8725.845065488393,\"diffScorePercentage\":11.300194767143958,\"testLabel\":\"test.ParamBenchmark.mathBenchmark\\n[data=2,text=a \\\"string\\\" with quotes,value=2]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.otherBenchmark\",\"params\":\"data=1,text=a \\\"string\\\" with quotes,value=1\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":2312642.7736440543,\"range\":\"2091779.438724716..2533506.1085633924\",\"score1\":2616589.1987896026,\"range1\":\"2579570.7359826625..2653607.6615965427\",\"diffScore\":303946.4251455483,\"diffScorePercentage\":13.142817758516887,\"testLabel\":\"test.ParamBenchmark.otherBenchmark\\n[data=1,text=a \\\"string\\\" with quotes,value=1]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.otherBenchmark\",\"params\":\"data=1,text=a \\\"string\\\" with quotes,value=2\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":2295922.9388216315,\"range\":\"2089935.2366487498..2501910.6409945134\",\"score1\":2629054.4416714,\"range1\":\"2524752.102688715..2733356.780654085\",\"diffScore\":333131.5028497684,\"diffScorePercentage\":14.509698788964847,\"testLabel\":\"test.ParamBenchmark.otherBenchmark\\n[data=1,text=a \\\"string\\\" with quotes,value=2]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.otherBenchmark\",\"params\":\"data=2,text=a \\\"string\\\" with quotes,value=1\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":2295223.3640071456,\"range\":\"2115768.594299648..2474678.1337146433\",\"score1\":2646402.737052186,\"range1\":\"2616649.4130033795..2676156.0611009924\",\"diffScore\":351179.3730450403,\"diffScorePercentage\":15.300444329388892,\"testLabel\":\"test.ParamBenchmark.otherBenchmark\\n[data=2,text=a \\\"string\\\" with quotes,value=1]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.otherBenchmark\",\"params\":\"data=2,text=a \\\"string\\\" with quotes,value=2\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":2295128.5932107824,\"range\":\"2082445.0002591067..2507812.186162458\",\"score1\":2652047.7421421655,\"range1\":\"2627344.681389795..2676750.802894536\",\"diffScore\":356919.14893138316,\"diffScorePercentage\":15.551161272060545,\"testLabel\":\"test.ParamBenchmark.otherBenchmark\\n[data=2,text=a \\\"string\\\" with quotes,value=2]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.textContentCheck\",\"params\":\"data=1,text=a \\\"string\\\" with quotes,value=1\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":139497.9818106305,\"range\":\"135894.93943472698..143101.02418653402\",\"score1\":154381.7669701935,\"range1\":\"153348.64196544446..155414.89197494255\",\"diffScore\":14883.785159563005,\"diffScorePercentage\":10.669534402130527,\"testLabel\":\"test.ParamBenchmark.textContentCheck\\n[data=1,text=a \\\"string\\\" with quotes,value=1]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.textContentCheck\",\"params\":\"data=1,text=a \\\"string\\\" with quotes,value=2\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":139472.55121529553,\"range\":\"135249.9703875965..143695.13204299458\",\"score1\":153578.25449619064,\"range1\":\"150716.46891485332..156440.04007752796\",\"diffScore\":14105.703280895104,\"diffScorePercentage\":10.113605263533874,\"testLabel\":\"test.ParamBenchmark.textContentCheck\\n[data=1,text=a \\\"string\\\" with quotes,value=2]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.textContentCheck\",\"params\":\"data=2,text=a \\\"string\\\" with quotes,value=1\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":137951.95168809665,\"range\":\"133789.3696336104..142114.53374258292\",\"score1\":153262.85058436313,\"range1\":\"150745.58896373163..155780.11220499463\",\"diffScore\":15310.898896266473,\"diffScorePercentage\":11.098718582020316,\"testLabel\":\"test.ParamBenchmark.textContentCheck\\n[data=2,text=a \\\"string\\\" with quotes,value=1]\",\"barColor\":\"pos\"},{\"name\":\"test.ParamBenchmark.textContentCheck\",\"params\":\"data=2,text=a \\\"string\\\" with quotes,value=2\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":135829.98563075942,\"range\":\"131190.7048701939..140469.26639132493\",\"score1\":153672.5845948889,\"range1\":\"150946.56541126606..156398.60377851175\",\"diffScore\":17842.598964129487,\"diffScorePercentage\":13.13597942403738,\"testLabel\":\"test.ParamBenchmark.textContentCheck\\n[data=2,text=a \\\"string\\\" with quotes,value=2]\",\"barColor\":\"pos\"},{\"name\":\"test.nested.CommonBenchmark.mathBenchmark\",\"params\":\"\",\"mode\":\"thrpt\",\"unit\":\"ops/ms\",\"score\":133932.19330461326,\"range\":\"129878.2239827778..137986.16262644873\",\"score1\":148921.63846879985,\"range1\":\"148674.35770053475..149168.91923706495\",\"diffScore\":14989.445164186589,\"diffScorePercentage\":11.191816391817635,\"testLabel\":\"test.nested.CommonBenchmark.mathBenchmark\",\"barColor\":\"pos\"},{\"name\":\"test.CommonBenchmark.longBenchmark\",\"params\":\"\",\"mode\":\"avgt\",\"unit\":\"ms/op\",\"score\":0.0010203532398568873,\"range\":\"9.902780506238168E-4..0.0010504284290899577\",\"score1\":8.538755584999174E-4,\"range1\":\"8.428241181867443E-4..8.649269988130904E-4\",\"diffScore\":1.6647768135696992E-4,\"diffScorePercentage\":16.31569096407434,\"testLabel\":\"test.CommonBenchmark.longBenchmark\",\"barColor\":\"pos\"},{\"name\":\"test.CommonBenchmark.longBlackholeBenchmark\",\"params\":\"\",\"mode\":\"avgt\",\"unit\":\"ms/op\",\"score\":2.6287927694751805E-5,\"range\":\"2.5596365181913836E-5..2.6979490207589775E-5\",\"score1\":2.3225491344599873E-5,\"range1\":\"2.284205842928573E-5..2.3608924259914014E-5\",\"diffScore\":3.0624363501519328E-6,\"diffScorePercentage\":11.649592108256316,\"testLabel\":\"test.CommonBenchmark.longBlackholeBenchmark\",\"barColor\":\"pos\"},{\"name\":\"test.CommonBenchmark.mathBenchmark\",\"params\":\"\",\"mode\":\"avgt\",\"unit\":\"ms/op\",\"score\":7.614962302484078E-6,\"range\":\"7.456424871291536E-6..7.77349973367662E-6\",\"score1\":6.779282354526504E-6,\"range1\":\"6.685553120802533E-6..6.873011588250474E-6\",\"diffScore\":8.356799479575747E-7,\"diffScorePercentage\":10.974183650061766,\"testLabel\":\"test.CommonBenchmark.mathBenchmark\",\"barColor\":\"pos\"},{\"name\":\"test.JvmTestBenchmark.cosBenchmark\",\"params\":\"\",\"mode\":\"avgt\",\"unit\":\"ns/op\",\"score\":3.9713384641892873,\"range\":\"3.8358525869703075..4.1068243414082675\",\"score1\":3.4958489457832718,\"range1\":\"3.48368627561432..3.5080116159522237\",\"diffScore\":0.4754895184060155,\"diffScorePercentage\":11.973029312249324,\"testLabel\":\"test.JvmTestBenchmark.cosBenchmark\",\"barColor\":\"pos\"},{\"name\":\"test.JvmTestBenchmark.sqrtBenchmark\",\"params\":\"\",\"mode\":\"avgt\",\"unit\":\"ns/op\",\"score\":0.6065983726836912,\"range\":\"0.5901377228601924..0.62305902250719\",\"score1\":0.5411616004396091,\"range1\":\"0.5348433328074729..0.5474798680717454\",\"diffScore\":0.06543677224408206,\"diffScorePercentage\":10.787495514466844,\"testLabel\":\"test.JvmTestBenchmark.sqrtBenchmark\",\"barColor\":\"pos\"}]}" }, - "execution_count": 10, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 10 + "execution_count": 11 }, { "metadata": { - "ExecuteTime": { - "end_time": "2025-10-15T06:52:41.006960Z", - "start_time": "2025-10-15T06:52:40.830521Z" - }, "executionRelatedData": { "compiledClasses": [ - "Line_43_jupyter" + "Line_41_jupyter" ] + }, + "ExecuteTime": { + "end_time": "2025-11-12T23:01:13.586643Z", + "start_time": "2025-11-12T23:01:13.376316Z" } }, "cell_type": "code", @@ -2573,54 +2540,30 @@ { "data": { "text/html": [ - " \n", + "</html>\"> \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " -8\n", - " \n", - " \n", " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " -6\n", + " \n", + " \n", + " 0\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " -4\n", + " \n", + " \n", + " 5\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " -2\n", + " \n", + " \n", + " 10\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " 0\n", + " \n", + " \n", + " 15\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " test.CommonBenchmark.longBlackholeBenchmark\n", + " \n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.mathBenchmark [data=1,text=a "string" with quotes,value=2]\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " test.CommonBenchmark.longBenchmark\n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.textContentCheck [data=1,text=a "string" with quotes,value=2]\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " test.ParamBenchmark.textContentCheck\n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.mathBenchmark [data=1,text=a "string" with quotes,value=1]\n", " \n", - " \n", - " [data=2,text="a "string" with quotes",value=1]\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.textContentCheck [data=1,text=a "string" with quotes,value=1]\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " test.ParamBenchmark.textContentCheck\n", + " \n", + " \n", + " \n", + " test.InheritedBenchmark.inheritedBenchmark\n", " \n", - " \n", - " [data=1,text="a "string" with quotes",value=2]\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " test.JvmTestBenchmark.sqrtBenchmark\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " test.ParamBenchmark.textContentCheck\n", + " \n", + " \n", + " \n", + " test.CommonBenchmark.mathBenchmark\n", " \n", - " \n", - " [data=1,text="a "string" with quotes",value=1]\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.textContentCheck [data=2,text=a "string" with quotes,value=1]\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " test.nested.CommonBenchmark.mathBenchmark\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.mathBenchmark [data=2,text=a "string" with quotes,value=2]\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " test.CommonBenchmark.longBlackholeBenchmark\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " test.JvmTestBenchmark.cosBenchmark\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " test.ParamBenchmark.mathBenchmark\n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.mathBenchmark [data=2,text=a "string" with quotes,value=1]\n", " \n", - " \n", - " [data=2,text="a "string" with quotes",value=2]\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.textContentCheck [data=2,text=a "string" with quotes,value=2]\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.otherBenchmark [data=1,text=a "string" with quotes,value=1]\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " test.InheritedBenchmark.baseBenchmark\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.otherBenchmark [data=1,text=a "string" with quotes,value=2]\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.otherBenchmark [data=2,text=a "string" with quotes,value=1]\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " test.ParamBenchmark.otherBenchmark [data=2,text=a "string" with quotes,value=2]\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " test.CommonBenchmark.longBenchmark\n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -3048,20 +3081,23 @@ " \n", " \n", " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " Diff %\n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", "\n", - " " + " " ], "application/plot+json": { "output_type": "lets_plot_spec", @@ -3069,39 +3105,75 @@ "mapping": {}, "data": { "testLabel": [ - "test.CommonBenchmark.longBlackholeBenchmark", - "test.CommonBenchmark.longBenchmark", - "test.ParamBenchmark.textContentCheck\n[data=2,text=\"a \"string\" with quotes\",value=1]", - "test.ParamBenchmark.textContentCheck\n[data=1,text=\"a \"string\" with quotes\",value=2]", - "test.ParamBenchmark.textContentCheck\n[data=1,text=\"a \"string\" with quotes\",value=1]", + "test.ParamBenchmark.mathBenchmark\n[data=1,text=a \"string\" with quotes,value=2]", + "test.ParamBenchmark.textContentCheck\n[data=1,text=a \"string\" with quotes,value=2]", + "test.ParamBenchmark.mathBenchmark\n[data=1,text=a \"string\" with quotes,value=1]", + "test.ParamBenchmark.textContentCheck\n[data=1,text=a \"string\" with quotes,value=1]", + "test.InheritedBenchmark.inheritedBenchmark", + "test.JvmTestBenchmark.sqrtBenchmark", + "test.CommonBenchmark.mathBenchmark", + "test.ParamBenchmark.textContentCheck\n[data=2,text=a \"string\" with quotes,value=1]", "test.nested.CommonBenchmark.mathBenchmark", + "test.ParamBenchmark.mathBenchmark\n[data=2,text=a \"string\" with quotes,value=2]", + "test.CommonBenchmark.longBlackholeBenchmark", "test.JvmTestBenchmark.cosBenchmark", - "test.ParamBenchmark.mathBenchmark\n[data=2,text=\"a \"string\" with quotes\",value=2]" + "test.ParamBenchmark.mathBenchmark\n[data=2,text=a \"string\" with quotes,value=1]", + "test.ParamBenchmark.textContentCheck\n[data=2,text=a \"string\" with quotes,value=2]", + "test.ParamBenchmark.otherBenchmark\n[data=1,text=a \"string\" with quotes,value=1]", + "test.InheritedBenchmark.baseBenchmark", + "test.ParamBenchmark.otherBenchmark\n[data=1,text=a \"string\" with quotes,value=2]", + "test.ParamBenchmark.otherBenchmark\n[data=2,text=a \"string\" with quotes,value=1]", + "test.ParamBenchmark.otherBenchmark\n[data=2,text=a \"string\" with quotes,value=2]", + "test.CommonBenchmark.longBenchmark" ], "diffScorePercentage": [ - -9.443531677712787, - -6.278722887168673, - -6.216397528482819, - -5.888492546802327, - -3.5147903591900813, - -2.8370825149381784, - -2.075021911091128, - -1.8519981338583025 + 8.85092766075268, + 10.113605263533874, + 10.274883930931813, + 10.669534402130527, + 10.770240429602211, + 10.787495514466844, + 10.974183650061766, + 11.098718582020316, + 11.191816391817635, + 11.300194767143958, + 11.649592108256316, + 11.973029312249324, + 13.121201184949738, + 13.13597942403738, + 13.142817758516887, + 14.117753886684326, + 14.509698788964847, + 15.300444329388892, + 15.551161272060545, + 16.31569096407434 ], "barColor": [ - "neg", - "neg", - "neg", - "neg", - "neg", - "neg", - "neg", - "neg" + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos", + "pos" ] }, "ggsize": { "width": 800.0, - "height": 420.0 + "height": 900.0 }, "kind": "plot", "scales": [ @@ -3193,12 +3265,12 @@ "swing_enabled": true } }, - "execution_count": 11, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 11 + "execution_count": 12 } ], "metadata": { diff --git a/examples/compare-hypothesis.ipynb b/examples/compare-hypothesis.ipynb new file mode 100644 index 00000000..3ee58a84 --- /dev/null +++ b/examples/compare-hypothesis.ipynb @@ -0,0 +1,1366 @@ +{ + "cells": [ + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "# Compare Benchmarks with each other\n", + "This notebook demonstrates how you can analyze results for the two benchmark functions, one measuring performance for some baseline implementation, and another for the proposed optimized implementation.\n", + "\n", + "Such an approach could be handy when it is possible to use two alternative implementations simultaneously (which is usually the case).\n", + "\n", + "The notebook assumes that benchmark functions for baseline implementation has the \"Baseline\" suffix in their names, and optimized (or changed) alternative implementations has the \"Optimized\" suffix in their names. For example, `invSqrtBaseline` and `invSqrtOptimized`.\n", + "\n", + "While this example uses a JVM-only project, the notebook could be applied to results collected from multiplatform benchmarks as well.\n", + "\n", + "First, you need to run benchmarks. This can be done by running the following command from the root of the project:\n", + "\n", + "```shell\n", + "> ./gradlew :examples:kotlin-jvm-compare-hypothesis:benchmark\n", + "```\n", + "\n", + "Once it is completed, run this notebook, and it will automatically find the latest result." + ] + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-11-12T23:20:54.464923Z", + "start_time": "2025-11-12T23:20:49.670002Z" + } + }, + "cell_type": "code", + "source": "%use serialization, dataframe, kandy", + "outputs": [], + "execution_count": 1 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-11-12T23:20:54.900251Z", + "start_time": "2025-11-12T23:20:54.471334Z" + } + }, + "cell_type": "code", + "source": [ + "// Serialization classes matching the JMH-alike JSON format.\n", + "// We define these classes manually so we can keep `params` as a JsonObject, as it means we can handle them\n", + "// in a generic manner. If you benchmark have fixed params, using `\"\".deserializeThis()` is\n", + "// faster and easier.\n", + "\n", + "@Serializable\n", + "public data class Benchmark(\n", + " public val benchmark: String,\n", + " public val mode: String,\n", + " public val warmupIterations: Int,\n", + " public val warmupTime: String,\n", + " public val measurementIterations: Int,\n", + " public val measurementTime: String,\n", + " public val primaryMetric: PrimaryMetric,\n", + " public val secondaryMetrics: Map,\n", + " public val params: JsonObject? = null\n", + ")\n", + "\n", + "@Serializable\n", + "public data class PrimaryMetric(\n", + " public val score: Double,\n", + " public val scoreError: Double,\n", + " public val scoreConfidence: List,\n", + " public val scorePercentiles: Map,\n", + " public val scoreUnit: String,\n", + " public val rawData: List>,\n", + ")" + ], + "outputs": [], + "execution_count": 2 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-11-12T23:20:55.023965Z", + "start_time": "2025-11-12T23:20:54.947559Z" + } + }, + "cell_type": "code", + "source": [ + "// Benchmarks for a \"baseline\" implementation have a \"Baseline\" suffix in their names,\n", + "// while benchmarks for an \"opimized\" implementation have a \"Optimized\" suffix.\n", + "val baselineSuffix = \"Baseline\"\n", + "val optimizedSuffix = \"Optimized\"" + ], + "outputs": [], + "execution_count": 3 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-11-12T23:20:55.512756Z", + "start_time": "2025-11-12T23:20:55.032052Z" + } + }, + "cell_type": "code", + "source": [ + "import kotlinx.serialization.json.Json\n", + "import java.nio.file.Files\n", + "import java.nio.file.attribute.BasicFileAttributes\n", + "import kotlin.io.path.exists\n", + "import kotlin.io.path.forEachDirectoryEntry\n", + "import kotlin.io.path.isDirectory\n", + "import kotlin.io.path.listDirectoryEntries\n", + "import kotlin.io.path.readText\n", + "\n", + "// Find latest result file, based on the their timestamp.\n", + "val runsDir = notebook.workingDir.resolve(\"kotlin-jvm-compare-hypothesis/build/reports/benchmarks/main\")\n", + "val lastRunDir = runsDir.listDirectoryEntries()\n", + " .filter { it.isDirectory() }\n", + " .sortedByDescending { dir -> Files.readAttributes(dir, BasicFileAttributes::class.java).creationTime() }\n", + " .first()\n", + "val outputFile = lastRunDir.resolve(\"main.json\")\n", + "val json = Json { ignoreUnknownKeys = true }\n", + "val benchmarkData = json.decodeFromString>(outputFile.readText())" + ], + "outputs": [], + "execution_count": 4 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-11-12T23:20:55.815900Z", + "start_time": "2025-11-12T23:20:55.517639Z" + } + }, + "cell_type": "code", + "source": [ + "import kotlinx.serialization.json.*\n", + "\n", + "// Helper class for tracking the information we need to use.\n", + "data class Benchmark(val name: String, val params: String, val score: Double, val error: Double, val unit: String)\n", + "\n", + "// Split benchmark results into groups. Generally, each group consist of all tests from one test file,\n", + "// except when it is an parameterized test. In this case, each test (with all its variants) are put\n", + "// in its own group.\n", + "val benchmarkGroups = benchmarkData\n", + " .groupBy {\n", + " if (it.benchmark.endsWith(optimizedSuffix))\n", + " it.benchmark.removeSuffix(optimizedSuffix)\n", + " else\n", + " it.benchmark.removeSuffix(baselineSuffix)\n", + " }\n", + " .mapValues { group ->\n", + " val benchmarks = group.value.map { benchmark ->\n", + " // Parameters are specific to each test. `deserializeJson()` will generate the appropriate data classes,\n", + " // but for generic handling of parameters we would need to fallback to reading the JSON. In this case\n", + " // we just handle them through the typed API.\n", + " val paramInfo = benchmark.params?.entries.orEmpty()\n", + " .sortedBy { it.key }\n", + " .joinToString(\",\") { \"${it.key}=${it.value.jsonPrimitive.content}\" }\n", + " val name = benchmark.benchmark\n", + " Benchmark(\n", + " name,\n", + " paramInfo,\n", + " benchmark.primaryMetric.score,\n", + " benchmark.primaryMetric.scoreError,\n", + " benchmark.primaryMetric.scoreUnit\n", + " )\n", + " }\n", + " val baseline = benchmarks.filter { it.name.endsWith(\"Baseline\") }.toDataFrame()\n", + " val optimized = benchmarks.filter { it.name.endsWith(\"Optimized\") }.toDataFrame()\n", + " baseline.join(optimized, \"params\")\n", + " }\n", + "\n", + "// Un-commont this to see the benchmark data as DataFrames\n", + "// benchmarkGroups.forEach {\n", + "// DISPLAY(it.value)\n", + "// }" + ], + "outputs": [], + "execution_count": 5 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-11-12T23:20:56.182074Z", + "start_time": "2025-11-12T23:20:55.820371Z" + } + }, + "cell_type": "code", + "source": [ + "// Prepare the data frames for plotting by:\n", + "// - Add calculated columns for errorMin / errorMax, for both the baseline and optimized \"versions\"\n", + "// - Tests with parameters use the parameter values as the label\n", + "// - Tests without paramaters use the test name as the label\n", + "val plotData = benchmarkGroups.mapValues {\n", + " it.value\n", + " .add(\"errorMin\") { it.getValue(\"score\") - it.getValue(\"error\") }\n", + " .add(\"errorMax\") { it.getValue(\"score\") + it.getValue(\"error\") }\n", + " .add(\"errorMin1\") { it.getValue(\"score1\") - it.getValue(\"error1\") }\n", + " .add(\"errorMax1\") { it.getValue(\"score1\") + it.getValue(\"error1\") }\n", + " .add(\"diff\") { (it.getValue(\"score1\") - it.getValue(\"score\")) / it.getValue(\"score\") * 100.0 }\n", + " .insert(\"label\") {\n", + " // Re-format the benchmark labels to make them look \"nicer\"\n", + " if (!it.getValue(\"params\").isBlank()) {\n", + " it.getValue(\"params\").replace(\",\", \"\\n\")\n", + " } else {\n", + " it.getValue(\"name\").substringAfterLast(\".\").removeSuffix(baselineSuffix)\n", + " }\n", + " }.at(0)\n", + " .add(\"barColor\") {\n", + " val diff = get(\"diff\") as Double\n", + " val interval1 = (get(\"errorMin\") as Double)..(get(\"errorMax\") as Double)\n", + " val interval2 = (get(\"errorMin1\") as Double)..(get(\"errorMax1\") as Double)\n", + " val overlap = interval1.start <= interval2.endInclusive && interval2.start <= interval1.endInclusive\n", + " when {\n", + " overlap -> \"grey\"\n", + " diff > 0 -> \"green\"\n", + " else -> \"red\"\n", + " }\n", + " }\n", + " .remove(\"name\", \"params\")\n", + "}" + ], + "outputs": [], + "execution_count": 6 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-11-12T23:20:56.633229Z", + "start_time": "2025-11-12T23:20:56.186639Z" + } + }, + "cell_type": "code", + "source": [ + "import org.jetbrains.letsPlot.Geom\n", + "import org.jetbrains.letsPlot.core.spec.plotson.coord\n", + "import org.jetbrains.letsPlot.themes.margin\n", + "\n", + "// Plot each group as a bar plot with the error displayed as error bars.\n", + "// This approach assumes that each group has tests roughly within the same \"scale\".\n", + "// If this is not the case, some plots might look very squished. If this happens,\n", + "// you can play around with using a LOG10 scale or modifying the limits to focus\n", + "// on the changes.\n", + "plotData.forEach { (fileName, dataframe) ->\n", + " val plot = dataframe.plot {\n", + " bars {\n", + " x(\"label\") {\n", + " axis.name = \"\"\n", + " }\n", + " y(\"diff\")\n", + " fillColor(\"barColor\") {\n", + " scale = categorical(\"red\" to Color.RED, \"green\" to Color.GREEN, \"grey\" to Color.GREY)\n", + " legend.type = LegendType.None\n", + " }\n", + " }\n", + " coordinatesTransformation = CoordinatesTransformation.cartesianFlipped()\n", + " layout {\n", + " this.yAxisLabel = \"Diff, %\"\n", + " style {\n", + " global {\n", + " title {\n", + " margin(10.0, -10.0)\n", + " }\n", + " text {\n", + " fontFamily = FontFamily.MONO\n", + " }\n", + " }\n", + " }\n", + " // Adjust the height of the Kandy plot based on the number of tests.\n", + " size = 800 to ((50 * dataframe.size().nrow) + 100)\n", + " }\n", + " }\n", + " DISPLAY(HTML(\"

$fileName

\"))\n", + " DISPLAY(plot)\n", + "}" + ], + "outputs": [ + { + "data": { + "text/html": [ + "

test.InverseSquareRootBenchmark.invSqrt

" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -20\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -18\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -16\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -14\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -12\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -10\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -8\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -6\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -4\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " -2\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " invSqrt\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Diff, %\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " " + ], + "application/plot+json": { + "output_type": "lets_plot_spec", + "output": { + "mapping": {}, + "guides": { + "y": { + "title": "Diff, %" + } + }, + "coord": { + "name": "flip", + "flip": true + }, + "data": { + "diff": [ + -19.336985717494702 + ], + "label": [ + "invSqrt" + ], + "barColor": [ + "red" + ] + }, + "ggsize": { + "width": 800.0, + "height": 150.0 + }, + "kind": "plot", + "scales": [ + { + "aesthetic": "x", + "discrete": true, + "name": "" + }, + { + "aesthetic": "y", + "limits": [ + null, + null + ] + }, + { + "aesthetic": "fill", + "values": [ + "#ee6666", + "#3ba272", + "#a39999" + ], + "limits": [ + "red", + "green", + "grey" + ], + "guide": "none" + } + ], + "layers": [ + { + "mapping": { + "x": "label", + "y": "diff", + "fill": "barColor" + }, + "stat": "identity", + "sampling": "none", + "inherit_aes": false, + "position": "dodge", + "geom": "bar" + } + ], + "theme": { + "text": { + "family": "mono", + "blank": false + }, + "title": { + "margin": [ + 10.0, + -10.0, + 10.0, + -10.0 + ], + "blank": false + }, + "axis_ontop": false, + "axis_ontop_y": false, + "axis_ontop_x": false + }, + "data_meta": { + "series_annotations": [ + { + "type": "str", + "column": "label" + }, + { + "type": "float", + "column": "diff" + }, + { + "type": "str", + "column": "barColor" + } + ] + } + }, + "apply_color_scheme": true, + "swing_enabled": true + } + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "

test.PowerBenchmark.power

" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 200\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 400\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 600\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 800\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 1,000\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 1,200\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 1,400\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 1,600\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " power=2.71 value=-3.0\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " power=2.71 value=421431.243214\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Diff, %\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " " + ], + "application/plot+json": { + "output_type": "lets_plot_spec", + "output": { + "mapping": {}, + "guides": { + "y": { + "title": "Diff, %" + } + }, + "coord": { + "name": "flip", + "flip": true + }, + "data": { + "diff": [ + 132.5126341566779, + 1549.7214684405087 + ], + "label": [ + "power=2.71\nvalue=-3.0", + "power=2.71\nvalue=421431.243214" + ], + "barColor": [ + "green", + "green" + ] + }, + "ggsize": { + "width": 800.0, + "height": 200.0 + }, + "kind": "plot", + "scales": [ + { + "aesthetic": "x", + "discrete": true, + "name": "" + }, + { + "aesthetic": "y", + "limits": [ + null, + null + ] + }, + { + "aesthetic": "fill", + "values": [ + "#ee6666", + "#3ba272", + "#a39999" + ], + "limits": [ + "red", + "green", + "grey" + ], + "guide": "none" + } + ], + "layers": [ + { + "mapping": { + "x": "label", + "y": "diff", + "fill": "barColor" + }, + "stat": "identity", + "sampling": "none", + "inherit_aes": false, + "position": "dodge", + "geom": "bar" + } + ], + "theme": { + "text": { + "family": "mono", + "blank": false + }, + "title": { + "margin": [ + 10.0, + -10.0, + 10.0, + -10.0 + ], + "blank": false + }, + "axis_ontop": false, + "axis_ontop_y": false, + "axis_ontop_x": false + }, + "data_meta": { + "series_annotations": [ + { + "type": "str", + "column": "label" + }, + { + "type": "float", + "column": "diff" + }, + { + "type": "str", + "column": "barColor" + } + ] + } + }, + "apply_color_scheme": true, + "swing_enabled": true + } + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 7 + } + ], + "metadata": { + "kernelspec": { + "display_name": "Kotlin", + "language": "kotlin", + "name": "kotlin" + }, + "language_info": { + "name": "kotlin", + "version": "2.2.20-dev-4982", + "mimetype": "text/x-kotlin", + "file_extension": ".kt", + "pygments_lexer": "kotlin", + "codemirror_mode": "text/x-kotlin", + "nbconvert_exporter": "" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/examples/kotlin-jvm-compare-hypothesis/build.gradle.kts b/examples/kotlin-jvm-compare-hypothesis/build.gradle.kts new file mode 100644 index 00000000..1bc40a2b --- /dev/null +++ b/examples/kotlin-jvm-compare-hypothesis/build.gradle.kts @@ -0,0 +1,31 @@ +import kotlinx.benchmark.gradle.* + +plugins { + kotlin("jvm") + id("org.jetbrains.kotlinx.benchmark") +} + +sourceSets.configureEach { + java.setSrcDirs(listOf("$name/src")) + resources.setSrcDirs(listOf("$name/resources")) +} +dependencies { + implementation(project(":kotlinx-benchmark-runtime")) +} + +kotlin { + jvmToolchain(8) +} + +benchmark { + configurations { + named("main") { + iterationTime = 5 + iterationTimeUnit = "sec" + + } + } + targets { + register("main") + } +} diff --git a/examples/kotlin-jvm-compare-hypothesis/main/src/InverseSquareRootBenchmark.kt b/examples/kotlin-jvm-compare-hypothesis/main/src/InverseSquareRootBenchmark.kt new file mode 100644 index 00000000..38f28c94 --- /dev/null +++ b/examples/kotlin-jvm-compare-hypothesis/main/src/InverseSquareRootBenchmark.kt @@ -0,0 +1,56 @@ +package test + +import kotlinx.benchmark.* +import org.openjdk.jmh.annotations.Fork +import kotlin.math.pow +import kotlin.math.sqrt +import kotlin.random.Random + +@State(Scope.Benchmark) +@Fork(1) +@Warmup(iterations = 3, time = 1, timeUnit = BenchmarkTimeUnit.SECONDS) +@Measurement(iterations = 3, time = 1, timeUnit = BenchmarkTimeUnit.SECONDS) +open class InverseSquareRootBenchmark { + private var data = Random.nextFloat() + + @Benchmark + fun invSqrtBaseline(): Float { + return 1.0f / sqrt(data) + } + + @Benchmark + fun invSqrtOptimized(): Float { + return fastInvSqrt(data) + } +} + +@State(Scope.Benchmark) +@Fork(1) +@Warmup(iterations = 3, time = 1, timeUnit = BenchmarkTimeUnit.SECONDS) +@Measurement(iterations = 3, time = 1, timeUnit = BenchmarkTimeUnit.SECONDS) +open class PowerBenchmark { + @Param("2.71") + var power: Double = 0.0 + + @Param("-3.0", "421431.243214") + var value: Double = 0.0 + + @Benchmark + fun powerBaseline(): Double = value.pow(power) + + @Benchmark + fun powerOptimized(): Double = fastPower(value, power) +} + +// See https://en.wikipedia.org/wiki/Fast_inverse_square_root +private fun fastInvSqrt(x: Float): Float { + val y = Float.fromBits(0x5f3759df - (x.toBits() shr 1)) + return y * (1.5F - (x * 0.5F * y * y)) +} + +// Credits: https://martin.ankerl.com/2007/10/04/optimized-pow-approximation-for-java-and-c-c/ +private fun fastPower(a: Double, b: Double): Double { + val tmp = a.toBits() + val tmp2 = (b * (tmp - 4606921280493453312L)).toLong() + 4606921280493453312L + return Double.fromBits(tmp2) +} diff --git a/examples/simple-benchmark-analysis.ipynb b/examples/simple-benchmark-analysis.ipynb index b67bf5b4..ae3b3745 100644 --- a/examples/simple-benchmark-analysis.ipynb +++ b/examples/simple-benchmark-analysis.ipynb @@ -22,13 +22,8 @@ }, { "metadata": { - "ExecuteTime": { - "end_time": "2025-10-15T07:10:42.159154Z", - "start_time": "2025-10-15T07:10:38.291838Z" - }, "executionRelatedData": { "compiledClasses": [ - "Line_2_jupyter", "Line_3_jupyter", "Line_4_jupyter", "Line_5_jupyter", @@ -41,8 +36,13 @@ "Line_12_jupyter", "Line_13_jupyter", "Line_14_jupyter", - "Line_15_jupyter" + "Line_15_jupyter", + "Line_16_jupyter" ] + }, + "ExecuteTime": { + "end_time": "2025-11-12T22:48:39.666949Z", + "start_time": "2025-11-12T22:48:35.274977Z" } }, "cell_type": "code", @@ -52,16 +52,60 @@ }, { "metadata": { - "ExecuteTime": { - "end_time": "2025-10-15T07:10:43.097995Z", - "start_time": "2025-10-15T07:10:42.160589Z" + "executionRelatedData": { + "compiledClasses": [ + "Line_17_jupyter" + ] }, + "ExecuteTime": { + "end_time": "2025-11-12T22:48:40.134692Z", + "start_time": "2025-11-12T22:48:39.676285Z" + } + }, + "cell_type": "code", + "source": [ + "// Serialization classes matching the JMH-alike JSON format.\n", + "// We define these classes manually so we can keep `params` as a JsonObject, as it means we can handle them\n", + "// in a generic manner. If you benchmark have fixed params, using `\"\".deserializeThis()` is\n", + "// faster and easier.\n", + "\n", + "@Serializable\n", + "public data class Benchmark(\n", + " public val benchmark: String,\n", + " public val mode: String,\n", + " public val forks: Int = 1,\n", + " public val warmupIterations: Int,\n", + " public val warmupTime: String,\n", + " public val measurementIterations: Int,\n", + " public val measurementTime: String,\n", + " public val primaryMetric: PrimaryMetric,\n", + " public val secondaryMetrics: Map,\n", + " public val params: JsonObject? = null\n", + ")\n", + "\n", + "@Serializable\n", + "public data class PrimaryMetric(\n", + " public val score: Double,\n", + " public val scoreError: Double,\n", + " public val scoreConfidence: List,\n", + " public val scorePercentiles: Map,\n", + " public val scoreUnit: String,\n", + " public val rawData: List>,\n", + ")" + ], + "outputs": [], + "execution_count": 2 + }, + { + "metadata": { "executionRelatedData": { "compiledClasses": [ - "Line_16_jupyter", - "Line_17_jupyter", "Line_18_jupyter" ] + }, + "ExecuteTime": { + "end_time": "2025-11-12T22:48:40.498796Z", + "start_time": "2025-11-12T22:48:40.140479Z" } }, "cell_type": "code", @@ -81,25 +125,28 @@ " .sortedByDescending { dir -> Files.readAttributes(dir, BasicFileAttributes::class.java).creationTime() }\n", " .first()\n", "val outputFile = lastRunDir.resolve(\"jvm.json\")\n", - "val benchmarkData = outputFile.readText().deserializeJson()" + "val json = Json { ignoreUnknownKeys = true }\n", + "val benchmarkData = json.decodeFromString>(outputFile.readText())" ], "outputs": [], - "execution_count": 2 + "execution_count": 3 }, { "metadata": { - "ExecuteTime": { - "end_time": "2025-10-15T07:10:43.289848Z", - "start_time": "2025-10-15T07:10:43.099489Z" - }, "executionRelatedData": { "compiledClasses": [ "Line_19_jupyter" ] + }, + "ExecuteTime": { + "end_time": "2025-11-12T22:48:40.759773Z", + "start_time": "2025-11-12T22:48:40.509312Z" } }, "cell_type": "code", "source": [ + "import kotlinx.serialization.json.encodeToJsonElement\n", + "\n", "// Helper class for tracking the information we need to use.\n", "data class Benchmark(val name: String, val params: String, val score: Double, val error: Double, val unit: String)\n", "\n", @@ -116,10 +163,9 @@ " }\n", " .mapValues { group ->\n", " val benchmarks = group.value.map { benchmark ->\n", - " // Parameters are specific to each test. `deserializeJson()` will generate the appropriate data classes,\n", - " // but for generic handling of parameters we would need to fallback to reading the JSON. In this case\n", - " // we just handle them through the typed API.\n", - " val paramInfo = benchmark.params?.let { params -> \"data=${params.data},text=\\\"${params.text}\\\",value=${params.value}\"} ?: \"\"\n", + " val paramInfo = benchmark.params?.entries.orEmpty()\n", + " .sortedBy { it.key }\n", + " .joinToString(\",\") { \"${it.key}=${it.value.jsonPrimitive.content}\" }\n", " val name = benchmark.benchmark\n", " Benchmark(\n", " name,\n", @@ -138,18 +184,18 @@ "// }" ], "outputs": [], - "execution_count": 3 + "execution_count": 4 }, { "metadata": { - "ExecuteTime": { - "end_time": "2025-10-15T07:10:43.474182Z", - "start_time": "2025-10-15T07:10:43.290338Z" - }, "executionRelatedData": { "compiledClasses": [ "Line_20_jupyter" ] + }, + "ExecuteTime": { + "end_time": "2025-11-12T22:48:40.943415Z", + "start_time": "2025-11-12T22:48:40.765765Z" } }, "cell_type": "code", @@ -174,18 +220,18 @@ "}" ], "outputs": [], - "execution_count": 4 + "execution_count": 5 }, { "metadata": { - "ExecuteTime": { - "end_time": "2025-10-15T07:10:44.614236Z", - "start_time": "2025-10-15T07:10:43.477739Z" - }, "executionRelatedData": { "compiledClasses": [ "Line_21_jupyter" ] + }, + "ExecuteTime": { + "end_time": "2025-11-12T22:48:41.489622Z", + "start_time": "2025-11-12T22:48:40.953044Z" } }, "cell_type": "code", @@ -243,10 +289,7 @@ ] }, "metadata": {}, - "output_type": "display_data", - "jetTransient": { - "display_id": null - } + "output_type": "display_data" }, { "data": { @@ -254,41 +297,17 @@ " \n", + "</html>\"> \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " 0\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " 2e+7\n", + " \n", + " \n", + " \n", + " 20M\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " 4e+7\n", + " \n", + " \n", + " \n", + " 40M\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " 6e+7\n", + " \n", + " \n", + " \n", + " 60M\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " 8e+7\n", + " \n", + " \n", + " \n", + " 80M\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " 1e+8\n", + " \n", + " \n", + " \n", + " 100M\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " 1.2e+8\n", + " \n", + " \n", + " \n", + " 120M\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " 1.4e+8\n", + " \n", + " \n", + " \n", + " 140M\n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " base\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " inherited\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -714,9 +714,12 @@ " \n", " \n", " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " ops/s\n", " \n", @@ -724,10 +727,10 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", "\n", - " " + " " ], "application/plot+json": { "output_type": "lets_plot_spec", @@ -744,20 +747,20 @@ }, "data": { "score": [ - 1104972.6706894366, - 1.4634989745609665E8 + 999715.5730582711, + 1.3251985400275281E8 ], "errorMax": [ - 1154281.987920151, - 1.489669832012015E8 + 1024476.8651513313, + 1.3567233458470887E8 ], "label": [ "base", "inherited" ], "errorMin": [ - 1055663.3534587221, - 1.437328117109918E8 + 974954.2809652109, + 1.2936737342079675E8 ] }, "ggsize": { @@ -860,10 +863,7 @@ } }, "metadata": {}, - "output_type": "display_data", - "jetTransient": { - "display_id": null - } + "output_type": "display_data" }, { "data": { @@ -872,10 +872,7 @@ ] }, "metadata": {}, - "output_type": "display_data", - "jetTransient": { - "display_id": null - } + "output_type": "display_data" }, { "data": { @@ -883,41 +880,17 @@ " \n", + "</html>\"> \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " 0\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 50,000\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 100,000\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 150,000\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 200,000\n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " data=1\n", - " \n", - " \n", - " text="a "string" with quotes"\n", - " \n", - " \n", - " value=1\n", + " \n", + " \n", + " data=1 text=a "string" with quotes value=1\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " data=1\n", - " \n", - " \n", - " text="a "string" with quotes"\n", - " \n", - " \n", - " value=2\n", + " \n", + " \n", + " data=1 text=a "string" with quotes value=2\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " data=2\n", - " \n", - " \n", - " text="a "string" with quotes"\n", - " \n", - " \n", - " value=1\n", + " \n", + " \n", + " data=2 text=a "string" with quotes value=1\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " data=2\n", - " \n", - " \n", - " text="a "string" with quotes"\n", - " \n", - " \n", - " value=2\n", + " \n", + " \n", + " data=2 text=a "string" with quotes value=2\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -1382,9 +1312,12 @@ " \n", " \n", " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " ops/ms\n", " \n", @@ -1392,10 +1325,10 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", "\n", - " " + " " ], "application/plot+json": { "output_type": "lets_plot_spec", @@ -1412,28 +1345,28 @@ }, "data": { "score": [ - 213019.57841385395, - 214917.7241256119, - 102424.75929129767, - 101173.75249296638 + 196902.03613375648, + 198982.020454078, + 76487.5086281744, + 77218.5368951281 ], "errorMax": [ - 221389.10361238578, - 221219.12070789465, - 103736.05191104818, - 102438.55849807907 + 202149.32994077116, + 203466.72113419612, + 78379.96894260854, + 78837.91006301393 ], "label": [ - "data=1\ntext=\"a \"string\" with quotes\"\nvalue=1", - "data=1\ntext=\"a \"string\" with quotes\"\nvalue=2", - "data=2\ntext=\"a \"string\" with quotes\"\nvalue=1", - "data=2\ntext=\"a \"string\" with quotes\"\nvalue=2" + "data=1\ntext=a \"string\" with quotes\nvalue=1", + "data=1\ntext=a \"string\" with quotes\nvalue=2", + "data=2\ntext=a \"string\" with quotes\nvalue=1", + "data=2\ntext=a \"string\" with quotes\nvalue=2" ], "errorMin": [ - 204650.0532153221, - 208616.32754332913, - 101113.46667154715, - 99908.94648785368 + 191654.7423267418, + 194497.3197739599, + 74595.04831374026, + 75599.16372724227 ] }, "ggsize": { @@ -1536,10 +1469,7 @@ } }, "metadata": {}, - "output_type": "display_data", - "jetTransient": { - "display_id": null - } + "output_type": "display_data" }, { "data": { @@ -1548,10 +1478,7 @@ ] }, "metadata": {}, - "output_type": "display_data", - "jetTransient": { - "display_id": null - } + "output_type": "display_data" }, { "data": { @@ -1559,41 +1486,17 @@ " \n", + "</html>\"> \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " 0\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 500,000\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " 1e+6\n", + " \n", + " \n", + " \n", + " 1,000,000\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " 1.5e+6\n", + " \n", + " \n", + " \n", + " 1,500,000\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " 2e+6\n", + " \n", + " \n", + " \n", + " 2,000,000\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " 2.5e+6\n", + " \n", + " \n", + " \n", + " 2,500,000\n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " data=1\n", - " \n", - " \n", - " text="a "string" with quotes"\n", - " \n", - " \n", - " value=1\n", + " \n", + " \n", + " data=1 text=a "string" with quotes value=1\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " data=1\n", - " \n", - " \n", - " text="a "string" with quotes"\n", - " \n", - " \n", - " value=2\n", + " \n", + " \n", + " data=1 text=a "string" with quotes value=2\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " data=2\n", - " \n", - " \n", - " text="a "string" with quotes"\n", - " \n", - " \n", - " value=1\n", + " \n", + " \n", + " data=2 text=a "string" with quotes value=1\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " data=2\n", - " \n", - " \n", - " text="a "string" with quotes"\n", - " \n", - " \n", - " value=2\n", + " \n", + " \n", + " data=2 text=a "string" with quotes value=2\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -2067,9 +1927,12 @@ " \n", " \n", " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " ops/ms\n", " \n", @@ -2077,10 +1940,10 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", "\n", - " " + " " ], "application/plot+json": { "output_type": "lets_plot_spec", @@ -2097,28 +1960,28 @@ }, "data": { "score": [ - 2680506.786160648, - 2585022.6644677366, - 2614856.4118722673, - 2585237.244524414 + 2312642.7736440543, + 2295922.9388216315, + 2295223.3640071456, + 2295128.5932107824 ], "errorMax": [ - 2714141.3425343693, - 2715267.760476164, - 2648971.483481024, - 2618115.998457625 + 2533506.1085633924, + 2501910.6409945134, + 2474678.1337146433, + 2507812.186162458 ], "label": [ - "data=1\ntext=\"a \"string\" with quotes\"\nvalue=1", - "data=1\ntext=\"a \"string\" with quotes\"\nvalue=2", - "data=2\ntext=\"a \"string\" with quotes\"\nvalue=1", - "data=2\ntext=\"a \"string\" with quotes\"\nvalue=2" + "data=1\ntext=a \"string\" with quotes\nvalue=1", + "data=1\ntext=a \"string\" with quotes\nvalue=2", + "data=2\ntext=a \"string\" with quotes\nvalue=1", + "data=2\ntext=a \"string\" with quotes\nvalue=2" ], "errorMin": [ - 2646872.2297869264, - 2454777.568459309, - 2580741.3402635106, - 2552358.4905912033 + 2091779.438724716, + 2089935.2366487498, + 2115768.594299648, + 2082445.0002591067 ] }, "ggsize": { @@ -2221,10 +2084,7 @@ } }, "metadata": {}, - "output_type": "display_data", - "jetTransient": { - "display_id": null - } + "output_type": "display_data" }, { "data": { @@ -2233,10 +2093,7 @@ ] }, "metadata": {}, - "output_type": "display_data", - "jetTransient": { - "display_id": null - } + "output_type": "display_data" }, { "data": { @@ -2244,41 +2101,17 @@ " \n", + "</html>\"> \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " 0\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 20,000\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 40,000\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 60,000\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 80,000\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 100,000\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 120,000\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 140,000\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " 160,000\n", - " \n", - " \n", - " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " data=1\n", - " \n", - " \n", - " text="a "string" with quotes"\n", - " \n", - " \n", - " value=1\n", + " \n", + " \n", + " data=1 text=a "string" with quotes value=1\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " data=1\n", - " \n", - " \n", - " text="a "string" with quotes"\n", - " \n", - " \n", - " value=2\n", + " \n", + " \n", + " data=1 text=a "string" with quotes value=2\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " data=2\n", - " \n", - " \n", - " text="a "string" with quotes"\n", - " \n", - " \n", - " value=1\n", + " \n", + " \n", + " data=2 text=a "string" with quotes value=1\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " data=2\n", - " \n", - " \n", - " text="a "string" with quotes"\n", - " \n", - " \n", - " value=2\n", + " \n", + " \n", + " data=2 text=a "string" with quotes value=2\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -2779,9 +2560,12 @@ " \n", " \n", " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " ops/ms\n", " \n", @@ -2789,10 +2573,10 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", "\n", - " " + " " ], "application/plot+json": { "output_type": "lets_plot_spec", @@ -2809,28 +2593,28 @@ }, "data": { "score": [ - 150449.20912261767, - 147058.56562691744, - 146125.99724354869, - 150019.93211383233 + 139497.9818106305, + 139472.55121529553, + 137951.95168809665, + 135829.98563075942 ], "errorMax": [ - 153483.95296329833, - 154000.5481141382, - 148747.83743989808, - 154158.57892833705 + 143101.02418653402, + 143695.13204299458, + 142114.53374258292, + 140469.26639132493 ], "label": [ - "data=1\ntext=\"a \"string\" with quotes\"\nvalue=1", - "data=1\ntext=\"a \"string\" with quotes\"\nvalue=2", - "data=2\ntext=\"a \"string\" with quotes\"\nvalue=1", - "data=2\ntext=\"a \"string\" with quotes\"\nvalue=2" + "data=1\ntext=a \"string\" with quotes\nvalue=1", + "data=1\ntext=a \"string\" with quotes\nvalue=2", + "data=2\ntext=a \"string\" with quotes\nvalue=1", + "data=2\ntext=a \"string\" with quotes\nvalue=2" ], "errorMin": [ - 147414.465281937, - 140116.58313969668, - 143504.1570471993, - 145881.2852993276 + 135894.93943472698, + 135249.9703875965, + 133789.3696336104, + 131190.7048701939 ] }, "ggsize": { @@ -2933,10 +2717,7 @@ } }, "metadata": {}, - "output_type": "display_data", - "jetTransient": { - "display_id": null - } + "output_type": "display_data" }, { "data": { @@ -2945,10 +2726,7 @@ ] }, "metadata": {}, - "output_type": "display_data", - "jetTransient": { - "display_id": null - } + "output_type": "display_data" }, { "data": { @@ -2956,41 +2734,17 @@ " \n", + "</html>\"> \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " 0\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 20,000\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 40,000\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 60,000\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 80,000\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 100,000\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 120,000\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 140,000\n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " math\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -3395,9 +3130,12 @@ " \n", " \n", " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " ops/ms\n", " \n", @@ -3405,10 +3143,10 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", "\n", - " " + " " ], "application/plot+json": { "output_type": "lets_plot_spec", @@ -3425,16 +3163,16 @@ }, "data": { "score": [ - 145509.90114707965 + 133932.19330461326 ], "errorMax": [ - 147776.90932420595 + 137986.16262644873 ], "label": [ "math" ], "errorMin": [ - 143242.89296995336 + 129878.2239827778 ] }, "ggsize": { @@ -3537,10 +3275,7 @@ } }, "metadata": {}, - "output_type": "display_data", - "jetTransient": { - "display_id": null - } + "output_type": "display_data" }, { "data": { @@ -3549,10 +3284,7 @@ ] }, "metadata": {}, - "output_type": "display_data", - "jetTransient": { - "display_id": null - } + "output_type": "display_data" }, { "data": { @@ -3560,41 +3292,17 @@ " \n", + "</html>\"> \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", - " 0\n", + " \n", + " \n", + " 0.0000\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 0.0001\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 0.0002\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 0.0003\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 0.0004\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 0.0005\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 0.0006\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 0.0007\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 0.0008\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 0.0009\n", " \n", " \n", " \n", + " \n", + " \n", + " \n", + " 0.0010\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " 0.0011\n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " long\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " longBlackhole\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " math\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -4059,9 +3766,12 @@ " \n", " \n", " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " ms/op\n", " \n", @@ -4069,10 +3779,10 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", "\n", - " " + " " ], "application/plot+json": { "output_type": "lets_plot_spec", @@ -4089,14 +3799,14 @@ }, "data": { "score": [ - 8.972137714852465E-4, - 2.369188528309145E-5, - 6.7916806977233165E-6 + 0.0010203532398568873, + 2.6287927694751805E-5, + 7.614962302484078E-6 ], "errorMax": [ - 9.206484453035511E-4, - 2.4221992778145036E-5, - 6.8730920645926235E-6 + 0.0010504284290899577, + 2.6979490207589775E-5, + 7.77349973367662E-6 ], "label": [ "long", @@ -4104,9 +3814,9 @@ "math" ], "errorMin": [ - 8.737790976669418E-4, - 2.3161777788037864E-5, - 6.710269330854009E-6 + 9.902780506238168E-4, + 2.5596365181913836E-5, + 7.456424871291536E-6 ] }, "ggsize": { @@ -4209,10 +3919,7 @@ } }, "metadata": {}, - "output_type": "display_data", - "jetTransient": { - "display_id": null - } + "output_type": "display_data" }, { "data": { @@ -4221,10 +3928,7 @@ ] }, "metadata": {}, - "output_type": "display_data", - "jetTransient": { - "display_id": null - } + "output_type": "display_data" }, { "data": { @@ -4232,41 +3936,17 @@ " \n", + "</html>\"> \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", - " 0\n", + " \n", + " \n", + " 0.0\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 0.5\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " 1\n", + " \n", + " \n", + " \n", + " 1.0\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 1.5\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " 2\n", + " \n", + " \n", + " \n", + " 2.0\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 2.5\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " 3\n", + " \n", + " \n", + " \n", + " 3.0\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " 3.5\n", " \n", " \n", " \n", + " \n", + " \n", + " \n", + " 4.0\n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " cos\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " sqrt\n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -4692,9 +4362,12 @@ " \n", " \n", " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " ns/op\n", " \n", @@ -4702,10 +4375,10 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", "\n", - " " + " " ], "application/plot+json": { "output_type": "lets_plot_spec", @@ -4722,20 +4395,20 @@ }, "data": { "score": [ - 3.5445401759264423, - 0.5428283650466172 + 3.9713384641892873, + 0.6065983726836912 ], "errorMax": [ - 3.572058960798929, - 0.5468378157356791 + 4.1068243414082675, + 0.62305902250719 ], "label": [ "cos", "sqrt" ], "errorMin": [ - 3.5170213910539556, - 0.5388189143575554 + 3.8358525869703075, + 0.5901377228601924 ] }, "ggsize": { @@ -4838,13 +4511,10 @@ } }, "metadata": {}, - "output_type": "display_data", - "jetTransient": { - "display_id": null - } + "output_type": "display_data" } ], - "execution_count": 5 + "execution_count": 6 } ], "metadata": { diff --git a/runtime/commonMain/src/kotlinx/benchmark/BenchmarkProgress.kt b/runtime/commonMain/src/kotlinx/benchmark/BenchmarkProgress.kt index 7d543ca2..98d893b2 100644 --- a/runtime/commonMain/src/kotlinx/benchmark/BenchmarkProgress.kt +++ b/runtime/commonMain/src/kotlinx/benchmark/BenchmarkProgress.kt @@ -47,6 +47,7 @@ open class IntelliJBenchmarkProgress : BenchmarkProgress() { println(ijSuiteFinish(suite, currentClass, currentStatus)) } println(ijLogOutput(rootId, suite, "$suite summary:\n$summary\n")) + println(ijLogOutput(rootId, suite, "Analysing benchmark results is not always trivial, please refer to https://github.com/Kotlin/kotlinx-benchmark/tree/master?tab=readme-ov-file#analyzing-results for details.\n")) println(ijSuiteFinish(rootId, suite, suiteStatus)) println(ijSuiteFinish("", rootId, suiteStatus)) } diff --git a/settings.gradle.kts b/settings.gradle.kts index d2984b40..ce1be649 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -41,3 +41,4 @@ include(":examples:kotlin-multiplatform") include(":examples:java") include(":examples:kotlin-jvm-separate-benchmark-source-set") include(":examples:kotlin-jvm") +include(":examples:kotlin-jvm-compare-hypothesis")