Rename DefaultTimeMark to TimeSource.Monotonic.ValueTimeMark

This commit is contained in:
Ilya Gorbunov
2022-04-14 06:35:33 +03:00
committed by Space
parent 4ab0f7deeb
commit a03999fe81
9 changed files with 147 additions and 138 deletions
@@ -6,6 +6,7 @@
package kotlin.time
import kotlin.system.*
import kotlin.time.TimeSource.Monotonic.ValueTimeMark
@SinceKotlin("1.3")
@ExperimentalTime
@@ -14,13 +15,13 @@ internal actual object MonotonicTimeSource : TimeSource {
private fun read(): Long = getTimeNanos() - zero
override fun toString(): String = "TimeSource(System.nanoTime())"
actual override fun markNow(): DefaultTimeMark = DefaultTimeMark(read())
actual fun elapsedFrom(timeMark: DefaultTimeMark): Duration =
actual override fun markNow(): ValueTimeMark = ValueTimeMark(read())
actual fun elapsedFrom(timeMark: ValueTimeMark): Duration =
saturatingDiff(read(), timeMark.reading)
actual fun adjustReading(timeMark: DefaultTimeMark, duration: Duration): DefaultTimeMark =
DefaultTimeMark(saturatingAdd(timeMark.reading, duration))
actual fun adjustReading(timeMark: ValueTimeMark, duration: Duration): ValueTimeMark =
ValueTimeMark(saturatingAdd(timeMark.reading, duration))
}
@Suppress("ACTUAL_WITHOUT_EXPECT") // visibility
internal actual typealias DefaultTimeMarkReading = Long
internal actual typealias ValueTimeMarkReading = Long
+22 -22
View File
@@ -206,27 +206,6 @@ public abstract class AbstractLongTimeSource : kotlin.time.TimeSource {
protected abstract fun read(): kotlin.Long
}
@kotlin.time.ExperimentalTime
@kotlin.SinceKotlin(version = "1.7")
@kotlin.jvm.JvmInline
public final inline class DefaultTimeMark : kotlin.time.TimeMark {
public open override fun elapsedNow(): kotlin.time.Duration
public open override operator fun equals(other: kotlin.Any?): kotlin.Boolean
public open override fun hasNotPassedNow(): kotlin.Boolean
public open override fun hasPassedNow(): kotlin.Boolean
public open override fun hashCode(): kotlin.Int
public open override operator fun minus(duration: kotlin.time.Duration): kotlin.time.DefaultTimeMark
public open override operator fun plus(duration: kotlin.time.Duration): kotlin.time.DefaultTimeMark
public open override fun toString(): kotlin.String
}
@kotlin.SinceKotlin(version = "1.6")
@kotlin.WasExperimental(markerClass = {kotlin.time.ExperimentalTime::class})
@kotlin.jvm.JvmInline
@@ -600,9 +579,30 @@ public interface TimeSource {
}
public object Monotonic : kotlin.time.TimeSource {
public open override fun markNow(): kotlin.time.DefaultTimeMark
public open override fun markNow(): kotlin.time.TimeSource.Monotonic.ValueTimeMark
public open override fun toString(): kotlin.String
@kotlin.time.ExperimentalTime
@kotlin.SinceKotlin(version = "1.7")
@kotlin.jvm.JvmInline
public final inline class ValueTimeMark : kotlin.time.TimeMark {
public open override fun elapsedNow(): kotlin.time.Duration
public open override operator fun equals(other: kotlin.Any?): kotlin.Boolean
public open override fun hasNotPassedNow(): kotlin.Boolean
public open override fun hasPassedNow(): kotlin.Boolean
public open override fun hashCode(): kotlin.Int
public open override operator fun minus(duration: kotlin.time.Duration): kotlin.time.TimeSource.Monotonic.ValueTimeMark
public open override operator fun plus(duration: kotlin.time.Duration): kotlin.time.TimeSource.Monotonic.ValueTimeMark
public open override fun toString(): kotlin.String
}
}
}
+22 -22
View File
@@ -206,27 +206,6 @@ public abstract class AbstractLongTimeSource : kotlin.time.TimeSource {
protected abstract fun read(): kotlin.Long
}
@kotlin.time.ExperimentalTime
@kotlin.SinceKotlin(version = "1.7")
@kotlin.jvm.JvmInline
public final inline class DefaultTimeMark : kotlin.time.TimeMark {
public open override fun elapsedNow(): kotlin.time.Duration
public open override operator fun equals(other: kotlin.Any?): kotlin.Boolean
public open override fun hasNotPassedNow(): kotlin.Boolean
public open override fun hasPassedNow(): kotlin.Boolean
public open override fun hashCode(): kotlin.Int
public open override operator fun minus(duration: kotlin.time.Duration): kotlin.time.DefaultTimeMark
public open override operator fun plus(duration: kotlin.time.Duration): kotlin.time.DefaultTimeMark
public open override fun toString(): kotlin.String
}
@kotlin.SinceKotlin(version = "1.6")
@kotlin.WasExperimental(markerClass = {kotlin.time.ExperimentalTime::class})
@kotlin.jvm.JvmInline
@@ -600,9 +579,30 @@ public interface TimeSource {
}
public object Monotonic : kotlin.time.TimeSource {
public open override fun markNow(): kotlin.time.DefaultTimeMark
public open override fun markNow(): kotlin.time.TimeSource.Monotonic.ValueTimeMark
public open override fun toString(): kotlin.String
@kotlin.time.ExperimentalTime
@kotlin.SinceKotlin(version = "1.7")
@kotlin.jvm.JvmInline
public final inline class ValueTimeMark : kotlin.time.TimeMark {
public open override fun elapsedNow(): kotlin.time.Duration
public open override operator fun equals(other: kotlin.Any?): kotlin.Boolean
public open override fun hasNotPassedNow(): kotlin.Boolean
public open override fun hasPassedNow(): kotlin.Boolean
public open override fun hashCode(): kotlin.Int
public open override operator fun minus(duration: kotlin.time.Duration): kotlin.time.TimeSource.Monotonic.ValueTimeMark
public open override operator fun plus(duration: kotlin.time.Duration): kotlin.time.TimeSource.Monotonic.ValueTimeMark
public open override fun toString(): kotlin.String
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@@ -9,15 +9,16 @@ import org.w3c.performance.GlobalPerformance
import org.w3c.performance.Performance
import kotlin.math.truncate
import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.TimeSource.Monotonic.ValueTimeMark
@Suppress("ACTUAL_WITHOUT_EXPECT") // visibility
internal actual typealias DefaultTimeMarkReading = Any
internal actual typealias ValueTimeMarkReading = Any
@ExperimentalTime
internal interface DefaultTimeSource : TimeSource {
override fun markNow(): DefaultTimeMark
fun elapsedFrom(timeMark: DefaultTimeMark): Duration
fun adjustReading(timeMark: DefaultTimeMark, duration: Duration): DefaultTimeMark
override fun markNow(): ValueTimeMark
fun elapsedFrom(timeMark: ValueTimeMark): Duration
fun adjustReading(timeMark: ValueTimeMark, duration: Duration): ValueTimeMark
}
@SinceKotlin("1.3")
@@ -35,9 +36,9 @@ internal actual object MonotonicTimeSource : DefaultTimeSource, TimeSource { //
}
actual override fun markNow(): DefaultTimeMark = actualSource.markNow()
actual override fun elapsedFrom(timeMark: DefaultTimeMark): Duration = actualSource.elapsedFrom(timeMark)
actual override fun adjustReading(timeMark: DefaultTimeMark, duration: Duration): DefaultTimeMark =
actual override fun markNow(): ValueTimeMark = actualSource.markNow()
actual override fun elapsedFrom(timeMark: ValueTimeMark): Duration = actualSource.elapsedFrom(timeMark)
actual override fun adjustReading(timeMark: ValueTimeMark, duration: Duration): ValueTimeMark =
actualSource.adjustReading(timeMark, duration)
}
@@ -49,18 +50,19 @@ internal external interface Process {
@ExperimentalTime
internal class HrTimeSource(private val process: Process) : DefaultTimeSource {
override fun markNow(): DefaultTimeMark = DefaultTimeMark(process.hrtime())
override fun elapsedFrom(timeMark: DefaultTimeMark): Duration =
override fun markNow(): ValueTimeMark = ValueTimeMark(process.hrtime())
override fun elapsedFrom(timeMark: ValueTimeMark): Duration =
@Suppress("UNCHECKED_CAST")
process.hrtime(timeMark.reading as Array<Double>).let { (seconds, nanos) -> seconds.toDuration(DurationUnit.SECONDS) + nanos.toDuration(DurationUnit.NANOSECONDS) }
process.hrtime(timeMark.reading as Array<Double>)
.let { (seconds, nanos) -> seconds.toDuration(DurationUnit.SECONDS) + nanos.toDuration(DurationUnit.NANOSECONDS) }
override fun adjustReading(timeMark: DefaultTimeMark, duration: Duration): DefaultTimeMark =
override fun adjustReading(timeMark: ValueTimeMark, duration: Duration): ValueTimeMark =
@Suppress("UNCHECKED_CAST")
(timeMark.reading as Array<Double>).let { (seconds, nanos) ->
duration.toComponents { _, addNanos ->
arrayOf<Double>(sumCheckNaN(seconds + truncate(duration.toDouble(DurationUnit.SECONDS))), nanos + addNanos)
}
}.let(::DefaultTimeMark)
}.let(TimeSource.Monotonic::ValueTimeMark)
override fun toString(): String = "TimeSource(process.hrtime())"
@@ -68,13 +70,14 @@ internal class HrTimeSource(private val process: Process) : DefaultTimeSource {
@SinceKotlin("1.3")
@ExperimentalTime
internal class PerformanceTimeSource(val performance: Performance) : DefaultTimeSource { // AbstractDoubleTimeSource(unit = DurationUnit.MILLISECONDS) {
internal class PerformanceTimeSource(val performance: Performance) :
DefaultTimeSource { // AbstractDoubleTimeSource(unit = DurationUnit.MILLISECONDS) {
private fun read(): Double = performance.now()
override fun markNow(): DefaultTimeMark = DefaultTimeMark(read())
override fun elapsedFrom(timeMark: DefaultTimeMark): Duration = (read() - timeMark.reading as Double).milliseconds
override fun adjustReading(timeMark: DefaultTimeMark, duration: Duration): DefaultTimeMark =
DefaultTimeMark(sumCheckNaN(timeMark.reading as Double + duration.toDouble(DurationUnit.MILLISECONDS)))
override fun markNow(): ValueTimeMark = ValueTimeMark(read())
override fun elapsedFrom(timeMark: ValueTimeMark): Duration = (read() - timeMark.reading as Double).milliseconds
override fun adjustReading(timeMark: ValueTimeMark, duration: Duration): ValueTimeMark =
ValueTimeMark(sumCheckNaN(timeMark.reading as Double + duration.toDouble(DurationUnit.MILLISECONDS)))
override fun toString(): String = "TimeSource(self.performance.now())"
}
@@ -84,10 +87,10 @@ internal class PerformanceTimeSource(val performance: Performance) : DefaultTime
internal object DateNowTimeSource : DefaultTimeSource {
private fun read(): Double = kotlin.js.Date.now()
override fun markNow(): DefaultTimeMark = DefaultTimeMark(read())
override fun elapsedFrom(timeMark: DefaultTimeMark): Duration = (read() - timeMark.reading as Double).milliseconds
override fun adjustReading(timeMark: DefaultTimeMark, duration: Duration): DefaultTimeMark =
DefaultTimeMark(sumCheckNaN(timeMark.reading as Double + duration.toDouble(DurationUnit.MILLISECONDS)))
override fun markNow(): ValueTimeMark = ValueTimeMark(read())
override fun elapsedFrom(timeMark: ValueTimeMark): Duration = (read() - timeMark.reading as Double).milliseconds
override fun adjustReading(timeMark: ValueTimeMark, duration: Duration): ValueTimeMark =
ValueTimeMark(sumCheckNaN(timeMark.reading as Double + duration.toDouble(DurationUnit.MILLISECONDS)))
override fun toString(): String = "TimeSource(Date.now())"
}
@@ -1,10 +1,12 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package kotlin.time
import kotlin.time.TimeSource.Monotonic.ValueTimeMark
@SinceKotlin("1.3")
@ExperimentalTime
internal actual object MonotonicTimeSource : TimeSource {
@@ -12,15 +14,13 @@ internal actual object MonotonicTimeSource : TimeSource {
private fun read(): Long = System.nanoTime() - zero
override fun toString(): String = "TimeSource(System.nanoTime())"
actual override fun markNow(): DefaultTimeMark = DefaultTimeMark(read())
actual fun elapsedFrom(timeMark: DefaultTimeMark): Duration =
actual override fun markNow(): ValueTimeMark = ValueTimeMark(read())
actual fun elapsedFrom(timeMark: ValueTimeMark): Duration =
saturatingDiff(read(), timeMark.reading)
actual fun adjustReading(timeMark: DefaultTimeMark, duration: Duration): DefaultTimeMark =
DefaultTimeMark(saturatingAdd(timeMark.reading, duration))
actual fun adjustReading(timeMark: ValueTimeMark, duration: Duration): ValueTimeMark =
ValueTimeMark(saturatingAdd(timeMark.reading, duration))
}
@Suppress("ACTUAL_WITHOUT_EXPECT") // visibility
internal actual typealias DefaultTimeMarkReading = Long
internal actual typealias ValueTimeMarkReading = Long
+29 -25
View File
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@@ -31,18 +31,44 @@ public interface TimeSource {
*
* This time source returns its readings from a source of monotonic time when it is available in a target platform,
* and resorts to a non-monotonic time source otherwise.
*
* The function [markNow] of this time source returns the specialized [ValueTimeMark] that is an inline value class
* wrapping a platform-dependent time reading value.
*/
public object Monotonic : TimeSource {
override fun markNow(): DefaultTimeMark = MonotonicTimeSource.markNow()
override fun markNow(): ValueTimeMark = MonotonicTimeSource.markNow()
override fun toString(): String = MonotonicTimeSource.toString()
}
/**
* A specialized [kotlin.time.TimeMark] returned by [TimeSource.Monotonic].
*
* This time mark is implemented as an inline value class wrapping a platform-dependent
* time reading value of the default monotonic time source, thus allowing to avoid additional boxing
* of that value.
*
* The operations [plus] and [minus] are also specialized to return [ValueTimeMark] type.
*/
@ExperimentalTime
@SinceKotlin("1.7")
@JvmInline
public value class ValueTimeMark internal constructor(internal val reading: ValueTimeMarkReading) : TimeMark {
override fun elapsedNow(): Duration = MonotonicTimeSource.elapsedFrom(this)
override fun plus(duration: Duration): ValueTimeMark = MonotonicTimeSource.adjustReading(this, duration)
override fun minus(duration: Duration): ValueTimeMark = MonotonicTimeSource.adjustReading(this, -duration)
override fun hasPassedNow(): Boolean = !elapsedNow().isNegative()
override fun hasNotPassedNow(): Boolean = elapsedNow().isNegative()
}
}
public companion object {
}
}
/** A platform-specific reading type that is wrapped by [TimeSource.Monotonic.ValueTimeMark] inline class. */
internal expect class ValueTimeMarkReading
/**
* Represents a time point notched on a particular [TimeSource]. Remains bound to the time source it was taken from
* and allows querying for the duration of time elapsed from that point (see the function [elapsedNow]).
@@ -105,28 +131,6 @@ public interface TimeMark {
public fun hasNotPassedNow(): Boolean = elapsedNow().isNegative()
}
/**
* A specialized [TimeMark] returned by [TimeSource.Monotonic].
*
* This time mark is implemented as an inline value class wrapping a platform-dependent
* time reading value of the default monotonic time source, thus allowing to avoid additional boxing
* of that value.
*
* The operations [plus] and [minus] are also specialized to return [DefaultTimeMark] type.
*/
@ExperimentalTime
@SinceKotlin("1.7")
@JvmInline
public value class DefaultTimeMark internal constructor(internal val reading: DefaultTimeMarkReading) : TimeMark {
override fun elapsedNow(): Duration = MonotonicTimeSource.elapsedFrom(this)
override fun plus(duration: Duration): DefaultTimeMark = MonotonicTimeSource.adjustReading(this, duration)
override fun minus(duration: Duration): DefaultTimeMark = MonotonicTimeSource.adjustReading(this, -duration)
override fun hasPassedNow(): Boolean = !elapsedNow().isNegative()
override fun hasNotPassedNow(): Boolean = elapsedNow().isNegative()
}
internal expect class DefaultTimeMarkReading
@ExperimentalTime
@SinceKotlin("1.3")
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@@ -8,9 +8,9 @@ package kotlin.time
@SinceKotlin("1.3")
@ExperimentalTime
internal expect object MonotonicTimeSource : TimeSource {
override fun markNow(): DefaultTimeMark
fun elapsedFrom(timeMark: DefaultTimeMark): Duration
fun adjustReading(timeMark: DefaultTimeMark, duration: Duration): DefaultTimeMark
override fun markNow(): TimeSource.Monotonic.ValueTimeMark
fun elapsedFrom(timeMark: TimeSource.Monotonic.ValueTimeMark): Duration
fun adjustReading(timeMark: TimeSource.Monotonic.ValueTimeMark, duration: Duration): TimeSource.Monotonic.ValueTimeMark
}
/**
@@ -6,6 +6,7 @@
package kotlin.time
import kotlin.wasm.internal.ExternalInterfaceType
import kotlin.time.TimeSource.Monotonic.ValueTimeMark
@JsFun("() => typeof globalThis !== 'undefined' && typeof globalThis.performance !== 'undefined' ? globalThis.performance : null")
private external fun tryGetPerformance(): ExternalInterfaceType?
@@ -24,16 +25,16 @@ internal actual object MonotonicTimeSource : TimeSource {
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(sumCheckNaN(timeMark.reading as Double + duration.toDouble(DurationUnit.MILLISECONDS)))
actual override fun markNow(): ValueTimeMark = ValueTimeMark(read())
actual fun elapsedFrom(timeMark: ValueTimeMark): Duration = (read() - timeMark.reading as Double).milliseconds
actual fun adjustReading(timeMark: ValueTimeMark, duration: Duration): ValueTimeMark =
ValueTimeMark(sumCheckNaN(timeMark.reading as Double + duration.toDouble(DurationUnit.MILLISECONDS)))
override fun toString(): String =
if (performance != null) "TimeSource(globalThis.performance.now())" else "TimeSource(Date.now())"
}
@Suppress("ACTUAL_WITHOUT_EXPECT") // visibility
internal actual typealias DefaultTimeMarkReading = Double
internal actual typealias ValueTimeMarkReading = Double
private fun sumCheckNaN(value: Double): Double = value.also { if (it.isNaN()) throw IllegalArgumentException("Summing infinities of different signs") }
@@ -5767,30 +5767,6 @@ public abstract class kotlin/time/AbstractLongTimeSource : kotlin/time/TimeSourc
protected abstract fun read ()J
}
public final class kotlin/time/DefaultTimeMark : kotlin/time/TimeMark {
public static final synthetic fun box-impl (J)Lkotlin/time/DefaultTimeMark;
public fun elapsedNow-UwyO8pc ()J
public static fun elapsedNow-UwyO8pc (J)J
public fun equals (Ljava/lang/Object;)Z
public static fun equals-impl (JLjava/lang/Object;)Z
public static final fun equals-impl0 (JJ)Z
public fun hasNotPassedNow ()Z
public static fun hasNotPassedNow-impl (J)Z
public fun hasPassedNow ()Z
public static fun hasPassedNow-impl (J)Z
public fun hashCode ()I
public static fun hashCode-impl (J)I
public fun minus-LRDsOJo (J)J
public synthetic fun minus-LRDsOJo (J)Lkotlin/time/TimeMark;
public static fun minus-LRDsOJo (JJ)J
public fun plus-LRDsOJo (J)J
public synthetic fun plus-LRDsOJo (J)Lkotlin/time/TimeMark;
public static fun plus-LRDsOJo (JJ)J
public fun toString ()Ljava/lang/String;
public static fun toString-impl (J)Ljava/lang/String;
public final synthetic fun unbox-impl ()J
}
public final class kotlin/time/Duration : java/lang/Comparable {
public static final field Companion Lkotlin/time/Duration$Companion;
public static final synthetic fun box-impl (J)Lkotlin/time/Duration;
@@ -5964,10 +5940,34 @@ public final class kotlin/time/TimeSource$Companion {
public final class kotlin/time/TimeSource$Monotonic : kotlin/time/TimeSource {
public static final field INSTANCE Lkotlin/time/TimeSource$Monotonic;
public synthetic fun markNow ()Lkotlin/time/TimeMark;
public fun markNow-GKr6HC4 ()J
public fun markNow-z9LOYto ()J
public fun toString ()Ljava/lang/String;
}
public final class kotlin/time/TimeSource$Monotonic$ValueTimeMark : kotlin/time/TimeMark {
public static final synthetic fun box-impl (J)Lkotlin/time/TimeSource$Monotonic$ValueTimeMark;
public fun elapsedNow-UwyO8pc ()J
public static fun elapsedNow-UwyO8pc (J)J
public fun equals (Ljava/lang/Object;)Z
public static fun equals-impl (JLjava/lang/Object;)Z
public static final fun equals-impl0 (JJ)Z
public fun hasNotPassedNow ()Z
public static fun hasNotPassedNow-impl (J)Z
public fun hasPassedNow ()Z
public static fun hasPassedNow-impl (J)Z
public fun hashCode ()I
public static fun hashCode-impl (J)I
public fun minus-LRDsOJo (J)J
public synthetic fun minus-LRDsOJo (J)Lkotlin/time/TimeMark;
public static fun minus-LRDsOJo (JJ)J
public fun plus-LRDsOJo (J)J
public synthetic fun plus-LRDsOJo (J)Lkotlin/time/TimeMark;
public static fun plus-LRDsOJo (JJ)J
public fun toString ()Ljava/lang/String;
public static fun toString-impl (J)Ljava/lang/String;
public final synthetic fun unbox-impl ()J
}
public final class kotlin/time/TimedValue {
public synthetic fun <init> (Ljava/lang/Object;JLkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/Object;