-
Notifications
You must be signed in to change notification settings - Fork 41
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Better support for JMH Profiler Configuration #146
Changes from 5 commits
bae25e0
454e2ad
ab8fe5b
60e1bb1
2db1cb3
452c353
f3e0b8a
dc09ae1
0964a23
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -228,6 +228,11 @@ private fun validateConfig(config: BenchmarkConfiguration) { | |
"jsUseBridge" -> require(value is Boolean) { | ||
"Invalid value for 'jsUseBridge': '$value'. Expected a Boolean value." | ||
} | ||
"jvmProfiler" -> { | ||
require(value.toString() in ValidOptions.jvmProfilers) { | ||
"Invalid value for 'jvmProfiler': '$value'. Accepted values: ${ValidOptions.jvmProfilers.joinToString(", ")}." | ||
} | ||
} | ||
else -> throw IllegalArgumentException("Invalid advanced option name: '$param'. Accepted options: \"nativeFork\", \"nativeGCAfterIteration\", \"jvmForks\", \"jsUseBridge\".") | ||
wldeh marked this conversation as resolved.
Show resolved
Hide resolved
|
||
} | ||
} | ||
|
@@ -244,6 +249,7 @@ private object ValidOptions { | |
) | ||
val modes = setOf("thrpt", "avgt", "Throughput", "AverageTime") | ||
val nativeForks = setOf("perBenchmark", "perIteration") | ||
val jvmProfilers = setOf("stack", "gc", "cl", "comp") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should we support other profilers described here? https://github.com/openjdk/jmh/blob/362d6579e007f0241f05c1305f0b269fcc2cc27a/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_35_Profilers.java#L352C97-L352C97 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Those profilers seem to require root privileges to run (at least for macOS). Such requirements can be documented in the configuration options document |
||
} | ||
|
||
internal val Gradle.isConfigurationCacheAvailable | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Could you please explain what There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I am currently unfamiliar. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The It makes sense to add a comment in the code explaining this. |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -56,6 +56,15 @@ fun main(args: Array<String>) { | |
} | ||
} | ||
|
||
val profilerName = config.advanced["jvmProfiler"] | ||
when (profilerName) { | ||
"gc" -> jmhOptions.addProfiler("gc") | ||
"stack" -> jmhOptions.addProfiler("stack") | ||
"cl" -> jmhOptions.addProfiler("cl") | ||
"comp" -> jmhOptions.addProfiler("comp") | ||
else -> throw IllegalArgumentException("Invalid value for 'jvmProfiler': $profilerName. Accepted values: gc, stack, cl, comp") | ||
wldeh marked this conversation as resolved.
Show resolved
Hide resolved
|
||
} | ||
|
||
val reportFormat = ResultFormatType.valueOf(config.reportFormat.uppercase()) | ||
val reporter = BenchmarkProgress.create(config.traceFormat) | ||
val output = JmhOutputFormat(reporter, config.name) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. When a profiler (e.g., Could you please ensure that the secondary result (if not empty) of each iteration is reported as well? |
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
One of the test above fails now. Because
jvmProfiler
was added to the "Accepted options":