Skip to content

Commit f3d2a67

Browse files
Elena LepilkinaLepilkinaElena
authored andcommitted
Added iteration mode to configuration
1 parent 8703994 commit f3d2a67

File tree

9 files changed

+25
-4
lines changed

9 files changed

+25
-4
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,8 @@ Available configuration options:
150150
* `iterationTimeUnit` – time unit for `iterationTime` (default is seconds)
151151
* `outputTimeUnit` – time unit for results output
152152
* `mode` – "thrpt" for measuring operations per time, or "avgt" for measuring time per operation
153+
* `iterationMode` – "external" for iterating in gradle in order to get correct Kotlin/Native runtime input in measurement,
154+
"internal" can be used if it's known that measured code have no calls in K/N runtime that can influence on measurement unrepeatedly.
153155
* `include("…")` – regular expression to include benchmarks with fully qualified names matching it, as a substring
154156
* `exclude("…")` – regular expression to exclude benchmarks with fully qualified names matching it, as a substring
155157
* `param("name", "value1", "value2")` – specify a parameter for a public mutable property `name` annotated with `@Param`

examples/kotlin-multiplatform/src/commonMain/kotlin/CommonBenchmark.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import kotlin.math.*
66
@State(Scope.Benchmark)
77
@Measurement(iterations = 3, time = 1, timeUnit = BenchmarkTimeUnit.SECONDS)
88
@OutputTimeUnit(BenchmarkTimeUnit.MILLISECONDS)
9-
@BenchmarkMode(Mode.Throughput)
9+
@BenchmarkMode(Mode.AverageTime)
1010
class CommonBenchmark {
1111
private var data = 0.0
1212
private lateinit var text : String

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ open class BenchmarkConfiguration(val extension: BenchmarksExtension, val name:
99
var iterationTime: Long? = null
1010
var iterationTimeUnit: String? = null
1111
var mode: String? = null
12+
var iterationMode: String? = null
1213
var outputTimeUnit: String? = null
1314
var reportFormat: String? = null
1415

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ class SuiteSourceGenerator(val title: String, val module: ModuleDescriptor, val
269269

270270
val hasABlackholeParameter = fn.valueParameters.singleOrNull()?.type.toString() == "Blackhole"
271271
if (hasABlackholeParameter) {
272-
println("WARNING: Blackhole works correctly only on JVM")
272+
println("WARNING: Blackhole works incorrectly on JS")
273273

274274
addStatement(
275275
"descriptor.add(%T(%S, descriptor, %N(%T::%N, %T())))",

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ fun writeParameters(
9494
config.iterationTimeUnit?.let { appendln("iterationTimeUnit:$it") }
9595
config.outputTimeUnit?.let { appendln("outputTimeUnit:$it") }
9696
config.mode?.let { appendln("mode:$it") }
97+
config.iterationMode?.let { appendln("iterationMode:$it") }
9798

9899
config.includes.forEach {
99100
appendln("include:$it")

runtime/commonMain/src/kotlinx/benchmark/CommonBenchmarkAnnotations.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ expect enum class Mode {
2424
Throughput, AverageTime
2525
}
2626

27+
enum class IterationMode {
28+
Internal, External
29+
}
30+
2731
@Target(AnnotationTarget.CLASS)
2832
expect annotation class OutputTimeUnit(val value: BenchmarkTimeUnit)
2933

@@ -48,6 +52,13 @@ fun Mode.toText() = when (this) {
4852
else -> throw UnsupportedOperationException("$this is not supported")
4953
}
5054

55+
@Suppress("REDUNDANT_ELSE_IN_WHEN")
56+
fun IterationMode.toText() = when (this) {
57+
IterationMode.External -> "external"
58+
IterationMode.Internal -> "internal"
59+
else -> throw UnsupportedOperationException("$this is not supported")
60+
}
61+
5162
@Suppress("REDUNDANT_ELSE_IN_WHEN")
5263
fun BenchmarkTimeUnit.toMultiplier() = when (this) {
5364
BenchmarkTimeUnit.NANOSECONDS -> 1

runtime/commonMain/src/kotlinx/benchmark/ExecutorConfiguration.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ class BenchmarkConfiguration(val runner: RunnerConfiguration, val suite: SuiteDe
77
val iterationTimeUnit: BenchmarkTimeUnit get() = runner.iterationTimeUnit ?: suite.iterationTime.timeUnit
88
val outputTimeUnit: BenchmarkTimeUnit get() = runner.outputTimeUnit ?: suite.outputTimeUnit
99
val mode: Mode get() = runner.mode ?: suite.mode
10+
val iterationMode: IterationMode = runner.iterationMode ?: IterationMode.External
1011
}

runtime/commonMain/src/kotlinx/benchmark/RunnerConfiguration.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ class RunnerConfiguration(config: String) {
6868
"mode"
6969
) { Mode.valueOf(it) }
7070

71+
val iterationMode = singleValueOrNull(
72+
"iterationMode"
73+
) { IterationMode.valueOf(it) }
74+
7175

7276
private fun parseTimeUnit(text: String) = when (text) {
7377
BenchmarkTimeUnit.SECONDS.name, "s", "sec" -> BenchmarkTimeUnit.SECONDS
@@ -88,7 +92,8 @@ warmups: $warmups
8892
iterationTime: $iterationTime
8993
iterationTimeUnit: $iterationTimeUnit
9094
outputTimeUnit: $outputTimeUnit
91-
mode: $mode
95+
mode: $mode
96+
iterationMode: $iterationMode
9297
"""
9398
}
9499
}

runtime/jvmMain/src/kotlinx/benchmark/JvmBenchmarkAnnotations.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,4 @@ actual typealias Warmup = org.openjdk.jmh.annotations.Warmup
2727
actual typealias Measurement = org.openjdk.jmh.annotations.Measurement
2828

2929
@Suppress("NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS")
30-
actual typealias Param = org.openjdk.jmh.annotations.Param
30+
actual typealias Param = org.openjdk.jmh.annotations.Param

0 commit comments

Comments
 (0)