-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathbuild.gradle
More file actions
81 lines (67 loc) · 2.55 KB
/
build.gradle
File metadata and controls
81 lines (67 loc) · 2.55 KB
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
plugins {
id 'me.champeau.jmh' version '0.7.2'
id 'io.morethan.jmhreport' version "0.9.6"
}
apply plugin: 'io.morethan.jmhreport'
allprojects {
group = 'io.github.joeljeremy7.java.config.lib.benchmarks'
version = '1.0.0-SNAPSHOT'
repositories {
mavenLocal()
mavenCentral()
}
}
def javaProjects = subprojects.findAll { new File(it.projectDir, "src").exists() }
configure(javaProjects) {
apply plugin: 'java-library'
apply plugin: 'me.champeau.jmh'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(25)
}
}
jmh {
jmhVersion = '1.37'
// humanOutputFile = project.file("${project.buildDir}/reports/jmh/human.txt")
resultsFile = project.file("${file(layout.buildDirectory)}/reports/jmh/results.json")
resultFormat = 'JSON'
jvmArgs = [ '-Xmx2G' ]
failOnError = true
// Warmup
warmup = '5s'
warmupIterations = 3
// Benchmarks
timeOnIteration = '5s'
iterations = 5
fork = 2
// profilers = ["async:libPath=${file(rootProject.layout.projectDirectory)}/lib/async-profiler/lib/libasyncProfiler.so;output=flamegraph;dir=${file(layout.buildDirectory)}/reports/jmh/async-profiler"]
}
}
import groovy.json.*;
def mergedJmhResultsDir = "${project.rootDir}/merged-jmh-results"
tasks.register('mergeJmhResults') {
doLast {
mkdir mergedJmhResultsDir
def mergedResultsFile = new File("${mergedJmhResultsDir}/merged-jmh-results.json");
def slurper = new JsonSlurper()
def mergedResults = slurper.parseText('[]')
javaProjects.each {
def projectResultsFile = new File("${it.buildDir}/reports/jmh/results.json");
if (projectResultsFile.exists() && !projectResultsFile.text.isEmpty()) {
println "Merging JMH result file ${projectResultsFile}"
def results = slurper.parseText(projectResultsFile.text)
mergedResults += results
} else {
println "Project ${it.projectPath} has no JMH results. Skipping..."
}
}
mergedResultsFile.text = JsonOutput.prettyPrint(new JsonBuilder(mergedResults).toString())
println "Merged JMH result file can be found in ${mergedResultsFile}."
}
}
tasks.jmh.finalizedBy tasks.mergeJmhResults
jmhReport {
jmhResultPath = project.file("${mergedJmhResultsDir}/merged-jmh-results.json")
jmhReportOutput = project.file("${mergedJmhResultsDir}")
}
tasks.mergeJmhResults.finalizedBy tasks.jmhReport