-
Notifications
You must be signed in to change notification settings - Fork 0
/
jmh.gradle
126 lines (106 loc) · 4.1 KB
/
jmh.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// Adds JMH integration to a project.
// Considering putting this file into gradle/ folder and include it with:
// apply from: rootProject.file('gradle/jmh.gradle')
sourceSets {
jmh {
compileClasspath += sourceSets.test.runtimeClasspath
runtimeClasspath += sourceSets.test.runtimeClasspath
}
}
dependencies {
jmhCompile project
jmhCompile 'org.openjdk.jmh:jmh-core:+'
jmhAnnotationProcessor 'org.openjdk.jmh:jmh-generator-annprocess:+'
}
task('jmhHelp', description: 'Print help for the jmh task') {
doLast {
println ""
println "Usage of jmh tasks:"
println ""
println "Only execute specific benchmark(s):"
println "\t./gradlew jmh -Pinclude=\".*MyBenchmark.*\""
println ""
println "Specify extra profilers:"
println "\t./gradlew jmh -Pprofilers=\"gc,stack\""
println ""
println "Prominent profilers (for full list call jmhProfilers task):"
println "\tcomp - JitCompilations, tune your iterations"
println "\tstack - which methods used most time"
println "\tgc - print garbage collection stats"
println "\ths_thr - thread usage"
println ""
println "Change report format from JSON to one of [CSV, JSON, NONE, SCSV, TEXT]:"
println "\t./gradlew jmh -Pformat=csv"
println ""
println "Specify JVM arguments:"
println "\t./gradlew jmh -PjvmArgs=\"-Dtest.cluster=local\""
println ""
println "Run in verification mode (execute benchmarks with minimum of fork/warmup-/benchmark-iterations):"
println "\tgw jmh -Pverify"
println ""
println "Resources:"
println "\thttp://tutorials.jenkov.com/java-performance/jmh.html (Introduction)"
println "\thttp://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/ (Samples)"
}
}
task jmhProfilers(type: JavaExec, description: 'Lists the available profilers for the jmh task', group: 'Development') {
classpath = sourceSets.jmh.runtimeClasspath
main = 'org.openjdk.jmh.Main'
args '-lprof'
}
task jmh(type: JavaExec, description: 'Executing JMH benchmarks') {
classpath = sourceSets.jmh.runtimeClasspath
main = 'org.openjdk.jmh.Main'
def include = project.properties.get('include', '');
def exclude = project.properties.get('exclude');
def format = project.properties.get('format', 'json');
def profilers = project.properties.get('profilers');
def jvmArgs = project.properties.get('jvmArgs')
def verify = project.properties.get('verify');
def resultFile = file("build/reports/jmh/result.${format}")
args include
if (exclude) {
args '-e', exclude
}
if (verify != null) {
// execute benchmarks with the minimum amount of execution (only to check if they are working)
println "≥≥ Running in verify mode"
args '-h'
args '-f', 1
args '-wi', 1
args '-i', 1
}
args '-foe', 'true' //fail-on-error
args '-v', 'NORMAL' //verbosity [SILENT, NORMAL, EXTRA]
if (profilers) {
profilers.split(',').each {
args '-prof', it
}
}
args '-jvmArgsPrepend', '-Xmx500M'
args '-jvmArgsPrepend', '-Xms500M'
/////////////////
// Aon Defaults
/////////////////
//args '-h' //to see all possible arguments
args '-bm', 'avgt' //measurement mode
args '-f', '3' //forks
args '-gc', 'false'
args '-i', '3' //measurement iterations
args '-wi', '3' //warmup iterations
args '-t', '3' //threads
args '-r', '5' //minimum time each measurement iteration
args '-w', '5' //minimum time each warmup iteration
args '-tu', 'us' //timeunit
if (jvmArgs) {
for (jvmArg in jvmArgs.split(' ')) {
args '-jvmArgsPrepend', jvmArg
}
}
args '-rf', format
args '-rff', resultFile
doFirst {
println "\nExecuting JMH with: $args \n"
resultFile.parentFile.mkdirs()
}
}