blob: f7d9282c8745775e86d18606067226554b1edbfc [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ignite.internal.benchmarks.jmh.runner;
import java.util.concurrent.TimeUnit;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.options.OptionsBuilder;
/**
* JMH IDE benchmark runner configuration.
*/
public class JmhIdeBenchmarkRunner {
/** Benchmark modes. */
private Mode[] benchmarkModes = new Mode[] { Mode.Throughput };
/** Amount of forks */
private int forks = 1;
/** Warmup iterations. */
private int warmupIterations = 10;
/** Measurement operations. */
private int measurementIterations = 10;
/** Output time unit. */
private TimeUnit outputTimeUnit = TimeUnit.SECONDS;
/** Benchmarks to run. */
private Object[] benchmarks;
/** JVM arguments. */
private String[] jvmArgs;
/** Output. */
private String output;
/** Amount of threads. */
private int threads;
/** Profilers. */
private Class[] profilers;
/**
* Create new runner.
*
* @return New runner.
*/
public static JmhIdeBenchmarkRunner create() {
return new JmhIdeBenchmarkRunner();
}
/**
* Constructor.
*/
private JmhIdeBenchmarkRunner() {
// No-op.
}
/**
* @param benchmarkModes Benchmark modes.
* @return This instance.
*/
public JmhIdeBenchmarkRunner benchmarkModes(Mode... benchmarkModes) {
this.benchmarkModes = benchmarkModes;
return this;
}
/**
* @param forks Forks.
* @return This instance.
*/
public JmhIdeBenchmarkRunner forks(int forks) {
this.forks = forks;
return this;
}
/**
* @param warmupIterations Warmup iterations.
* @return This instance.
*/
public JmhIdeBenchmarkRunner warmupIterations(int warmupIterations) {
this.warmupIterations = warmupIterations;
return this;
}
/**
* @param measurementIterations Measurement iterations.
* @return This instance.
*/
public JmhIdeBenchmarkRunner measurementIterations(int measurementIterations) {
this.measurementIterations = measurementIterations;
return this;
}
/**
* @param outputTimeUnit Output time unit.
* @return This instance.
*/
public JmhIdeBenchmarkRunner outputTimeUnit(TimeUnit outputTimeUnit) {
this.outputTimeUnit = outputTimeUnit;
return this;
}
/**
* @param benchmarks Benchmarks.
* @return This instance.
*/
public JmhIdeBenchmarkRunner benchmarks(Object... benchmarks) {
this.benchmarks = benchmarks;
return this;
}
/**
* @param output Output file.
* @return This instance.
*/
public JmhIdeBenchmarkRunner output(String output) {
this.output = output;
return this;
}
/**
* @param jvmArgs JVM arguments.
* @return This instance.
*/
public JmhIdeBenchmarkRunner jvmArguments(String... jvmArgs) {
this.jvmArgs = jvmArgs;
return this;
}
/**
* @param threads Threads.
* @return This instance.
*/
public JmhIdeBenchmarkRunner threads(int threads) {
this.threads = threads;
return this;
}
/**
* @param profilers Profilers.
* @return This instance.
*/
public JmhIdeBenchmarkRunner profilers(Class... profilers) {
this.profilers = profilers;
return this;
}
/**
* Get prepared options builder.
*
* @return Options builder.
*/
public OptionsBuilder optionsBuilder() {
OptionsBuilder builder = new OptionsBuilder();
builder.forks(forks);
builder.warmupIterations(warmupIterations);
builder.measurementIterations(measurementIterations);
builder.timeUnit(outputTimeUnit);
builder.threads(threads);
if (benchmarkModes != null) {
for (Mode benchmarkMode : benchmarkModes)
builder.getBenchModes().add(benchmarkMode);
}
if (benchmarks != null) {
for (Object benchmark : benchmarks) {
if (benchmark instanceof Class)
builder.include(((Class)benchmark).getSimpleName());
else
builder.include(benchmark.toString());
}
}
if (jvmArgs != null)
builder.jvmArgs(jvmArgs);
if (output != null)
builder.output(output);
if (profilers != null) {
for (Class profiler : profilers)
builder.addProfiler(profiler);
}
return builder;
}
/**
* Run benchmarks.
*
* @throws Exception If failed.
*/
public void run() throws Exception {
new Runner(optionsBuilder().build()).run();
}
/**
* Create property.
*
* @param name Name.
* @param val Value.
* @return Result.
*/
public static String createProperty(String name, Object val) {
return "-D" + name + "=" + val;
}
}