From e5436a54a6af336cdfdcebea4bf7c08013eb007a Mon Sep 17 00:00:00 2001 From: Guillaume Lagrange Date: Fri, 7 Nov 2025 14:11:48 +0100 Subject: [PATCH] fix(divan): use busy sleep in time scale examples For these times, using `thread::sleep` makes no sense as, at least on linux, the scheduler's timer resolution is orders of magnitude larger than nanoseconds. --- crates/divan_compat/examples/benches/time_scale.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/crates/divan_compat/examples/benches/time_scale.rs b/crates/divan_compat/examples/benches/time_scale.rs index c4c8baa7..05f314e1 100644 --- a/crates/divan_compat/examples/benches/time_scale.rs +++ b/crates/divan_compat/examples/benches/time_scale.rs @@ -2,24 +2,29 @@ fn main() { divan::main(); } +fn busy_sleep(duration: std::time::Duration) { + let start = std::time::Instant::now(); + while start.elapsed() < duration {} +} + #[divan::bench] fn sleep_1ns() { - std::thread::sleep(std::time::Duration::from_nanos(1)); + busy_sleep(std::time::Duration::from_nanos(1)); } #[divan::bench] fn sleep_100ns() { - std::thread::sleep(std::time::Duration::from_nanos(100)); + busy_sleep(std::time::Duration::from_nanos(100)); } #[divan::bench] fn sleep_1us() { - std::thread::sleep(std::time::Duration::from_micros(1)); + busy_sleep(std::time::Duration::from_micros(1)); } #[divan::bench] fn sleep_100us() { - std::thread::sleep(std::time::Duration::from_micros(100)); + busy_sleep(std::time::Duration::from_micros(100)); } #[divan::bench]