Package org.openjdk.jmh.generators.core
Class BenchmarkGenerator
java.lang.Object
org.openjdk.jmh.generators.core.BenchmarkGenerator
Benchmark generator.
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.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final Set
<BenchmarkInfo> private final CompilerControlPlugin
(package private) static String[]
(package private) static final Object
protected static final String
private static final String
private static final String
private final BenchmarkGeneratorSession
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate void
addAuxCounters
(PrintWriter writer, String resName, StateObjectHandler states, MethodInfo method) private Multimap
<ClassInfo, MethodInfo> buildAnnotatedSet
(GeneratorSource source) Build a set of Classes which has annotated methods in themvoid
complete
(GeneratorSource source, GeneratorDestination destination) Finish generating the benchmarks.private String
emitCall
(MethodInfo method, StateObjectHandler states) void
generate
(GeneratorSource source, GeneratorDestination destination) Execute the next phase of benchmark generation.private void
generateAverageTime
(PrintWriter writer, Mode benchmarkKind, MethodGroup methodGroup, StateObjectHandler states) private void
generateClass
(GeneratorDestination destination, ClassInfo classInfo, BenchmarkInfo info) Create and generate Java code for a class and it's methodsprivate void
generateImport
(PrintWriter writer) private void
generateMethod
(Mode benchmarkKind, PrintWriter writer, MethodGroup methodGroup, StateObjectHandler states) Generate the method for a specific benchmark methodprivate void
generateSampleTime
(PrintWriter writer, Mode benchmarkKind, MethodGroup methodGroup, StateObjectHandler states) private void
generateSingleShotTime
(PrintWriter writer, Mode benchmarkKind, MethodGroup methodGroup, StateObjectHandler states) private void
generateThroughput
(PrintWriter writer, Mode benchmarkKind, MethodGroup methodGroup, StateObjectHandler states) private String
private String
(package private) static String
ident
(int tabs) private void
invocationEpilog
(PrintWriter writer, int prefix, MethodInfo method, StateObjectHandler states, boolean pauseMeasurement) private void
invocationProlog
(PrintWriter writer, int prefix, MethodInfo method, StateObjectHandler states, boolean pauseMeasurement) private void
iterationEpilog
(PrintWriter writer, int prefix, MethodInfo method, StateObjectHandler states) private void
iterationProlog
(PrintWriter writer, int prefix, MethodInfo method, StateObjectHandler states) private Collection
<BenchmarkInfo> makeBenchmarkInfo
(ClassInfo clazz, Collection<MethodInfo> methods) Generate BenchmarkInfo for given class.private void
methodEpilog
(PrintWriter writer) private void
methodProlog
(PrintWriter writer) private String
private void
validateBenchmark
(ClassInfo clazz, Collection<MethodInfo> methods) Do basic benchmark validation.private void
validate benchmark info
-
Field Details
-
JMH_STUB_SUFFIX
- See Also:
-
JMH_TESTCLASS_SUFFIX
- See Also:
-
JMH_GENERATED_SUBPACKAGE
- See Also:
-
benchmarkInfos
-
compilerControl
-
processedBenchmarks
-
session
-
INDENTS
-
INDENTS_LOCK
-
-
Constructor Details
-
BenchmarkGenerator
public BenchmarkGenerator()
-
-
Method Details
-
generate
Execute the next phase of benchmark generation. Multiple calls to this method are acceptable, even with the difference sources- Parameters:
source
- generator source to get the metadata fromdestination
- generator destination to write the results to
-
complete
Finish generating the benchmarks. Must be called at the end of generation.- Parameters:
source
- source generator to usedestination
- generator destination to write the results to
-
buildAnnotatedSet
Build a set of Classes which has annotated methods in them- Returns:
- for all methods annotated with $annotation, returns Mapinvalid input: '<'holder-class, Set
>
-
validateBenchmark
Do basic benchmark validation. -
validateBenchmarkInfo
validate benchmark info- Parameters:
info
- benchmark info to validate
-
makeBenchmarkInfo
private Collection<BenchmarkInfo> makeBenchmarkInfo(ClassInfo clazz, Collection<MethodInfo> methods) Generate BenchmarkInfo for given class. We will figure out method groups at this point.- Parameters:
clazz
- holder classmethods
- annotated methods- Returns:
- BenchmarkInfo
-
generateClass
private void generateClass(GeneratorDestination destination, ClassInfo classInfo, BenchmarkInfo info) throws IOException Create and generate Java code for a class and it's methods- Throws:
IOException
-
generateImport
-
generateMethod
private void generateMethod(Mode benchmarkKind, PrintWriter writer, MethodGroup methodGroup, StateObjectHandler states) Generate the method for a specific benchmark method -
generateThroughput
private void generateThroughput(PrintWriter writer, Mode benchmarkKind, MethodGroup methodGroup, StateObjectHandler states) -
addAuxCounters
private void addAuxCounters(PrintWriter writer, String resName, StateObjectHandler states, MethodInfo method) -
generateAverageTime
private void generateAverageTime(PrintWriter writer, Mode benchmarkKind, MethodGroup methodGroup, StateObjectHandler states) -
getStubArgs
-
getStubTypeArgs
-
methodProlog
-
methodEpilog
-
prefix
-
generateSampleTime
private void generateSampleTime(PrintWriter writer, Mode benchmarkKind, MethodGroup methodGroup, StateObjectHandler states) -
generateSingleShotTime
private void generateSingleShotTime(PrintWriter writer, Mode benchmarkKind, MethodGroup methodGroup, StateObjectHandler states) -
invocationProlog
private void invocationProlog(PrintWriter writer, int prefix, MethodInfo method, StateObjectHandler states, boolean pauseMeasurement) -
invocationEpilog
private void invocationEpilog(PrintWriter writer, int prefix, MethodInfo method, StateObjectHandler states, boolean pauseMeasurement) -
iterationProlog
private void iterationProlog(PrintWriter writer, int prefix, MethodInfo method, StateObjectHandler states) -
iterationEpilog
private void iterationEpilog(PrintWriter writer, int prefix, MethodInfo method, StateObjectHandler states) -
emitCall
-
ident
-