xref: /aosp_15_r20/external/conscrypt/benchmark-jmh/build.gradle (revision cd0cc2e34ba52cdf454361820a14d744e4bd531d)
1*cd0cc2e3SAndroid Build Coastguard Workerplugins {
2*cd0cc2e3SAndroid Build Coastguard Worker    alias libs.plugins.jmh
3*cd0cc2e3SAndroid Build Coastguard Worker}
4*cd0cc2e3SAndroid Build Coastguard Worker
5*cd0cc2e3SAndroid Build Coastguard Workerdescription = 'Conscrypt: JMH on OpenJDK Benchmarks'
6*cd0cc2e3SAndroid Build Coastguard Worker
7*cd0cc2e3SAndroid Build Coastguard WorkerevaluationDependsOn(':conscrypt-openjdk')
8*cd0cc2e3SAndroid Build Coastguard Worker
9*cd0cc2e3SAndroid Build Coastguard Workerext {
10*cd0cc2e3SAndroid Build Coastguard Worker    preferredSourceSet = project(':conscrypt-openjdk').preferredSourceSet
11*cd0cc2e3SAndroid Build Coastguard Worker    preferredNativeFileDir = project(':conscrypt-openjdk').preferredNativeFileDir
12*cd0cc2e3SAndroid Build Coastguard Worker
13*cd0cc2e3SAndroid Build Coastguard Worker    genDir = "${buildDir}/jmh-generated-classes"
14*cd0cc2e3SAndroid Build Coastguard Worker    jmhInclude = System.getProperty('jmh.include')
15*cd0cc2e3SAndroid Build Coastguard Worker    jmhParams = System.getProperty('jmh.parameters')
16*cd0cc2e3SAndroid Build Coastguard Worker    jmhWarmupIterations = System.getProperty('jmh.wi', '10')
17*cd0cc2e3SAndroid Build Coastguard Worker    jmhIterations = System.getProperty('jmh.i', '10')
18*cd0cc2e3SAndroid Build Coastguard Worker    jmhFork = System.getProperty('jmh.f', '1')
19*cd0cc2e3SAndroid Build Coastguard Worker    jmhJvm = System.getProperty('jmh.jvm')
20*cd0cc2e3SAndroid Build Coastguard Worker    jmhJvmArgs = System.getProperty('jmh.jvmArgs', '-server -Xms2g -Xmx2g')
21*cd0cc2e3SAndroid Build Coastguard Worker}
22*cd0cc2e3SAndroid Build Coastguard Worker
23*cd0cc2e3SAndroid Build Coastguard Workerjmh {
24*cd0cc2e3SAndroid Build Coastguard Worker    jmhVersion = "$jmhVersion"
25*cd0cc2e3SAndroid Build Coastguard Worker    if (jmhInclude != null) {
26*cd0cc2e3SAndroid Build Coastguard Worker        setInclude(jmhInclude.toString())
27*cd0cc2e3SAndroid Build Coastguard Worker    }
28*cd0cc2e3SAndroid Build Coastguard Worker    if (jmhParams != null) {
29*cd0cc2e3SAndroid Build Coastguard Worker        setBenchmarkParameters(parseParams(jmhParams))
30*cd0cc2e3SAndroid Build Coastguard Worker    }
31*cd0cc2e3SAndroid Build Coastguard Worker    warmupIterations = "$jmhWarmupIterations".toInteger()
32*cd0cc2e3SAndroid Build Coastguard Worker    iterations = "$jmhIterations".toInteger()
33*cd0cc2e3SAndroid Build Coastguard Worker    fork = "$jmhFork".toInteger()
34*cd0cc2e3SAndroid Build Coastguard Worker    // jvmArgs = jmhJvmArgs
35*cd0cc2e3SAndroid Build Coastguard Worker    if (jmhJvm != null) {
36*cd0cc2e3SAndroid Build Coastguard Worker        jvm = jmhJvm
37*cd0cc2e3SAndroid Build Coastguard Worker    }
38*cd0cc2e3SAndroid Build Coastguard Worker    duplicateClassesStrategy = DuplicatesStrategy.WARN
39*cd0cc2e3SAndroid Build Coastguard Worker}
40*cd0cc2e3SAndroid Build Coastguard Worker
41*cd0cc2e3SAndroid Build Coastguard Workerconfigurations {
42*cd0cc2e3SAndroid Build Coastguard Worker    // The JMH plugin by defaults depends on all of the generators for an old version of JMH.
43*cd0cc2e3SAndroid Build Coastguard Worker    // Need to remove all the generators that we're not explicitly overriding to eliminate the
44*cd0cc2e3SAndroid Build Coastguard Worker    // dependency on the old version of JMH.
45*cd0cc2e3SAndroid Build Coastguard Worker    jmh.exclude module:'jmh-generator-asm'
46*cd0cc2e3SAndroid Build Coastguard Worker
47*cd0cc2e3SAndroid Build Coastguard Worker    jmhGeneratorAnnprocess
48*cd0cc2e3SAndroid Build Coastguard Worker}
49*cd0cc2e3SAndroid Build Coastguard Worker
50*cd0cc2e3SAndroid Build Coastguard WorkersourceSets {
51*cd0cc2e3SAndroid Build Coastguard Worker    sourceSets {
52*cd0cc2e3SAndroid Build Coastguard Worker        main {
53*cd0cc2e3SAndroid Build Coastguard Worker            resources {
54*cd0cc2e3SAndroid Build Coastguard Worker                // This shouldn't be needed but seems to help IntelliJ locate
55*cd0cc2e3SAndroid Build Coastguard Worker                // META_INF/BenchmarkList.
56*cd0cc2e3SAndroid Build Coastguard Worker                srcDirs += genDir
57*cd0cc2e3SAndroid Build Coastguard Worker
58*cd0cc2e3SAndroid Build Coastguard Worker                // This shouldn't be needed but seems to help IntelliJ locate the native artifact.
59*cd0cc2e3SAndroid Build Coastguard Worker                srcDirs += preferredNativeFileDir
60*cd0cc2e3SAndroid Build Coastguard Worker            }
61*cd0cc2e3SAndroid Build Coastguard Worker        }
62*cd0cc2e3SAndroid Build Coastguard Worker    }
63*cd0cc2e3SAndroid Build Coastguard Worker}
64*cd0cc2e3SAndroid Build Coastguard Worker
65*cd0cc2e3SAndroid Build Coastguard Workerdependencies {
66*cd0cc2e3SAndroid Build Coastguard Worker    implementation project(":conscrypt-openjdk"),
67*cd0cc2e3SAndroid Build Coastguard Worker            project(path: ":conscrypt-testing", configuration: "runtimeElements"),
68*cd0cc2e3SAndroid Build Coastguard Worker            project(':conscrypt-benchmark-base'),
69*cd0cc2e3SAndroid Build Coastguard Worker            // Add the preferred native openjdk configuration for this platform.
70*cd0cc2e3SAndroid Build Coastguard Worker            //project(':conscrypt-openjdk').sourceSets["$preferredSourceSet"].output,
71*cd0cc2e3SAndroid Build Coastguard Worker            libs.junit,
72*cd0cc2e3SAndroid Build Coastguard Worker            libs.netty.handler,
73*cd0cc2e3SAndroid Build Coastguard Worker            libs.netty.tcnative
74*cd0cc2e3SAndroid Build Coastguard Worker
75*cd0cc2e3SAndroid Build Coastguard Worker    jmhGeneratorAnnprocess libs.jmh.generator.annprocess
76*cd0cc2e3SAndroid Build Coastguard Worker
77*cd0cc2e3SAndroid Build Coastguard Worker    // Override the default JMH dependencies with the new versions.
78*cd0cc2e3SAndroid Build Coastguard Worker    jmh libs.jmh.core,
79*cd0cc2e3SAndroid Build Coastguard Worker            libs.jmh.generator.reflection,
80*cd0cc2e3SAndroid Build Coastguard Worker            libs.jmh.generator.bytecode
81*cd0cc2e3SAndroid Build Coastguard Worker}
82*cd0cc2e3SAndroid Build Coastguard Worker
83*cd0cc2e3SAndroid Build Coastguard Worker// Running benchmarks in IntelliJ seems broken without this.
84*cd0cc2e3SAndroid Build Coastguard Worker// See https://github.com/melix/jmh-gradle-plugin/issues/39
85*cd0cc2e3SAndroid Build Coastguard Worker// TODO(prb): Investigate and fix for Gradle 7+
86*cd0cc2e3SAndroid Build Coastguard Worker//idea.module {
87*cd0cc2e3SAndroid Build Coastguard Worker//    scopes.PROVIDED.plus += [ configurations.compile, configurations.jmh ]
88*cd0cc2e3SAndroid Build Coastguard Worker//}
89*cd0cc2e3SAndroid Build Coastguard Worker
90*cd0cc2e3SAndroid Build Coastguard Worker// Param strings are in the form "param:VAL1,VAL2;param2:VAL3,VAL4"
91*cd0cc2e3SAndroid Build Coastguard Workerstatic def parseParams(s) {
92*cd0cc2e3SAndroid Build Coastguard Worker    // It's really easy to type jmh.parameters=foo=bar instead of jmh.parameters=foo:bar,
93*cd0cc2e3SAndroid Build Coastguard Worker    // so check for that.
94*cd0cc2e3SAndroid Build Coastguard Worker    if (s.contains("=")) {
95*cd0cc2e3SAndroid Build Coastguard Worker        throw new IllegalArgumentException("jmh.parameters value shouldn't include '='.  (Did you mean ':'?)")
96*cd0cc2e3SAndroid Build Coastguard Worker    }
97*cd0cc2e3SAndroid Build Coastguard Worker    return s.split(";").collectEntries { entry ->
98*cd0cc2e3SAndroid Build Coastguard Worker        def pair = entry.split(":")
99*cd0cc2e3SAndroid Build Coastguard Worker        [ (pair.first().trim()) : pair.last().split(",").collect { it.trim() } ]
100*cd0cc2e3SAndroid Build Coastguard Worker    }
101*cd0cc2e3SAndroid Build Coastguard Worker}
102