configuration-as-code-plugin/docs/benchmarks/jmh-benchmarks.md

39 lines
1.3 KiB
Markdown

# JMH benchmarks with Configuration-as-Code
You can configure the instance that is started for benchmarks using Configuration as Code by extending
`CascJmhBenchmarkState` in your benchmarks instead of `JmhBenchmarkState` and overriding the `getResourcePath()` and
`getEnclosingClass()` methods.
`getResourcePath()` should returning the path to where your YAML configuration is located.
`getEnclosingClass()` should return the class containing the state for the benchmark (`MyBenchmark` in the example below).
## Example
Just like regular JMH benchmarks using `JmhBenchmarkState`, you need to have a `public static` inner class:
```java
@JmhBenchmark
public class MyBenchmark {
public static class MyState extends CascJmhBenchmarkState {
@Nonnull
@Override
protected String getResourcePath() {
return "config.yaml";
}
@Nonnull
@Override
protected Class<?> getEnclosingClass() {
return MyBenchmark.class;
}
}
// ...
}
```
If you override the `setup()` method of `CascJmhBenchmarkState`, make sure to call `super.setup()` so
that configuration as code works as intended.
You can find more examples in the [Role Strategy Plugin](https://github.com/jenkinsci/role-strategy-plugin/tree/master/src/test/java/jmh).