Skip to content

Commit 7067109

Browse files
elizarovqwwdfsad
authored andcommitted
Scheduler tests improvements
Make stress test faster Fix OOM in stress test Public API signatures updated
1 parent e4bbb4b commit 7067109

File tree

4 files changed

+13
-16
lines changed

4 files changed

+13
-16
lines changed

binary-compatibility-validator/reference-public-api/kotlinx-coroutines-core.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ public final class kotlinx/coroutines/experimental/CoroutineContextKt {
143143
public abstract class kotlinx/coroutines/experimental/CoroutineDispatcher : kotlin/coroutines/experimental/AbstractCoroutineContextElement, kotlin/coroutines/experimental/ContinuationInterceptor {
144144
public fun <init> ()V
145145
public abstract fun dispatch (Lkotlin/coroutines/experimental/CoroutineContext;Ljava/lang/Runnable;)V
146+
public fun dispatchYield (Lkotlin/coroutines/experimental/CoroutineContext;Ljava/lang/Runnable;)V
146147
public fun interceptContinuation (Lkotlin/coroutines/experimental/Continuation;)Lkotlin/coroutines/experimental/Continuation;
147148
public fun isDispatchNeeded (Lkotlin/coroutines/experimental/CoroutineContext;)Z
148149
public final fun plus (Lkotlinx/coroutines/experimental/CoroutineDispatcher;)Lkotlinx/coroutines/experimental/CoroutineDispatcher;

binary-compatibility-validator/src/test/kotlin/kotlinx/coroutines/experimental/tools/PublicApiTest.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ class PublicApiTest {
2727

2828
@Test
2929
fun kotlinxCoroutinesCore() {
30-
snapshotAPIAndCompare("core/kotlinx-coroutines-core", nonPublicPackages = listOf("kotlinx.coroutines.experimental.internal"))
30+
snapshotAPIAndCompare("core/kotlinx-coroutines-core", nonPublicPackages = listOf(
31+
"kotlinx.coroutines.experimental.internal",
32+
"kotlinx.coroutines.experimental.scheduling"))
3133
}
3234

3335
@Test

core/kotlinx-coroutines-core/src/test/kotlin/kotlinx/coroutines/experimental/scheduling/CoroutineSchedulerStressTest.kt

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import kotlin.test.*
1212
class CoroutineSchedulerStressTest : TestBase() {
1313

1414
private var dispatcher: ExperimentalCoroutineDispatcher = ExperimentalCoroutineDispatcher()
15-
private val observedThreads = ConcurrentHashMap<Thread, MutableSet<Int>>()
15+
private val observedThreads = ConcurrentHashMap<Thread, Long>()
1616
private val tasksNum = 4_000_000 * stressTestMultiplier
1717
private val processed = AtomicInteger(0)
1818
private val finishLatch = CountDownLatch(1)
@@ -53,9 +53,8 @@ class CoroutineSchedulerStressTest : TestBase() {
5353
return@Runnable
5454
}
5555

56-
val defensiveCopy = submittedTasks
5756
dispatcher.dispatch(EmptyCoroutineContext, Runnable {
58-
processTask(defensiveCopy)
57+
processTask()
5958
processedCounter.incrementAndGet()
6059
})
6160
}
@@ -83,7 +82,7 @@ class CoroutineSchedulerStressTest : TestBase() {
8382
submissionInitiator.dispatch(EmptyCoroutineContext, Runnable {
8483
for (i in 1..tasksNum) {
8584
dispatcher.dispatch(EmptyCoroutineContext, Runnable {
86-
processTask(i)
85+
processTask()
8786
})
8887
}
8988
})
@@ -93,23 +92,18 @@ class CoroutineSchedulerStressTest : TestBase() {
9392
validateResults()
9493
}
9594

96-
private fun processTask(i: Int) {
97-
var numbers = observedThreads[Thread.currentThread()]
98-
if (numbers == null) {
99-
numbers = hashSetOf()
100-
observedThreads[Thread.currentThread()] = numbers
101-
}
102-
103-
require(numbers.add(i))
95+
private fun processTask() {
96+
val counter = observedThreads[Thread.currentThread()] ?: 0L
97+
observedThreads[Thread.currentThread()] = counter + 1
10498

10599
if (processed.incrementAndGet() == tasksNum) {
106100
finishLatch.countDown()
107101
}
108102
}
109103

110104
private fun validateResults() {
111-
val result = observedThreads.values.flatMap { it }.toSet()
112-
assertEquals((1..tasksNum).toSet(), result)
105+
val result = observedThreads.values.sum()
106+
assertEquals(tasksNum.toLong(), result)
113107
checkPoolThreadsCreated(Runtime.getRuntime().availableProcessors())
114108
}
115109

core/kotlinx-coroutines-core/src/test/kotlin/kotlinx/coroutines/experimental/scheduling/WorkQueueStressTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import kotlin.test.*
1111
class WorkQueueStressTest : TestBase() {
1212

1313
private val threads = mutableListOf<Thread>()
14-
private val offerIterations = 2_000_000 * stressTestMultiplier
14+
private val offerIterations = 100_000 * stressTestMultiplier
1515
private val stealersCount = 6
1616
private val stolenTasks = Array(stealersCount) { Queue() }
1717
private val globalQueue = Queue() // only producer will use it

0 commit comments

Comments
 (0)