Saturate overflowing values when adjusting time marks

KT-46132
This commit is contained in:
Ilya Gorbunov
2022-02-20 08:31:09 +03:00
committed by Space
parent f32e0f3cba
commit 77cf41c189
7 changed files with 194 additions and 14 deletions
@@ -27,11 +27,13 @@ internal actual object MonotonicTimeSource : TimeSource {
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))
DefaultTimeMark(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 DefaultTimeMarkReading = Double
private fun sumCheckNaN(value: Double): Double = value.also { if (it.isNaN()) throw IllegalArgumentException("Summing infinities of different signs") }