Skip to content

Commit f1b51c6

Browse files
hfhbde5l
andauthored
Replace custom time handling with kotlin.time.TimeSource (#260)
* Replace custom time handling with kotlin.time.TimeSource * Use hashcode --------- Co-authored-by: hfhbd <hfhbd@users.noreply.github.com> Co-authored-by: Leonid Stashevsky <e5l@users.noreply.github.com>
1 parent 074bc1e commit f1b51c6

File tree

9 files changed

+21
-76
lines changed

9 files changed

+21
-76
lines changed

api/kotlinx-html.api

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5177,10 +5177,6 @@ public final class kotlinx/html/UtilKt {
51775177
public static final fun styleLink (Lkotlinx/html/HEAD;Ljava/lang/String;)V
51785178
}
51795179

5180-
public final class kotlinx/html/UtilsImpl_jvmKt {
5181-
public static final fun currentTimeMillis ()J
5182-
}
5183-
51845180
public class kotlinx/html/VAR : kotlinx/html/HTMLTag, kotlinx/html/HtmlBlockInlineTag {
51855181
public fun <init> (Ljava/util/Map;Lkotlinx/html/TagConsumer;)V
51865182
public fun getConsumer ()Lkotlinx/html/TagConsumer;
@@ -5360,8 +5356,9 @@ public final class kotlinx/html/consumers/Finalize_consumerKt {
53605356
}
53615357

53625358
public final class kotlinx/html/consumers/Measure_consumerKt {
5363-
public static final fun getOut (Lkotlinx/html/consumers/TimedResult;)Ljava/lang/Appendable;
5364-
public static final fun measureTime (Lkotlinx/html/TagConsumer;)Lkotlinx/html/TagConsumer;
5359+
public static final fun getOut (Lkotlin/time/TimedValue;)Ljava/lang/Appendable;
5360+
public static final fun measureTime (Lkotlinx/html/TagConsumer;Lkotlin/time/TimeSource;)Lkotlinx/html/TagConsumer;
5361+
public static synthetic fun measureTime$default (Lkotlinx/html/TagConsumer;Lkotlin/time/TimeSource;ILjava/lang/Object;)Lkotlinx/html/TagConsumer;
53655362
}
53665363

53675364
public final class kotlinx/html/consumers/PredicateResult : java/lang/Enum {
@@ -5380,19 +5377,6 @@ public final class kotlinx/html/consumers/PredicateResults {
53805377
public final fun getSKIP ()Lkotlinx/html/consumers/PredicateResult;
53815378
}
53825379

5383-
public final class kotlinx/html/consumers/TimedResult {
5384-
public fun <init> (Ljava/lang/Object;J)V
5385-
public final fun component1 ()Ljava/lang/Object;
5386-
public final fun component2 ()J
5387-
public final fun copy (Ljava/lang/Object;J)Lkotlinx/html/consumers/TimedResult;
5388-
public static synthetic fun copy$default (Lkotlinx/html/consumers/TimedResult;Ljava/lang/Object;JILjava/lang/Object;)Lkotlinx/html/consumers/TimedResult;
5389-
public fun equals (Ljava/lang/Object;)Z
5390-
public final fun getResult ()Ljava/lang/Object;
5391-
public final fun getTime ()J
5392-
public fun hashCode ()I
5393-
public fun toString ()Ljava/lang/String;
5394-
}
5395-
53965380
public final class kotlinx/html/consumers/TraceConsumer : kotlinx/html/TagConsumer {
53975381
public fun <init> (Lkotlinx/html/TagConsumer;Lkotlin/jvm/functions/Function1;)V
53985382
public fun finalize ()Ljava/lang/Object;

src/commonMain/kotlin/measure-consumer.kt

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,12 @@ package kotlinx.html.consumers
22

33
import kotlinx.html.*
44
import kotlinx.html.org.w3c.dom.events.Event
5+
import kotlin.time.*
56

6-
data class TimedResult<T>(val result: T, val time: Long)
7-
8-
val <O : Appendable> TimedResult<O>.out: O
9-
get() = result
10-
11-
private class TimeMeasureConsumer<R>(val downstream: TagConsumer<R>) : TagConsumer<TimedResult<R>> {
12-
private val start = currentTimeMillis()
7+
val <O : Appendable> TimedValue<O>.out: O
8+
get() = value
139

10+
private class TimeMeasureConsumer<R>(val downstream: TagConsumer<R>, val start: TimeMark) : TagConsumer<TimedValue<R>> {
1411
override fun onTagStart(tag: Tag) {
1512
downstream.onTagStart(tag)
1613
}
@@ -43,7 +40,7 @@ private class TimeMeasureConsumer<R>(val downstream: TagConsumer<R>) : TagConsum
4340
downstream.onTagComment(content)
4441
}
4542

46-
override fun finalize(): TimedResult<R> = TimedResult(downstream.finalize(), currentTimeMillis() - start)
43+
override fun finalize(): TimedValue<R> = TimedValue(downstream.finalize(), start.elapsedNow())
4744
}
4845

49-
fun <R> TagConsumer<R>.measureTime(): TagConsumer<TimedResult<R>> = TimeMeasureConsumer(this)
46+
fun <R> TagConsumer<R>.measureTime(timeSource: TimeSource = TimeSource.Monotonic): TagConsumer<TimedValue<R>> = TimeMeasureConsumer(this, timeSource.markNow())

src/commonMain/kotlin/trace-consumer.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package kotlinx.html.consumers
33
import kotlinx.html.*
44

55
class TraceConsumer<R>(val downstream: TagConsumer<R>, val println: (String) -> Unit) : TagConsumer<R> by downstream {
6-
private val id = "ID-${currentTimeMillis() % 16384}"
6+
private val id = "ID-${hashCode()}"
77
private val path = ArrayList<String>(1024)
88

99
override fun onTagStart(tag: Tag) {

src/commonMain/kotlin/util.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,3 @@ val Tag.br: Unit
1313
consumer.onTagStart(tag)
1414
consumer.onTagEnd(tag)
1515
}
16-
17-
expect fun currentTimeMillis(): Long

src/jsMain/kotlin/utilsImpl-js.kt

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/jvmMain/kotlin/utilsImpl-jvm.kt

Lines changed: 0 additions & 3 deletions
This file was deleted.

src/jvmTest/kotlin/streaming.kt

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import kotlinx.html.consumers.*
55
import kotlinx.html.stream.*
66
import java.io.*
77
import kotlin.test.*
8+
import kotlin.time.*
89

910
class TestStreaming {
1011
@Test fun `we should be able to construct at least simple things`() {
@@ -233,29 +234,23 @@ class TestStreaming {
233234
val count = 1000
234235
val builder = StringBuilder(26 * (count + 1)).appendHTML(false)
235236

236-
var minStart: Long
237-
var maxStart = 0L
238-
var minEnd = 0L
239-
var maxEnd: Long
237+
val timeSource = TimeSource.Monotonic
238+
val now = timeSource.markNow()
239+
var measuredDuration = Duration.INFINITE
240240

241-
minStart = currentTimeMillis()
242-
val rs = builder.measureTime().div {
243-
maxStart = currentTimeMillis()
241+
val rs = builder.measureTime(timeSource = timeSource).div {
242+
val measuredStart = timeSource.markNow()
244243
for (i in 1..count) {
245244
div {
246245
p { +"node$i" }
247246
}
248247
}
249-
minEnd = currentTimeMillis()
248+
measuredDuration = measuredStart.elapsedNow()
250249
}
251-
maxEnd = currentTimeMillis()
250+
val realDuration = now.elapsedNow()
252251

253-
val maxTime = maxEnd - minStart
254-
val minTime = minEnd - maxStart
255-
256-
val errorMessage = "Expected time should be between $minTime and $maxTime ms, but actual is ${rs.time} ms"
257-
assertTrue(errorMessage) { rs.time >= minTime }
258-
assertTrue(errorMessage) { rs.time <= maxTime }
252+
val errorMessage = "Expected time should be between $measuredDuration and $realDuration, but actual is ${rs.duration}"
253+
assertTrue(errorMessage) { rs.duration in measuredDuration..realDuration }
259254

260255
val expected = StringBuilder().apply {
261256
append("<div>")
@@ -268,7 +263,7 @@ class TestStreaming {
268263
append("</div>")
269264
}
270265

271-
assertEquals(expected.toString(), rs.result.toString())
266+
assertEquals(expected.toString(), rs.value.toString())
272267
}
273268

274269
@Test fun `escape bad chars`() {

src/nativeMain/kotlin/utilNative.kt

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/wasmJsMain/kotlin/utilsImpl-js.kt

Lines changed: 0 additions & 8 deletions
This file was deleted.

0 commit comments

Comments
 (0)