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