public class BenchmarkGenerator
extends java.lang.Object
Benchmark generator is the agnostic piece of code which generates
synthetic Java code for JMH benchmarks. GeneratorSource
is
used to feed the generator with the required metadata.
Modifier and Type | Field and Description |
---|---|
private java.util.Set<BenchmarkInfo> |
benchmarkInfos |
private CompilerControlPlugin |
compilerControl |
(package private) static java.lang.String[] |
INDENTS |
private static java.lang.String |
JMH_STUB_SUFFIX |
private java.util.Set<java.lang.String> |
processedBenchmarks |
private BenchmarkGeneratorSession |
session |
Constructor and Description |
---|
BenchmarkGenerator() |
Modifier and Type | Method and Description |
---|---|
private Multimap<ClassInfo,MethodInfo> |
buildAnnotatedSet(GeneratorSource source)
Build a set of Classes which has annotated methods in them
|
void |
complete(GeneratorSource source,
GeneratorDestination destination)
Finish generating the benchmarks.
|
private java.lang.String |
emitCall(MethodInfo method,
StateObjectHandler states) |
void |
generate(GeneratorSource source,
GeneratorDestination destination)
Execute the next phase of benchmark generation.
|
private void |
generateAverageTime(ClassInfo classInfo,
java.io.PrintWriter writer,
Mode benchmarkKind,
MethodGroup methodGroup,
StateObjectHandler states) |
private void |
generateClass(GeneratorSource source,
GeneratorDestination destination,
ClassInfo classInfo,
BenchmarkInfo info)
Create and generate Java code for a class and it's methods
|
private void |
generateImport(java.io.PrintWriter writer) |
private void |
generateMethod(ClassInfo classInfo,
Mode benchmarkKind,
java.io.PrintWriter writer,
MethodGroup methodGroup,
StateObjectHandler states)
Generate the method for a specific benchmark method
|
private void |
generateSampleTime(ClassInfo classInfo,
java.io.PrintWriter writer,
Mode benchmarkKind,
MethodGroup methodGroup,
StateObjectHandler states) |
private void |
generateSingleShotTime(ClassInfo classInfo,
java.io.PrintWriter writer,
Mode benchmarkKind,
MethodGroup methodGroup,
StateObjectHandler states) |
private void |
generateThroughput(ClassInfo classInfo,
java.io.PrintWriter writer,
Mode benchmarkKind,
MethodGroup methodGroup,
StateObjectHandler states) |
private java.lang.String |
getStubArgs() |
private java.lang.String |
getStubTypeArgs() |
(package private) static java.lang.String |
ident(int tabs) |
private void |
invocationEpilog(java.io.PrintWriter writer,
int prefix,
MethodInfo method,
StateObjectHandler states,
boolean pauseMeasurement) |
private void |
invocationProlog(java.io.PrintWriter writer,
int prefix,
MethodInfo method,
StateObjectHandler states,
boolean pauseMeasurement) |
private void |
iterationEpilog(java.io.PrintWriter writer,
int prefix,
MethodInfo method,
StateObjectHandler states) |
private void |
iterationProlog(java.io.PrintWriter writer,
int prefix,
MethodInfo method,
StateObjectHandler states) |
private java.util.Collection<BenchmarkInfo> |
makeBenchmarkInfo(ClassInfo clazz,
java.util.Collection<MethodInfo> methods)
Generate BenchmarkInfo for given class.
|
private void |
methodEpilog(java.io.PrintWriter writer,
MethodGroup methodGroup) |
private void |
methodProlog(java.io.PrintWriter writer,
MethodGroup methodGroup) |
private java.lang.String |
prefix(java.lang.String argList) |
private java.util.Collection<java.lang.String> |
readBenchmarkList(GeneratorDestination destination) |
private void |
validateBenchmark(ClassInfo clazz,
java.util.Collection<MethodInfo> methods)
Do basic benchmark validation.
|
private void |
validateBenchmarkInfo(BenchmarkInfo info)
validate benchmark info
|
private void |
writeBenchmarkList(GeneratorDestination destination,
java.util.Collection<BenchmarkListEntry> entries) |
private static final java.lang.String JMH_STUB_SUFFIX
private final java.util.Set<BenchmarkInfo> benchmarkInfos
private final CompilerControlPlugin compilerControl
private final java.util.Set<java.lang.String> processedBenchmarks
private final BenchmarkGeneratorSession session
static java.lang.String[] INDENTS
public void generate(GeneratorSource source, GeneratorDestination destination)
source
- generator source to get the metadata fromdestination
- generator destination to write the results topublic void complete(GeneratorSource source, GeneratorDestination destination)
source
- source generator to usedestination
- generator destination to write the results toprivate java.util.Collection<java.lang.String> readBenchmarkList(GeneratorDestination destination)
private void writeBenchmarkList(GeneratorDestination destination, java.util.Collection<BenchmarkListEntry> entries)
private Multimap<ClassInfo,MethodInfo> buildAnnotatedSet(GeneratorSource source)
private void validateBenchmark(ClassInfo clazz, java.util.Collection<MethodInfo> methods)
private void validateBenchmarkInfo(BenchmarkInfo info)
info
- benchmark info to validateprivate java.util.Collection<BenchmarkInfo> makeBenchmarkInfo(ClassInfo clazz, java.util.Collection<MethodInfo> methods)
clazz
- holder classmethods
- annotated methodsprivate void generateClass(GeneratorSource source, GeneratorDestination destination, ClassInfo classInfo, BenchmarkInfo info) throws java.io.IOException
java.io.IOException
private void generateImport(java.io.PrintWriter writer)
private void generateMethod(ClassInfo classInfo, Mode benchmarkKind, java.io.PrintWriter writer, MethodGroup methodGroup, StateObjectHandler states)
private void generateThroughput(ClassInfo classInfo, java.io.PrintWriter writer, Mode benchmarkKind, MethodGroup methodGroup, StateObjectHandler states)
private void generateAverageTime(ClassInfo classInfo, java.io.PrintWriter writer, Mode benchmarkKind, MethodGroup methodGroup, StateObjectHandler states)
private java.lang.String getStubArgs()
private java.lang.String getStubTypeArgs()
private void methodProlog(java.io.PrintWriter writer, MethodGroup methodGroup)
private void methodEpilog(java.io.PrintWriter writer, MethodGroup methodGroup)
private java.lang.String prefix(java.lang.String argList)
private void generateSampleTime(ClassInfo classInfo, java.io.PrintWriter writer, Mode benchmarkKind, MethodGroup methodGroup, StateObjectHandler states)
private void generateSingleShotTime(ClassInfo classInfo, java.io.PrintWriter writer, Mode benchmarkKind, MethodGroup methodGroup, StateObjectHandler states)
private void invocationProlog(java.io.PrintWriter writer, int prefix, MethodInfo method, StateObjectHandler states, boolean pauseMeasurement)
private void invocationEpilog(java.io.PrintWriter writer, int prefix, MethodInfo method, StateObjectHandler states, boolean pauseMeasurement)
private void iterationProlog(java.io.PrintWriter writer, int prefix, MethodInfo method, StateObjectHandler states)
private void iterationEpilog(java.io.PrintWriter writer, int prefix, MethodInfo method, StateObjectHandler states)
private java.lang.String emitCall(MethodInfo method, StateObjectHandler states)
static java.lang.String ident(int tabs)