@@ -54,11 +54,11 @@ class ChromeTraceTest:
5454 val testStart = System .nanoTime()
5555 testTraceOutputs{ tracer =>
5656 tracer.traceDurationEventStart(cat = " test1" , name = " event1" )
57- LockSupport .parkNanos (2 .millis.toNanos )
57+ sleep (2 .millis)
5858 tracer.traceDurationEventStart(cat = " test2" , name = " event2" , colour = " RED" , pidSuffix = " pid-suffix" )
59- LockSupport .parkNanos (4 .millis.toNanos )
59+ sleep (4 .millis)
6060 tracer.traceDurationEventEnd(cat = " test2" , name = " event2" )
61- LockSupport .parkNanos (8 .millis.toNanos )
61+ sleep (8 .millis)
6262 tracer.traceDurationEventEnd(cat = " test1" , name = " event1" , colour = " RED" , pidSuffix = " pid-suffix" )
6363 }{
6464 case """ {"traceEvents":[""" ::
@@ -89,5 +89,18 @@ class ChromeTraceTest:
8989 assertTrue(ts4 >= ts3 + 8 .millis.toMicros)
9090 case _ => fail(" unreachable" )
9191 }
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)
92106 }
93- }
0 commit comments