You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by gi...@apache.org on 2026/06/02 02:50:28 UTC
(groovy) branch gh-pages updated: add Benchmark (jmh) benchmark result for e93430ef8273ad3979fce19117ec08c4c4275fea
This is an automated email from the ASF dual-hosted git repository.
github-actions[bot] pushed a commit to branch gh-pages
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/gh-pages by this push:
new 47175f9543 add Benchmark (jmh) benchmark result for e93430ef8273ad3979fce19117ec08c4c4275fea
47175f9543 is described below
commit 47175f9543d15c78e708c0dd5fcd9b4458243443
Author: github-action-benchmark <gi...@users.noreply.github.com>
AuthorDate: Tue Jun 2 02:50:23 2026 +0000
add Benchmark (jmh) benchmark result for e93430ef8273ad3979fce19117ec08c4c4275fea
---
dev/bench/jmh-adhoc/throughput/indy/data.js | 462 +++++++++++++++++++++++++
dev/bench/jmh-adhoc/throughput/indy/index.html | 281 +++++++++++++++
2 files changed, 743 insertions(+)
diff --git a/dev/bench/jmh-adhoc/throughput/indy/data.js b/dev/bench/jmh-adhoc/throughput/indy/data.js
new file mode 100644
index 0000000000..ccdcb49e83
--- /dev/null
+++ b/dev/bench/jmh-adhoc/throughput/indy/data.js
@@ -0,0 +1,462 @@
+window.BENCHMARK_DATA = {
+ "lastUpdate": 1780368623565,
+ "repoUrl": "https://github.com/apache/groovy",
+ "entries": {
+ "Benchmark": [
+ {
+ "commit": {
+ "author": {
+ "name": "Paul King",
+ "username": "paulk-asert",
+ "email": "paulk@asert.com.au"
+ },
+ "committer": {
+ "name": "Paul King",
+ "username": "paulk-asert",
+ "email": "paulk@asert.com.au"
+ },
+ "id": "e93430ef8273ad3979fce19117ec08c4c4275fea",
+ "message": "GROOVY-12034: Apply \"fat-free lambda\" patterns to Groovy (benchmark)",
+ "timestamp": "2026-05-23T06:52:34Z",
+ "url": "https://github.com/apache/groovy/commit/e93430ef8273ad3979fce19117ec08c4c4275fea"
+ },
+ "date": 1780368622840,
+ "tool": "jmh",
+ "benches": [
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countA_captureClosure ( {\"size\":\"100\"} )",
+ "value": 0.25891032573148165,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countA_captureClosure ( {\"size\":\"1000\"} )",
+ "value": 0.026011351001727873,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countA_captureClosure ( {\"size\":\"10000\"} )",
+ "value": 0.00253095886251715,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countB_rcurryClosure ( {\"size\":\"100\"} )",
+ "value": 0.13860730566775653,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countB_rcurryClosure ( {\"size\":\"1000\"} )",
+ "value": 0.013977850094711405,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countB_rcurryClosure ( {\"size\":\"10000\"} )",
+ "value": 0.0013879043362869904,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countC_biPredicateParam ( {\"size\":\"100\"} )",
+ "value": 1.5607014776120685,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countC_biPredicateParam ( {\"size\":\"1000\"} )",
+ "value": 0.15290500026590584,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countC_biPredicateParam ( {\"size\":\"10000\"} )",
+ "value": 0.015348178595372916,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countD_methodRefParam ( {\"size\":\"100\"} )",
+ "value": 1.553756208711896,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countD_methodRefParam ( {\"size\":\"1000\"} )",
+ "value": 0.15339650283216635,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countD_methodRefParam ( {\"size\":\"10000\"} )",
+ "value": 0.012821076082703733,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countE_baseline ( {\"size\":\"100\"} )",
+ "value": 1.6645599088973282,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countE_baseline ( {\"size\":\"1000\"} )",
+ "value": 0.16584098469923683,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countE_baseline ( {\"size\":\"10000\"} )",
+ "value": 0.015400401245275502,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countF_sharedRcurry ( {\"size\":\"100\"} )",
+ "value": 0.13864801316866845,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countF_sharedRcurry ( {\"size\":\"1000\"} )",
+ "value": 0.013895434644658089,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countF_sharedRcurry ( {\"size\":\"10000\"} )",
+ "value": 0.001415755030067055,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countG_lambdasCurryWith ( {\"size\":\"100\"} )",
+ "value": 1.5652576158911846,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countG_lambdasCurryWith ( {\"size\":\"1000\"} )",
+ "value": 0.15479323511314227,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countG_lambdasCurryWith ( {\"size\":\"10000\"} )",
+ "value": 0.0159862659742085,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countH_closuresCurryWith ( {\"size\":\"100\"} )",
+ "value": 2.2363300238372537,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countH_closuresCurryWith ( {\"size\":\"1000\"} )",
+ "value": 0.20215358229445193,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.countH_closuresCurryWith ( {\"size\":\"10000\"} )",
+ "value": 0.019288262603774222,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findA_captureClosure ( {\"size\":\"100\"} )",
+ "value": 0.282837206475172,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findA_captureClosure ( {\"size\":\"1000\"} )",
+ "value": 0.028524297369958436,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findA_captureClosure ( {\"size\":\"10000\"} )",
+ "value": 0.002827024981426794,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllA_captureClosure ( {\"size\":\"100\"} )",
+ "value": 0.2606058934147522,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllA_captureClosure ( {\"size\":\"1000\"} )",
+ "value": 0.025827881390782043,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllA_captureClosure ( {\"size\":\"10000\"} )",
+ "value": 0.002573533250340023,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllB_rcurryClosure ( {\"size\":\"100\"} )",
+ "value": 0.13681328136598492,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllB_rcurryClosure ( {\"size\":\"1000\"} )",
+ "value": 0.0136035697746127,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllB_rcurryClosure ( {\"size\":\"10000\"} )",
+ "value": 0.001392886679044655,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllC_biPredicateParam ( {\"size\":\"100\"} )",
+ "value": 1.6040235879020255,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllC_biPredicateParam ( {\"size\":\"1000\"} )",
+ "value": 0.15432402034604367,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllC_biPredicateParam ( {\"size\":\"10000\"} )",
+ "value": 0.01540732848156362,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllD_methodRefParam ( {\"size\":\"100\"} )",
+ "value": 1.5822869129505654,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllD_methodRefParam ( {\"size\":\"1000\"} )",
+ "value": 0.15135004135224336,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllD_methodRefParam ( {\"size\":\"10000\"} )",
+ "value": 0.01547892705326696,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllE_baseline ( {\"size\":\"100\"} )",
+ "value": 1.57035840999747,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllE_baseline ( {\"size\":\"1000\"} )",
+ "value": 0.15651150362493255,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllE_baseline ( {\"size\":\"10000\"} )",
+ "value": 0.014997111284003795,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllF_sharedRcurry ( {\"size\":\"100\"} )",
+ "value": 0.1383458756135692,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllF_sharedRcurry ( {\"size\":\"1000\"} )",
+ "value": 0.01370569099944518,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllF_sharedRcurry ( {\"size\":\"10000\"} )",
+ "value": 0.0013894161067596735,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllG_lambdasCurryWith ( {\"size\":\"100\"} )",
+ "value": 1.573927199193364,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllG_lambdasCurryWith ( {\"size\":\"1000\"} )",
+ "value": 0.14803477455620903,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllG_lambdasCurryWith ( {\"size\":\"10000\"} )",
+ "value": 0.015326678083474607,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllH_closuresCurryWith ( {\"size\":\"100\"} )",
+ "value": 1.688756650054146,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllH_closuresCurryWith ( {\"size\":\"1000\"} )",
+ "value": 0.1931644373456613,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findAllH_closuresCurryWith ( {\"size\":\"10000\"} )",
+ "value": 0.016141771890646132,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findB_rcurryClosure ( {\"size\":\"100\"} )",
+ "value": 0.13416995415962824,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findB_rcurryClosure ( {\"size\":\"1000\"} )",
+ "value": 0.013982563399079004,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findB_rcurryClosure ( {\"size\":\"10000\"} )",
+ "value": 0.0014050875125739318,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findC_biPredicateParam ( {\"size\":\"100\"} )",
+ "value": 1.4674796053528298,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findC_biPredicateParam ( {\"size\":\"1000\"} )",
+ "value": 0.14143808454561907,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findC_biPredicateParam ( {\"size\":\"10000\"} )",
+ "value": 0.015149676487677377,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findD_methodRefParam ( {\"size\":\"100\"} )",
+ "value": 1.4682304788871297,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findD_methodRefParam ( {\"size\":\"1000\"} )",
+ "value": 0.14154738138358663,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findD_methodRefParam ( {\"size\":\"10000\"} )",
+ "value": 0.015413480809664542,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findE_baseline ( {\"size\":\"100\"} )",
+ "value": 1.6471354699036116,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findE_baseline ( {\"size\":\"1000\"} )",
+ "value": 0.15555071056892014,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findE_baseline ( {\"size\":\"10000\"} )",
+ "value": 0.01529305763885,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findF_sharedRcurry ( {\"size\":\"100\"} )",
+ "value": 0.1377528434820402,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findF_sharedRcurry ( {\"size\":\"1000\"} )",
+ "value": 0.01397309039189692,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findF_sharedRcurry ( {\"size\":\"10000\"} )",
+ "value": 0.0013728948439475038,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findG_lambdasCurryWith ( {\"size\":\"100\"} )",
+ "value": 1.4868195201227732,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findG_lambdasCurryWith ( {\"size\":\"1000\"} )",
+ "value": 0.14632753935619983,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findG_lambdasCurryWith ( {\"size\":\"10000\"} )",
+ "value": 0.015070273941472164,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findH_closuresCurryWith ( {\"size\":\"100\"} )",
+ "value": 1.9836962273522634,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findH_closuresCurryWith ( {\"size\":\"1000\"} )",
+ "value": 0.18569409795553077,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ },
+ {
+ "name": "org.apache.groovy.adhoc.FatFreeLambdaBench.findH_closuresCurryWith ( {\"size\":\"10000\"} )",
+ "value": 0.017795391430507818,
+ "unit": "ops/us",
+ "extra": "iterations: 5\nforks: 2\nthreads: 1"
+ }
+ ]
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/dev/bench/jmh-adhoc/throughput/indy/index.html b/dev/bench/jmh-adhoc/throughput/indy/index.html
new file mode 100644
index 0000000000..6c887805e8
--- /dev/null
+++ b/dev/bench/jmh-adhoc/throughput/indy/index.html
@@ -0,0 +1,281 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes" />
+ <style>
+ html {
+ font-family: BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;
+ -webkit-font-smoothing: antialiased;
+ background-color: #fff;
+ font-size: 16px;
+ }
+ body {
+ color: #4a4a4a;
+ margin: 8px;
+ font-size: 1em;
+ font-weight: 400;
+ }
+ header {
+ margin-bottom: 8px;
+ display: flex;
+ flex-direction: column;
+ }
+ main {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ }
+ a {
+ color: #3273dc;
+ cursor: pointer;
+ text-decoration: none;
+ }
+ a:hover {
+ color: #000;
+ }
+ button {
+ color: #fff;
+ background-color: #3298dc;
+ border-color: transparent;
+ cursor: pointer;
+ text-align: center;
+ }
+ button:hover {
+ background-color: #2793da;
+ flex: none;
+ }
+ .spacer {
+ flex: auto;
+ }
+ .small {
+ font-size: 0.75rem;
+ }
+ footer {
+ margin-top: 16px;
+ display: flex;
+ align-items: center;
+ }
+ .header-label {
+ margin-right: 4px;
+ }
+ .benchmark-set {
+ margin: 8px 0;
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ }
+ .benchmark-title {
+ font-size: 3rem;
+ font-weight: 600;
+ word-break: break-word;
+ text-align: center;
+ }
+ .benchmark-graphs {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-around;
+ align-items: center;
+ flex-wrap: wrap;
+ width: 100%;
+ }
+ .benchmark-chart {
+ max-width: 1000px;
+ }
+ </style>
+ <title>Benchmarks</title>
+ </head>
+
+ <body>
+ <header id="header">
+ <div class="header-item">
+ <strong class="header-label">Last Update:</strong>
+ <span id="last-update"></span>
+ </div>
+ <div class="header-item">
+ <strong class="header-label">Repository:</strong>
+ <a id="repository-link" rel="noopener"></a>
+ </div>
+ </header>
+ <main id="main"></main>
+ <footer>
+ <button id="dl-button">Download data as JSON</button>
+ <div class="spacer"></div>
+ <div class="small">Powered by <a rel="noopener" href="https://github.com/marketplace/actions/continuous-benchmark">github-action-benchmark</a></div>
+ </footer>
+
+ <script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.2/dist/Chart.min.js"></script>
+ <script src="data.js"></script>
+ <script id="main-script">
+ 'use strict';
+ (function() {
+ // Colors from https://github.com/github/linguist/blob/master/lib/linguist/languages.yml
+ const toolColors = {
+ cargo: '#dea584',
+ go: '#00add8',
+ benchmarkjs: '#f1e05a',
+ benchmarkluau: '#000080',
+ pytest: '#3572a5',
+ googlecpp: '#f34b7d',
+ catch2: '#f34b7d',
+ julia: '#a270ba',
+ jmh: '#b07219',
+ benchmarkdotnet: '#178600',
+ customBiggerIsBetter: '#38ff38',
+ customSmallerIsBetter: '#ff3838',
+ _: '#333333'
+ };
+
+ function init() {
+ function collectBenchesPerTestCase(entries) {
+ const map = new Map();
+ for (const entry of entries) {
+ const {commit, date, tool, benches} = entry;
+ for (const bench of benches) {
+ const result = { commit, date, tool, bench };
+ const arr = map.get(bench.name);
+ if (arr === undefined) {
+ map.set(bench.name, [result]);
+ } else {
+ arr.push(result);
+ }
+ }
+ }
+ return map;
+ }
+
+ const data = window.BENCHMARK_DATA;
+
+ // Render header
+ document.getElementById('last-update').textContent = new Date(data.lastUpdate).toString();
+ const repoLink = document.getElementById('repository-link');
+ repoLink.href = data.repoUrl;
+ repoLink.textContent = data.repoUrl;
+
+ // Render footer
+ document.getElementById('dl-button').onclick = () => {
+ const dataUrl = 'data:,' + JSON.stringify(data, null, 2);
+ const a = document.createElement('a');
+ a.href = dataUrl;
+ a.download = 'benchmark_data.json';
+ a.click();
+ };
+
+ // Prepare data points for charts
+ return Object.keys(data.entries).map(name => ({
+ name,
+ dataSet: collectBenchesPerTestCase(data.entries[name]),
+ }));
+ }
+
+ function renderAllChars(dataSets) {
+
+ function renderGraph(parent, name, dataset) {
+ const canvas = document.createElement('canvas');
+ canvas.className = 'benchmark-chart';
+ parent.appendChild(canvas);
+
+ const color = toolColors[dataset.length > 0 ? dataset[0].tool : '_'];
+ const data = {
+ labels: dataset.map(d => d.commit.id.slice(0, 7)),
+ datasets: [
+ {
+ label: name,
+ data: dataset.map(d => d.bench.value),
+ borderColor: color,
+ backgroundColor: color + '60', // Add alpha for #rrggbbaa
+ }
+ ],
+ };
+ const options = {
+ scales: {
+ xAxes: [
+ {
+ scaleLabel: {
+ display: true,
+ labelString: 'commit',
+ },
+ }
+ ],
+ yAxes: [
+ {
+ scaleLabel: {
+ display: true,
+ labelString: dataset.length > 0 ? dataset[0].bench.unit : '',
+ },
+ ticks: {
+ beginAtZero: true,
+ }
+ }
+ ],
+ },
+ tooltips: {
+ callbacks: {
+ afterTitle: items => {
+ const {index} = items[0];
+ const data = dataset[index];
+ return '\n' + data.commit.message + '\n\n' + data.commit.timestamp + ' committed by @' + data.commit.committer.username + '\n';
+ },
+ label: item => {
+ let label = item.value;
+ const { range, unit } = dataset[item.index].bench;
+ label += ' ' + unit;
+ if (range) {
+ label += ' (' + range + ')';
+ }
+ return label;
+ },
+ afterLabel: item => {
+ const { extra } = dataset[item.index].bench;
+ return extra ? '\n' + extra : '';
+ }
+ }
+ },
+ onClick: (_mouseEvent, activeElems) => {
+ if (activeElems.length === 0) {
+ return;
+ }
+ // XXX: Undocumented. How can we know the index?
+ const index = activeElems[0]._index;
+ const url = dataset[index].commit.url;
+ window.open(url, '_blank');
+ },
+ };
+
+ new Chart(canvas, {
+ type: 'line',
+ data,
+ options,
+ });
+ }
+
+ function renderBenchSet(name, benchSet, main) {
+ const setElem = document.createElement('div');
+ setElem.className = 'benchmark-set';
+ main.appendChild(setElem);
+
+ const nameElem = document.createElement('h1');
+ nameElem.className = 'benchmark-title';
+ nameElem.textContent = name;
+ setElem.appendChild(nameElem);
+
+ const graphsElem = document.createElement('div');
+ graphsElem.className = 'benchmark-graphs';
+ setElem.appendChild(graphsElem);
+
+ for (const [benchName, benches] of benchSet.entries()) {
+ renderGraph(graphsElem, benchName, benches)
+ }
+ }
+
+ const main = document.getElementById('main');
+ for (const {name, dataSet} of dataSets) {
+ renderBenchSet(name, dataSet, main);
+ }
+ }
+
+ renderAllChars(init()); // Start
+ })();
+ </script>
+ </body>
+</html>