• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 @file:OptIn(ObsoleteWorkersApi::class)
2 
3 package kotlinx.coroutines
4 
5 import kotlin.coroutines.*
6 import kotlin.native.concurrent.*
7 import kotlin.time.*
8 
9 internal actual abstract class EventLoopImplPlatform : EventLoop() {
10 
11     private val current = Worker.current
12 
unparknull13     protected actual fun unpark() {
14         current.executeAfter(0L, {})// send an empty task to unpark the waiting event loop
15     }
16 
reschedulenull17     protected actual fun reschedule(now: Long, delayedTask: EventLoopImplBase.DelayedTask) {
18         val delayTimeMillis = delayNanosToMillis(delayedTask.nanoTime - now)
19         DefaultExecutor.invokeOnTimeout(delayTimeMillis, delayedTask, EmptyCoroutineContext)
20     }
21 }
22 
23 internal class EventLoopImpl: EventLoopImplBase() {
invokeOnTimeoutnull24     override fun invokeOnTimeout(timeMillis: Long, block: Runnable, context: CoroutineContext): DisposableHandle =
25         DefaultDelay.invokeOnTimeout(timeMillis, block, context)
26 }
27 
28 internal actual fun createEventLoop(): EventLoop = EventLoopImpl()
29 
30 private val startingPoint = TimeSource.Monotonic.markNow()
31 
32 internal actual fun nanoTime(): Long = (TimeSource.Monotonic.markNow() - startingPoint).inWholeNanoseconds
33