From f32e0f3cbaf2d7341ec8a5a03ab32a437189c432 Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Sun, 20 Feb 2022 06:31:31 +0300 Subject: [PATCH] Provide specialized TimeSource.Monotonic for wasm KT-46132 --- .../wasm/src/kotlin/time/TimeSources.kt | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/libraries/stdlib/wasm/src/kotlin/time/TimeSources.kt b/libraries/stdlib/wasm/src/kotlin/time/TimeSources.kt index 606d536b3e1..cad4c327b50 100644 --- a/libraries/stdlib/wasm/src/kotlin/time/TimeSources.kt +++ b/libraries/stdlib/wasm/src/kotlin/time/TimeSources.kt @@ -18,22 +18,20 @@ private external fun dateNow(): Double @SinceKotlin("1.3") @ExperimentalTime -internal actual object MonotonicTimeSource : TimeSource, AbstractDoubleTimeSource(unit = DurationUnit.MILLISECONDS) { +internal actual object MonotonicTimeSource : TimeSource { private val performance: ExternalInterfaceType? = tryGetPerformance() - override fun read(): Double = + private fun read(): Double = if (performance != null) getPerformanceNow(performance) else dateNow() + actual override fun markNow(): DefaultTimeMark = DefaultTimeMark(read()) + actual fun elapsedFrom(timeMark: DefaultTimeMark): Duration = (read() - timeMark.reading as Double).milliseconds + actual fun adjustReading(timeMark: DefaultTimeMark, duration: Duration): DefaultTimeMark = + DefaultTimeMark(timeMark.reading as Double + duration.toDouble(DurationUnit.MILLISECONDS)) + override fun toString(): String = if (performance != null) "TimeSource(globalThis.performance.now())" else "TimeSource(Date.now())" } -@SinceKotlin("1.3") -@ExperimentalTime -internal actual object MonotonicTimeSource : TimeSource { - actual override fun markNow(): DefaultTimeMark = TODO("Wasm stdlib: MonotonicTimeSource::markNow") - actual fun elapsedFrom(timeMark: DefaultTimeMark): Duration = TODO("Wasm stdlib: MonotonicTimeSource") - actual fun adjustReading(timeMark: DefaultTimeMark, duration: Duration): DefaultTimeMark = TODO("Wasm stdlib: MonotonicTimeSource") -} - -internal actual class DefaultTimeMarkReading // TODO: Long? \ No newline at end of file +@Suppress("ACTUAL_WITHOUT_EXPECT") // visibility +internal actual typealias DefaultTimeMarkReading = Double \ No newline at end of file