[K/N] More work to do for weak-sweeper in weak ref benchmarks

Merge-request: KT-MR-11899
Merged-by: Alexey Glushko <aleksei.glushko@jetbrains.com>
This commit is contained in:
Aleksei.Glushko
2023-08-29 10:52:33 +00:00
committed by Space Team
parent a42cb2f37f
commit 3efd98df1a
4 changed files with 24 additions and 10 deletions
@@ -236,9 +236,9 @@ class RingLauncher : Launcher() {
"GenericArrayView.inlined" to BenchmarkEntryWithInit.create(::GenericArrayViewBenchmark, { inlined() }), "GenericArrayView.inlined" to BenchmarkEntryWithInit.create(::GenericArrayViewBenchmark, { inlined() }),
"GenericArrayView.specialized" to BenchmarkEntryWithInit.create(::GenericArrayViewBenchmark, { specialized() }), "GenericArrayView.specialized" to BenchmarkEntryWithInit.create(::GenericArrayViewBenchmark, { specialized() }),
"GenericArrayView.manual" to BenchmarkEntryWithInit.create(::GenericArrayViewBenchmark, { manual() }), "GenericArrayView.manual" to BenchmarkEntryWithInit.create(::GenericArrayViewBenchmark, { manual() }),
"WeakRefBenchmark.aliveReference" to BenchmarkEntryWithInit.create(::WeakRefBenchmark, { aliveReference() }), "WeakRefBenchmark.aliveReference" to BenchmarkEntryWithInitAndValidation.create(::WeakRefBenchmark, { aliveReference() }, { clean() }),
"WeakRefBenchmark.deadReference" to BenchmarkEntryWithInit.create(::WeakRefBenchmark, { deadReference() }), "WeakRefBenchmark.deadReference" to BenchmarkEntryWithInitAndValidation.create(::WeakRefBenchmark, { deadReference() }, { clean() }),
"WeakRefBenchmark.dyingReference" to BenchmarkEntryWithInit.create(::WeakRefBenchmark, { dyingReference() }), "WeakRefBenchmark.dyingReference" to BenchmarkEntryWithInitAndValidation.create(::WeakRefBenchmark, { dyingReference() }, { clean() }),
) )
init { init {
@@ -51,6 +51,8 @@ private fun ReferenceWrapper.stress() = (1..REPEAT_COUNT).sumOf {
@OptIn(kotlin.native.runtime.NativeRuntimeApi::class) @OptIn(kotlin.native.runtime.NativeRuntimeApi::class)
open class WeakRefBenchmark { open class WeakRefBenchmark {
private val weight = Array(BENCHMARK_SIZE) { ReferenceWrapper.create() }
private val aliveRef = ReferenceWrapper.create() private val aliveRef = ReferenceWrapper.create()
private val deadRef = ReferenceWrapper.create().apply { private val deadRef = ReferenceWrapper.create().apply {
dispose() dispose()
@@ -76,4 +78,8 @@ open class WeakRefBenchmark {
Blackhole.consume(ref.stress()) Blackhole.consume(ref.stress())
} }
fun clean() {
weight.forEach { it.dispose() }
}
} }
@@ -38,23 +38,26 @@ swiftLauncher.addBase(name: "createMultigraphOfInt", benchmark: companion.create
lambda: { ($0 as! SwiftInteropBenchmarks).simpleFunction() })) lambda: { ($0 as! SwiftInteropBenchmarks).simpleFunction() }))
swiftLauncher.addBase( swiftLauncher.addBase(
name: "WeakRefBenchmark.aliveReference", name: "WeakRefBenchmark.aliveReference",
benchmark: BenchmarkEntryWithInit.companion.create( benchmark: BenchmarkEntryWithInitAndValidation.companion.create(
ctor: { return WeakRefBenchmark() }, ctor: { return WeakRefBenchmark() },
lambda: { ($0 as! WeakRefBenchmark).aliveReference() } benchmark: { ($0 as! WeakRefBenchmark).aliveReference() },
validation: { ($0 as! WeakRefBenchmark).clean() }
) )
) )
swiftLauncher.addBase( swiftLauncher.addBase(
name: "WeakRefBenchmark.deadReference", name: "WeakRefBenchmark.deadReference",
benchmark: BenchmarkEntryWithInit.companion.create( benchmark: BenchmarkEntryWithInitAndValidation.companion.create(
ctor: { return WeakRefBenchmark() }, ctor: { return WeakRefBenchmark() },
lambda: { ($0 as! WeakRefBenchmark).deadReference() } benchmark: { ($0 as! WeakRefBenchmark).deadReference() },
validation: { ($0 as! WeakRefBenchmark).clean() }
) )
) )
swiftLauncher.addBase( swiftLauncher.addBase(
name: "WeakRefBenchmark.dyingReference", name: "WeakRefBenchmark.dyingReference",
benchmark: BenchmarkEntryWithInit.companion.create( benchmark: BenchmarkEntryWithInitAndValidation.companion.create(
ctor: { return WeakRefBenchmark() }, ctor: { return WeakRefBenchmark() },
lambda: { ($0 as! WeakRefBenchmark).dyingReference() } benchmark: { ($0 as! WeakRefBenchmark).dyingReference() },
validation: { ($0 as! WeakRefBenchmark).clean() }
) )
) )
@@ -7,7 +7,6 @@ import Foundation
import benchmark import benchmark
private let REPEAT_COUNT = 10000 private let REPEAT_COUNT = 10000
private let REFERENCES_COUNT = 3
private class ReferenceWrapper { private class ReferenceWrapper {
private weak var weakRef: KotlinData? private weak var weakRef: KotlinData?
@@ -49,6 +48,8 @@ private func deadReferenceWrapper() -> ReferenceWrapper {
} }
class WeakRefBenchmark { class WeakRefBenchmark {
private let weight = (0..<10_000).map { _ in ReferenceWrapper() }
private let aliveRef = ReferenceWrapper() private let aliveRef = ReferenceWrapper()
private let deadRef = deadReferenceWrapper() private let deadRef = deadReferenceWrapper()
@@ -78,4 +79,8 @@ class WeakRefBenchmark {
let counter = ref.stress() let counter = ref.stress()
Blackhole.companion.consume(value: counter) Blackhole.companion.consume(value: counter)
} }
func clean() {
weight.forEach { $0.dispose() }
}
} }