xref: /aosp_15_r20/external/flatbuffers/kotlin/benchmark/build.gradle.kts (revision 890232f25432b36107d06881e0a25aaa6b473652)
1*890232f2SAndroid Build Coastguard Worker import org.jetbrains.kotlin.ir.backend.js.compile
2*890232f2SAndroid Build Coastguard Worker 
<lambda>null3*890232f2SAndroid Build Coastguard Worker plugins {
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 Worker allOpen {
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 Worker jmhReport {
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 Worker benchmark {
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 Worker kotlin {
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 Worker tasks.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