Skip to content

Commit 1d6806c

Browse files
committed
Merge branch 'master' into kotlin-community/dev
2 parents b5884bb + bb2208c commit 1d6806c

File tree

35 files changed

+156
-46
lines changed

35 files changed

+156
-46
lines changed

docs/configuration-options.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,10 @@ benchmark {
7474
```
7575

7676
### Kotlin/JVM
77-
| Option | Description | Possible Values | Default Value |
78-
|---------------------------------------------|------------------------------------------------------------|----------------------------------------|----------------|
79-
| `advanced("jvmForks", value)` | Specifies the number of times the harness should fork. | Non-negative Integer, `"definedByJmh"` | `1` |
77+
| Option | Description | Possible Values | Default Value |
78+
|---------------------------------------------|----------------------------------------------------------------------------|----------------------------------------|---------------|
79+
| `advanced("jvmForks", value)` | Specifies the number of times the harness should fork. | Non-negative Integer, `"definedByJmh"` | `1` |
80+
| `advanced("jmhIgnoreLock", value)` | Sets a value of the `jmh.ignoreLock` property during benchmarks execution. | `true`, `false` | unset |
8081

8182
**Notes on "jvmForks":**
8283
- **0** - "no fork", i.e., no subprocesses are forked to run benchmarks.

integration/build.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,9 @@ tasks.test {
4242
project.providers.gradleProperty("kotlin_additional_cli_options").orNull?.let {
4343
systemProperty("kotlin_additional_cli_options", it)
4444
}
45+
46+
val forks = project.providers.gradleProperty("testing.max.forks").orNull?.toInt()
47+
?: (Runtime.getRuntime().availableProcessors() / 2).coerceAtLeast(1)
48+
49+
maxParallelForks = forks
4550
}

integration/src/test/kotlin/kotlinx/benchmark/integration/AnnotationsValidationTest.kt

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ package kotlinx.benchmark.integration
22

33
import kotlin.test.*
44

5-
class AnnotationsValidationTest : GradleTest() {
5+
abstract class AnnotationsValidationTest : GradleTest() {
66

7-
private val platformBenchmarkTask = "nativeBenchmark"
7+
protected val platformBenchmarkTask = "nativeBenchmark"
88

9-
private fun executeBenchmark(
9+
protected fun executeBenchmark(
1010
benchmarkFunction: String? = null,
1111
setupFunction: String? = null,
1212
teardownFunction: String? = null,
@@ -26,7 +26,7 @@ class AnnotationsValidationTest : GradleTest() {
2626
runJvmBenchmark(runner, jvmSpecificError)
2727
}
2828

29-
private fun runPlatformBenchmark(runner: Runner, error: String?) {
29+
protected fun runPlatformBenchmark(runner: Runner, error: String?) {
3030
if (error != null) {
3131
runner.runAndFail(platformBenchmarkTask) {
3232
assertOutputContains(error)
@@ -38,7 +38,7 @@ class AnnotationsValidationTest : GradleTest() {
3838
}
3939
}
4040

41-
private fun runJvmBenchmark(runner: Runner, jvmSpecificError: String?) {
41+
protected fun runJvmBenchmark(runner: Runner, jvmSpecificError: String?) {
4242
if (jvmSpecificError != null) {
4343
runner.runAndFail("jvmBenchmark") {
4444
assertOutputContains(jvmSpecificError)
@@ -49,7 +49,9 @@ class AnnotationsValidationTest : GradleTest() {
4949
}
5050
}
5151
}
52+
}
5253

54+
class ParamAnnotationsValidationTest : AnnotationsValidationTest() {
5355
// @Param
5456

5557
@Test
@@ -142,7 +144,9 @@ class AnnotationsValidationTest : GradleTest() {
142144
jvmSpecificError = "@Param can only be placed over the annotation-compatible types: primitives, primitive wrappers, Strings, or enums."
143145
)
144146
}
147+
}
145148

149+
class BenchmarkAnnotationsValidationTest : AnnotationsValidationTest() {
146150
// @Benchmark
147151

148152
@Test
@@ -204,7 +208,9 @@ class AnnotationsValidationTest : GradleTest() {
204208
jvmSpecificError = "Method parameters should be either @State classes"
205209
)
206210
}
211+
}
207212

213+
class SetupAnnotationsValidationTest : AnnotationsValidationTest() {
208214
// @Setup
209215

210216
@Test
@@ -271,7 +277,9 @@ class AnnotationsValidationTest : GradleTest() {
271277
jvmSpecificError = "Method parameters should be either @State classes"
272278
)
273279
}
280+
}
274281

282+
class TearDownAnnotationsValidationTest : AnnotationsValidationTest() {
275283
// TearDown
276284

277285
@Test
@@ -338,7 +346,9 @@ class AnnotationsValidationTest : GradleTest() {
338346
jvmSpecificError = "Method parameters should be either @State classes"
339347
)
340348
}
349+
}
341350

351+
class MixedAnnotationsValidationTest : AnnotationsValidationTest() {
342352
// Mix
343353

344354
@Test
@@ -365,4 +375,4 @@ class AnnotationsValidationTest : GradleTest() {
365375
teardownFunction = "plainFunction"
366376
)
367377
}
368-
}
378+
}

integration/src/test/kotlin/kotlinx/benchmark/integration/ConfigurationCacheTest.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class ConfigurationCacheTest : GradleTest() {
1212
iterations = 1
1313
iterationTime = 100
1414
iterationTimeUnit = "ms"
15+
advanced("jmhIgnoreLock", true)
1516
}
1617
}
1718

@@ -36,7 +37,7 @@ class ConfigurationCacheTest : GradleTest() {
3637
fun testConfigurationCacheNative() = runConfigurationCacheTest(
3738
"kotlin-multiplatform",
3839
listOf(":nativeBenchmark"),
39-
listOf(":compileKotlinNative", ":nativeBenchmarkGenerate", ":compileNativeBenchmarkKotlinNative", ":linkNativeBenchmarkReleaseExecutableNative")
40+
listOf(":compileKotlinNative", ":nativeBenchmarkGenerate", ":compileNativeBenchmarkKotlinNative", ":linkNativeBenchmarkDebugExecutableNative")
4041
)
4142

4243
@Test

integration/src/test/kotlin/kotlinx/benchmark/integration/OptionsOverrideAnnotationsTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ class OptionsOverrideAnnotationsTest : GradleTest() {
9191
@Test
9292
fun testOutputTimeUnit() {
9393
val expectedOutputTimeUnit = "ns"
94-
val expectedCount = /*warmups*/3 + /*iterations*/5 + /*Success:*/1 + /*summary*/1
94+
val expectedCount = /*warmups*/2 + /*iterations*/1 + /*Success:*/1 + /*summary*/1
9595

9696
testConfiguration(
9797
setupBlock = {
@@ -110,7 +110,7 @@ class OptionsOverrideAnnotationsTest : GradleTest() {
110110
@Test
111111
fun testMode() {
112112
val expectedMode = "avgt"
113-
val expectedCount = /*warmups*/3 + /*iterations*/5 + /*Success:*/1 + /*summary*/1
113+
val expectedCount = /*warmups*/2 + /*iterations*/1 + /*Success:*/1 + /*summary*/1
114114

115115
testConfiguration(
116116
setupBlock = {

integration/src/test/kotlin/kotlinx/benchmark/integration/OptionsValidationTest.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,13 @@ class OptionsValidationTest : GradleTest() {
240240
iterationTimeUnit = "ms"
241241
advanced("jsUseBridge", "x")
242242
}
243+
244+
configuration("invalidJmhIgnoreLock") {
245+
iterations = 1
246+
iterationTime = 100
247+
iterationTimeUnit = "ms"
248+
advanced("jmhIgnoreLock", "x")
249+
}
243250
}
244251

245252
runner.runAndFail("blankAdvancedConfigNameBenchmark") {
@@ -260,6 +267,9 @@ class OptionsValidationTest : GradleTest() {
260267
runner.runAndFail("invalidJsUseBridgeBenchmark") {
261268
assertOutputContains("Invalid value for 'jsUseBridge': 'x'. Expected a Boolean value.")
262269
}
270+
runner.runAndFail("invalidJmhIgnoreLock") {
271+
assertOutputContains("Invalid value for 'jmhIgnoreLock': 'x'. Expected a Boolean value.")
272+
}
263273
}
264274
}
265275

@@ -274,4 +284,4 @@ private object ValidOptions {
274284
)
275285
val modes = setOf("thrpt", "avgt", "Throughput", "AverageTime")
276286
val nativeForks = setOf("perBenchmark", "perIteration")
277-
}
287+
}

integration/src/test/kotlin/kotlinx/benchmark/integration/ReportFormatTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class ReportFormatTest : GradleTest() {
1717
iterationTime = 100
1818
iterationTimeUnit = "ms"
1919
reportFormat = format
20+
advanced("jmhIgnoreLock", true)
2021
}
2122
}
2223
}

integration/src/test/kotlin/kotlinx/benchmark/integration/SourceSetAsBenchmarkTargetTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ class SourceSetAsBenchmarkTargetTest : GradleTest() {
1616
iterationTime = 100
1717
iterationTimeUnit = "ms"
1818
reportFormat = "csv"
19+
advanced("jmhIgnoreLock", true)
1920
}
2021
}
2122

integration/src/test/kotlin/kotlinx/benchmark/integration/SuiteSourceGeneratorTest.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class SuiteSourceGeneratorTest : GradleTest() {
2828
}
2929
},
3030
checkBlock = {
31-
val parameters = "iterations = 12, warmups = 5, iterationTime = IterationTime\\(200, BenchmarkTimeUnit.MILLISECONDS\\)"
31+
val parameters = "iterations = 12, warmups = 2, iterationTime = IterationTime\\(200, BenchmarkTimeUnit.MILLISECONDS\\)"
3232
assertGeneratedDescriptorContainsCode(parameters)
3333
}
3434
)
@@ -44,7 +44,7 @@ class SuiteSourceGeneratorTest : GradleTest() {
4444
},
4545
checkBlock = {
4646
// time and timeUnit of @Warmup are ignored: https://github.com/Kotlin/kotlinx-benchmark/issues/74
47-
val parameters = "iterations = 3, warmups = 12, iterationTime = IterationTime\\(1, BenchmarkTimeUnit.SECONDS\\)"
47+
val parameters = "iterations = 1, warmups = 12, iterationTime = IterationTime\\(1, BenchmarkTimeUnit.SECONDS\\)"
4848
assertGeneratedDescriptorContainsCode(parameters)
4949
}
5050
)
@@ -183,4 +183,4 @@ class SuiteSourceGeneratorTest : GradleTest() {
183183
runner.runAndSucceed(":compile${capitalizedTarget}BenchmarkKotlin${capitalizedTarget}")
184184
}
185185
}
186-
}
186+
}

integration/src/test/resources/templates/annotations-validation/build.gradle

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
12
import org.jetbrains.kotlin.konan.target.KonanTarget
23
import org.jetbrains.kotlin.konan.target.HostManager
34

@@ -17,6 +18,15 @@ benchmark {
1718
register("jvm")
1819
register("js")
1920
register("wasmJs")
20-
register("native")
21+
register("native") {
22+
// don't optimize binaries to speedup test execution
23+
buildType = NativeBuildType.DEBUG
24+
}
25+
}
26+
27+
configurations {
28+
main {
29+
advanced("jmhIgnoreLock", true)
30+
}
2131
}
2232
}

0 commit comments

Comments
 (0)