blob: 7b74df64ae518bdde8b465a45d48119e3af9187d [file] [log] [blame] [edit]
plugins {
id 'me.champeau.gradle.jmh' version '0.5.3'
}
apply plugin: 'idea'
description = 'Conscrypt: JMH on OpenJDK Benchmarks'
evaluationDependsOn(':conscrypt-openjdk')
ext {
preferredSourceSet = project(':conscrypt-openjdk').preferredSourceSet
preferredNativeFileDir = project(':conscrypt-openjdk').preferredNativeFileDir
genDir = "${buildDir}/jmh-generated-classes"
jmhInclude = System.getProperty('jmh.include')
jmhParams = System.getProperty('jmh.parameters')
jmhWarmupIterations = System.getProperty('jmh.wi', '10')
jmhIterations = System.getProperty('jmh.i', '10')
jmhFork = System.getProperty('jmh.f', '1')
jmhJvm = System.getProperty('jmh.jvm')
jmhJvmArgs = System.getProperty('jmh.jvmArgs', '-server -Xms2g -Xmx2g')
}
jmh {
jmhVersion = "$jmhVersion"
if (jmhInclude != null) {
setInclude(jmhInclude.toString())
}
if (jmhParams != null) {
setBenchmarkParameters(parseParams(jmhParams))
}
warmupIterations = "$jmhWarmupIterations".toInteger()
iterations = "$jmhIterations".toInteger();
fork = "$jmhFork".toInteger()
jvmArgs = jmhJvmArgs.toString()
if (jmhJvm != null) {
jvm = jmhJvm
}
duplicateClassesStrategy = 'warn'
}
configurations {
// The JMH plugin by defaults depends on all of the generators for an old version of JMH.
// Need to remove all the generators that we're not explicitly overriding to eliminate the
// dependency on the old version of JMH.
jmh.exclude module:'jmh-generator-asm'
jmhGeneratorAnnprocess
}
sourceSets {
sourceSets {
main {
resources {
// This shouldn't be needed but seems to help IntelliJ locate
// META_INF/BenchmarkList.
srcDirs += genDir
// This shouldn't be needed but seems to help IntelliJ locate the native artifact.
srcDirs += preferredNativeFileDir
}
}
}
}
dependencies {
implementation project(path: ":conscrypt-openjdk", configuration: "runtimeElements"),
project(':conscrypt-benchmark-base'),
// Add the preferred native openjdk configuration for this platform.
project(':conscrypt-openjdk').sourceSets["$preferredSourceSet"].output,
libraries.junit,
libraries.netty_handler,
libraries.netty_tcnative
jmhGeneratorAnnprocess libraries.jmh_generator_annprocess
// Override the default JMH dependencies with the new versions.
jmh libraries.jmh_core,
libraries.jmh_generator_reflection,
libraries.jmh_generator_bytecode
}
// Running benchmarks in IntelliJ seems broken without this.
// See https://github.com/melix/jmh-gradle-plugin/issues/39
// TODO(prb): Investigate and fix for Gradle 7+
//idea.module {
// scopes.PROVIDED.plus += [ configurations.compile, configurations.jmh ]
//}
// Param strings are in the form "param:VAL1,VAL2;param2:VAL3,VAL4"
static def parseParams(s) {
// It's really easy to type jmh.parameters=foo=bar instead of jmh.parameters=foo:bar,
// so check for that.
if (s.contains("=")) {
throw new IllegalArgumentException("jmh.parameters value shouldn't include '='. (Did you mean ':'?)")
}
return s.split(";").collectEntries { entry ->
def pair = entry.split(":")
[ (pair.first().trim()) : pair.last().split(",").collect { it.trim() } ]
}
}