@@ -54,11 +54,11 @@ class ChromeTraceTest:
54
54
val testStart = System .nanoTime()
55
55
testTraceOutputs{ tracer =>
56
56
tracer.traceDurationEventStart(cat = " test1" , name = " event1" )
57
- LockSupport .parkNanos (2 .millis.toNanos )
57
+ sleep (2 .millis)
58
58
tracer.traceDurationEventStart(cat = " test2" , name = " event2" , colour = " RED" , pidSuffix = " pid-suffix" )
59
- LockSupport .parkNanos (4 .millis.toNanos )
59
+ sleep (4 .millis)
60
60
tracer.traceDurationEventEnd(cat = " test2" , name = " event2" )
61
- LockSupport .parkNanos (8 .millis.toNanos )
61
+ sleep (8 .millis)
62
62
tracer.traceDurationEventEnd(cat = " test1" , name = " event1" , colour = " RED" , pidSuffix = " pid-suffix" )
63
63
}{
64
64
case """ {"traceEvents":[""" ::
@@ -89,5 +89,18 @@ class ChromeTraceTest:
89
89
assertTrue(ts4 >= ts3 + 8 .millis.toMicros)
90
90
case _ => fail(" unreachable" )
91
91
}
92
+ }
93
+ }
94
+
95
+ private def sleep (duration : FiniteDuration ): Unit = {
96
+ // A bit of additional precautions to ensure we don't continue execution to early
97
+ // Both LockSuppport and Thread.sleep can return earlier then expected (depending on OS)
98
+ var remainingNanos = duration.toNanos
99
+ val deadline = System .nanoTime() + remainingNanos
100
+ while
101
+ remainingNanos = deadline - System .nanoTime()
102
+ remainingNanos > 0
103
+ do
104
+ val millis = NANOSECONDS .toMillis(remainingNanos)
105
+ Thread .sleep(millis, (remainingNanos % 1 .millis.toNanos).toInt)
92
106
}
93
- }
0 commit comments