1*890232f2SAndroid Build Coastguard Worker import org.jetbrains.kotlin.ir.backend.js.compile 2*890232f2SAndroid Build Coastguard Worker <lambda>null3*890232f2SAndroid Build Coastguard Workerplugins { 4*890232f2SAndroid Build Coastguard Worker kotlin("multiplatform") 5*890232f2SAndroid Build Coastguard Worker id("org.jetbrains.kotlin.plugin.allopen") version "1.4.20" 6*890232f2SAndroid Build Coastguard Worker id("org.jetbrains.kotlinx.benchmark") version "0.4.2" 7*890232f2SAndroid Build Coastguard Worker id("io.morethan.jmhreport") version "0.9.0" 8*890232f2SAndroid Build Coastguard Worker id("de.undercouch.download") 9*890232f2SAndroid Build Coastguard Worker } 10*890232f2SAndroid Build Coastguard Worker 11*890232f2SAndroid Build Coastguard Worker // allOpen plugin is needed for the benchmark annotations. 12*890232f2SAndroid Build Coastguard Worker // for more information, see https://github.com/Kotlin/kotlinx-benchmark#gradle-plugin <lambda>null13*890232f2SAndroid Build Coastguard WorkerallOpen { 14*890232f2SAndroid Build Coastguard Worker annotation("org.openjdk.jmh.annotations.State") 15*890232f2SAndroid Build Coastguard Worker } 16*890232f2SAndroid Build Coastguard Worker 17*890232f2SAndroid Build Coastguard Worker group = "com.google.flatbuffers.jmh" 18*890232f2SAndroid Build Coastguard Worker version = "2.0.0-SNAPSHOT" 19*890232f2SAndroid Build Coastguard Worker 20*890232f2SAndroid Build Coastguard Worker // This plugin generates a static html page with the aggregation 21*890232f2SAndroid Build Coastguard Worker // of all benchmarks ran. very useful visualization tool. <lambda>null22*890232f2SAndroid Build Coastguard WorkerjmhReport { 23*890232f2SAndroid Build Coastguard Worker val baseFolder = project.file("build/reports/benchmarks/main").absolutePath 24*890232f2SAndroid Build Coastguard Worker val lastFolder = project.file(baseFolder).list()?.sortedArray()?.lastOrNull() ?: "" 25*890232f2SAndroid Build Coastguard Worker jmhResultPath = "$baseFolder/$lastFolder/jvm.json" 26*890232f2SAndroid Build Coastguard Worker jmhReportOutput = "$baseFolder/$lastFolder" 27*890232f2SAndroid Build Coastguard Worker } 28*890232f2SAndroid Build Coastguard Worker 29*890232f2SAndroid Build Coastguard Worker // For now we benchmark on JVM only <lambda>null30*890232f2SAndroid Build Coastguard Workerbenchmark { 31*890232f2SAndroid Build Coastguard Worker configurations { 32*890232f2SAndroid Build Coastguard Worker this.getByName("main") { 33*890232f2SAndroid Build Coastguard Worker iterations = 5 34*890232f2SAndroid Build Coastguard Worker iterationTime = 300 35*890232f2SAndroid Build Coastguard Worker iterationTimeUnit = "ms" 36*890232f2SAndroid Build Coastguard Worker // uncomment for benchmarking JSON op only 37*890232f2SAndroid Build Coastguard Worker // include(".*JsonBenchmark.*") 38*890232f2SAndroid Build Coastguard Worker } 39*890232f2SAndroid Build Coastguard Worker } 40*890232f2SAndroid Build Coastguard Worker targets { 41*890232f2SAndroid Build Coastguard Worker register("jvm") 42*890232f2SAndroid Build Coastguard Worker } 43*890232f2SAndroid Build Coastguard Worker } 44*890232f2SAndroid Build Coastguard Worker <lambda>null45*890232f2SAndroid Build Coastguard Workerkotlin { 46*890232f2SAndroid Build Coastguard Worker jvm { 47*890232f2SAndroid Build Coastguard Worker withJava() 48*890232f2SAndroid Build Coastguard Worker } 49*890232f2SAndroid Build Coastguard Worker 50*890232f2SAndroid Build Coastguard Worker sourceSets { 51*890232f2SAndroid Build Coastguard Worker 52*890232f2SAndroid Build Coastguard Worker all { 53*890232f2SAndroid Build Coastguard Worker languageSettings.enableLanguageFeature("InlineClasses") 54*890232f2SAndroid Build Coastguard Worker } 55*890232f2SAndroid Build Coastguard Worker 56*890232f2SAndroid Build Coastguard Worker val jvmMain by getting { 57*890232f2SAndroid Build Coastguard Worker dependencies { 58*890232f2SAndroid Build Coastguard Worker implementation(kotlin("stdlib-common")) 59*890232f2SAndroid Build Coastguard Worker implementation(project(":flatbuffers-kotlin")) 60*890232f2SAndroid Build Coastguard Worker implementation(libs.kotlinx.benchmark.runtime) 61*890232f2SAndroid Build Coastguard Worker 62*890232f2SAndroid Build Coastguard Worker // json serializers 63*890232f2SAndroid Build Coastguard Worker implementation(libs.moshi.kotlin) 64*890232f2SAndroid Build Coastguard Worker implementation(libs.gson) 65*890232f2SAndroid Build Coastguard Worker } 66*890232f2SAndroid Build Coastguard Worker } 67*890232f2SAndroid Build Coastguard Worker } 68*890232f2SAndroid Build Coastguard Worker } 69*890232f2SAndroid Build Coastguard Worker 70*890232f2SAndroid Build Coastguard Worker // This task download all JSON files used for benchmarking <lambda>null71*890232f2SAndroid Build Coastguard Workertasks.register<de.undercouch.gradle.tasks.download.Download>("downloadMultipleFiles") { 72*890232f2SAndroid Build Coastguard Worker // We are downloading json benchmark samples from serdes-rs project. 73*890232f2SAndroid Build Coastguard Worker // see: https://github.com/serde-rs/json-benchmark/blob/master/data 74*890232f2SAndroid Build Coastguard Worker val baseUrl = "https://github.com/serde-rs/json-benchmark/raw/master/data/" 75*890232f2SAndroid Build Coastguard Worker src(listOf("$baseUrl/canada.json", "$baseUrl/twitter.json", "$baseUrl/citm_catalog.json")) 76*890232f2SAndroid Build Coastguard Worker dest(File("${project.projectDir.absolutePath}/src/jvmMain/resources")) 77*890232f2SAndroid Build Coastguard Worker overwrite(false) 78*890232f2SAndroid Build Coastguard Worker } 79