From 8125f8ebd7e05baac594c9cf33b924670c3f9125 Mon Sep 17 00:00:00 2001 From: ImBenji Date: Sun, 23 Nov 2025 18:02:30 +0000 Subject: [PATCH] Improve preciseSleep function for Windows with hybrid sleep strategy and logging --- dart/lib/helpers.dart | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/dart/lib/helpers.dart b/dart/lib/helpers.dart index 7cdbfe4..8622f55 100644 --- a/dart/lib/helpers.dart +++ b/dart/lib/helpers.dart @@ -230,12 +230,24 @@ extension SweepstoreDateTimeHelper on DateTime { const Duration _windowsMinSleepTime = Duration(milliseconds: 16); void preciseSleep(Duration duration) { - if (Platform.isWindows && duration < _windowsMinSleepTime) { - // Busy-wait for short durations on Windows - final end = DateTime.now().add(duration); - while (DateTime.now().isBefore(end)) {} + final stopwatch = Stopwatch()..start(); + + if (Platform.isWindows) { + if (duration < _windowsMinSleepTime) { + // Pure busy-wait for very short durations + final end = DateTime.now().add(duration); + while (DateTime.now().isBefore(end)) {} + } else { + // Hybrid: sleep most of it, busy-wait the remainder + final sleepDuration = duration - _windowsMinSleepTime; + sleep(sleepDuration); + final end = DateTime.now().add(_windowsMinSleepTime); + while (DateTime.now().isBefore(end)) {} + } } else { - // Use normal sleep for longer durations or on Unix sleep(duration); } + + stopwatch.stop(); + print('preciseSleep: requested ${duration.inMicroseconds}μs, actual ${stopwatch.elapsedMicroseconds}μs, diff ${stopwatch.elapsedMicroseconds - duration.inMicroseconds}μs'); } \ No newline at end of file