Make TimeMark returned by TimeSource.Monotonic a value class

This value class wraps Long on JVM and Native thus reducing allocations
in time measurement scenarios when the default monotonic time source is
statically known.

KT-46132
This commit is contained in:
Ilya Gorbunov
2022-01-25 00:47:21 +03:00
committed by Space
parent 5b45ea9bc9
commit fede70d0d5
11 changed files with 281 additions and 49 deletions
+33 -6
View File
@@ -142,10 +142,18 @@ public inline operator fun kotlin.time.TimeMark.compareTo(other: kotlin.time.Tim
@kotlin.time.ExperimentalTime
public inline fun kotlin.time.TimeSource.measureTime(block: () -> kotlin.Unit): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.7")
@kotlin.time.ExperimentalTime
public inline fun kotlin.time.TimeSource.Monotonic.measureTime(block: () -> kotlin.Unit): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
public inline fun <T> kotlin.time.TimeSource.measureTimedValue(block: () -> T): kotlin.time.TimedValue<T>
@kotlin.SinceKotlin(version = "1.7")
@kotlin.time.ExperimentalTime
public inline fun <T> kotlin.time.TimeSource.Monotonic.measureTimedValue(block: () -> T): kotlin.time.TimedValue<T>
@kotlin.time.ExperimentalTime
@kotlin.SinceKotlin(version = "1.3")
@kotlin.internal.InlineOnly
@@ -198,6 +206,27 @@ 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
@@ -550,14 +579,12 @@ public final class TestTimeSource : kotlin.time.AbstractLongTimeSource {
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
public abstract class TimeMark {
public constructor TimeMark()
public interface TimeMark {
public abstract fun elapsedNow(): kotlin.time.Duration
public final fun hasNotPassedNow(): kotlin.Boolean
public open fun hasNotPassedNow(): kotlin.Boolean
public final fun hasPassedNow(): kotlin.Boolean
public open fun hasPassedNow(): kotlin.Boolean
public open operator fun minus(duration: kotlin.time.Duration): kotlin.time.TimeMark
@@ -573,7 +600,7 @@ public interface TimeSource {
}
public object Monotonic : kotlin.time.TimeSource {
public open override fun markNow(): kotlin.time.TimeMark
public open override fun markNow(): kotlin.time.DefaultTimeMark
public open override fun toString(): kotlin.String
}