Skip to content

Commit aa374a9

Browse files
committed
SchedulerTask is now an abstract class with optimizations for jvm
* It removes the need for a separate SchedulerTaskBase * submissionTime and taskContext are marked as @JvmField * DispatchedTask is also an abstract class * resumeMode is marked as @JvmField
1 parent e64d9b7 commit aa374a9

File tree

7 files changed

+21
-32
lines changed

7 files changed

+21
-32
lines changed

common/kotlinx-coroutines-core-common/src/AbstractContinuation.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ private const val RESUMED = 2
1818
*/
1919
internal abstract class AbstractContinuation<in T>(
2020
public final override val delegate: Continuation<T>,
21-
public final override val resumeMode: Int
22-
) : SchedulerTaskBase(), Continuation<T>, DispatchedTask<T> {
21+
resumeMode: Int
22+
) : DispatchedTask<T>(resumeMode), Continuation<T> {
2323

2424
/*
2525
* Implementation notes

common/kotlinx-coroutines-core-common/src/Dispatched.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,10 @@ internal object UndispatchedEventLoop {
8181
internal class DispatchedContinuation<in T>(
8282
@JvmField val dispatcher: CoroutineDispatcher,
8383
@JvmField val continuation: Continuation<T>
84-
) : SchedulerTaskBase(), Continuation<T> by continuation, DispatchedTask<T> {
84+
) : DispatchedTask<T>(MODE_ATOMIC_DEFAULT), Continuation<T> by continuation {
8585
@JvmField
8686
@Suppress("PropertyName")
8787
internal var _state: Any? = UNDEFINED
88-
public override var resumeMode: Int = 0
8988
@JvmField // pre-cached value to avoid ctx.fold on every resumption
9089
internal val countOrElement = threadContextElements(context)
9190

@@ -204,20 +203,21 @@ internal fun <T> Continuation<T>.resumeDirectWithException(exception: Throwable)
204203
else -> resumeWithException(exception)
205204
}
206205

207-
internal interface DispatchedTask<in T> : SchedulerTask {
208-
public val delegate: Continuation<T>
209-
public val resumeMode: Int get() = MODE_CANCELLABLE
206+
internal abstract class DispatchedTask<in T>(
207+
@JvmField var resumeMode: Int
208+
) : SchedulerTask() {
209+
public abstract val delegate: Continuation<T>
210210

211-
public fun takeState(): Any?
211+
public abstract fun takeState(): Any?
212212

213213
@Suppress("UNCHECKED_CAST")
214-
public fun <T> getSuccessfulResult(state: Any?): T =
214+
public open fun <T> getSuccessfulResult(state: Any?): T =
215215
state as T
216216

217217
public fun getExceptionalResult(state: Any?): Throwable? =
218218
(state as? CompletedExceptionally)?.cause
219219

220-
public override fun run() {
220+
public final override fun run() {
221221
val taskContext = this.taskContext
222222
try {
223223
val delegate = delegate as DispatchedContinuation<T>

common/kotlinx-coroutines-core-common/src/SchedulerTask.common.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@
44

55
package kotlinx.coroutines
66

7-
internal expect interface SchedulerTask : Runnable
8-
9-
internal expect abstract class SchedulerTaskBase() : SchedulerTask
7+
internal expect abstract class SchedulerTask() : Runnable
108

119
internal expect interface SchedulerTaskContext
1210

core/kotlinx-coroutines-core/src/SchedulerTask.kt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,6 @@ import kotlinx.coroutines.scheduling.*
88

99
internal actual typealias SchedulerTask = Task
1010

11-
internal actual abstract class SchedulerTaskBase actual constructor() : SchedulerTask {
12-
override var submissionTime: Long = 0
13-
override var taskContext: TaskContext = NonBlockingContext
14-
}
15-
1611
internal actual typealias SchedulerTaskContext = TaskContext
1712

1813
@Suppress("EXTENSION_SHADOWED_BY_MEMBER")

core/kotlinx-coroutines-core/src/scheduling/Tasks.kt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,18 +82,20 @@ internal object NonBlockingContext : TaskContext {
8282
}
8383
}
8484

85-
internal interface Task : Runnable {
86-
var submissionTime: Long
87-
var taskContext: TaskContext
85+
internal abstract class Task(
86+
@JvmField var submissionTime: Long,
87+
@JvmField var taskContext: TaskContext
88+
) : Runnable {
89+
constructor() : this(0, NonBlockingContext)
8890
val mode: TaskMode get() = taskContext.taskMode
8991
}
9092

9193
// Non-reusable Task implementation to wrap Runnable instances that do not otherwise implement task
9294
internal class TaskImpl(
9395
@JvmField val block: Runnable,
94-
override var submissionTime: Long,
95-
override var taskContext: TaskContext
96-
) : SchedulerTaskBase() {
96+
submissionTime: Long,
97+
taskContext: TaskContext
98+
) : Task(submissionTime, taskContext) {
9799
override fun run() {
98100
try {
99101
block.run()

js/kotlinx-coroutines-core-js/src/SchedulerTask.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@
44

55
package kotlinx.coroutines
66

7-
@Suppress("ACTUAL_WITHOUT_EXPECT")
8-
internal actual typealias SchedulerTask = Runnable
9-
10-
internal actual abstract class SchedulerTaskBase actual constructor() : SchedulerTask
7+
internal actual abstract class SchedulerTask : Runnable
118

129
@Suppress("ACTUAL_WITHOUT_EXPECT")
1310
internal actual typealias SchedulerTaskContext = Unit

native/kotlinx-coroutines-core-native/src/SchedulerTask.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@
44

55
package kotlinx.coroutines
66

7-
@Suppress("ACTUAL_WITHOUT_EXPECT")
8-
internal actual typealias SchedulerTask = Runnable
9-
10-
internal actual abstract class SchedulerTaskBase actual constructor() : SchedulerTask
7+
internal actual abstract class SchedulerTask : Runnable
118

129
@Suppress("ACTUAL_WITHOUT_EXPECT")
1310
internal actual typealias SchedulerTaskContext = Unit

0 commit comments

Comments
 (0)