Skip to content

Commit ccf3b6f

Browse files
committed
Research android target support
1 parent b24d56c commit ccf3b6f

File tree

5 files changed

+53
-6
lines changed

5 files changed

+53
-6
lines changed

examples/kotlin-multiplatform/build.gradle

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@ kotlin {
5252
linuxX64()
5353
mingwX64()
5454

55-
androidTarget {
56-
}
55+
androidTarget {}
5756

5857
applyDefaultHierarchyTemplate()
5958

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package test
2+
3+
import kotlinx.benchmark.*
4+
import kotlin.math.*
5+
6+
@State(Scope.Benchmark)
7+
class AndroidTestBenchmark {
8+
private var data = 0.0
9+
10+
@Setup
11+
fun setUp() {
12+
data = 3.0
13+
}
14+
15+
@Benchmark
16+
fun sqrtBenchmark(): Double {
17+
return sqrt(data)
18+
}
19+
20+
@Benchmark
21+
fun cosBenchmark(): Double {
22+
return cos(data)
23+
}
24+
}
25+
26+

plugin/main/src/kotlinx/benchmark/gradle/BenchmarkConfiguration.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package kotlinx.benchmark.gradle
22

33
import kotlinx.benchmark.gradle.internal.KotlinxBenchmarkPluginInternalApi
44
import org.gradle.api.tasks.*
5+
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
56
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmCompilation
67
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCompilation
78
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
@@ -126,3 +127,11 @@ constructor(
126127
) : BenchmarkTarget(extension, name) {
127128
var buildType: NativeBuildType = NativeBuildType.RELEASE
128129
}
130+
131+
class AndroidBenchmarkTarget
132+
@KotlinxBenchmarkPluginInternalApi
133+
constructor(
134+
extension: BenchmarksExtension,
135+
name: String,
136+
val target: KotlinAndroidTarget
137+
) : BenchmarkTarget(extension, name)

plugin/main/src/kotlinx/benchmark/gradle/BenchmarksExtension.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@ import org.gradle.api.provider.*
88
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
99
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
1010
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
11-
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
12-
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmCompilation
13-
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCompilation
11+
import org.jetbrains.kotlin.gradle.plugin.mpp.*
1412
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation
1513

1614
fun Project.benchmark(configure: Action<BenchmarksExtension>) {
@@ -63,10 +61,17 @@ constructor(
6361
when {
6462
multiplatform != null -> {
6563
val target = multiplatform.targets.findByName(name)
64+
println("target: $target")
65+
if (target is KotlinAndroidTarget) {
66+
return@container AndroidBenchmarkTarget(this, name, target)
67+
}
68+
target?.compilations?.findByName(KotlinCompilation.MAIN_COMPILATION_NAME)
69+
.let { println("compilation: $it") }
6670
// We allow the name to be either a target or a source set
6771
when (val compilation = target?.compilations?.findByName(KotlinCompilation.MAIN_COMPILATION_NAME)
6872
?: multiplatform.targets.flatMap { it.compilations }
69-
.find { it.defaultSourceSet.name == name }) {
73+
.find { it.defaultSourceSet.name == name }
74+
) {
7075
null -> {
7176
project.logger.warn("Warning: Cannot find a benchmark compilation '$name', ignoring.")
7277
BenchmarkTarget(this, name) // ignore

plugin/main/src/kotlinx/benchmark/gradle/BenchmarksPlugin.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,14 @@ constructor(
119119
is JsBenchmarkTarget -> processJsCompilation(config)
120120
is WasmBenchmarkTarget -> processWasmCompilation(config)
121121
is NativeBenchmarkTarget -> processNativeCompilation(config)
122+
// is AndroidBenchmarkTarget -> processAndroidCompilation(config)
123+
is AndroidBenchmarkTarget -> {
124+
println("processConfigurations: AndroidBenchmarkTarget")
125+
config.target.compilations.all { compilation ->
126+
// This block is called for each compilation when they are materialized
127+
println("handling compilation: $compilation")
128+
}
129+
}
122130
}
123131
}
124132
}

0 commit comments

Comments
 (0)