measure sleep delay in loop
This commit is contained in:
60
V2/sleep/src/main.rs
Normal file
60
V2/sleep/src/main.rs
Normal file
@@ -0,0 +1,60 @@
|
||||
extern crate shuteye;
|
||||
extern crate time;
|
||||
|
||||
use std::time::Duration;
|
||||
use shuteye::sleep;
|
||||
use time::precise_time_ns;
|
||||
|
||||
fn measure_duration(sleep_duration: Duration) -> Duration {
|
||||
let start = precise_time_ns();
|
||||
sleep(sleep_duration);
|
||||
let end = precise_time_ns();
|
||||
|
||||
let duration = end - start;
|
||||
Duration::new(duration / 1_000_000_000, (duration % 1_000_000_000) as u32)
|
||||
}
|
||||
|
||||
fn measure_delay(sleep_duration: Duration) -> (Duration, Duration) {
|
||||
let duration = measure_duration(sleep_duration);
|
||||
(duration, duration - sleep_duration)
|
||||
}
|
||||
|
||||
fn measure_delay_loop(sleep_duration: Duration, count: u64) -> Vec<(Duration, Duration)> {
|
||||
println!("Starting measurment with period {}s {}ns for {} loops",
|
||||
sleep_duration.as_secs(),
|
||||
sleep_duration.subsec_nanos(),
|
||||
count);
|
||||
let mut data: Vec<(Duration, Duration)> = Vec::with_capacity(count as usize);
|
||||
|
||||
for _ in 0..count {
|
||||
let (duration, delay) = measure_delay(sleep_duration);
|
||||
data.push((duration, delay));
|
||||
println!("value: {} s {} ns\tdelay: {} s {} ns\trelativ delay = {:.2}%\traw_data: {:?}",
|
||||
duration.as_secs(),
|
||||
duration.subsec_nanos(),
|
||||
delay.as_secs(),
|
||||
delay.subsec_nanos(),
|
||||
(delay.subsec_nanos() * 100) as f64 / duration.subsec_nanos() as f64,
|
||||
delay);
|
||||
}
|
||||
|
||||
data
|
||||
}
|
||||
|
||||
fn main() {
|
||||
println!("Hello, world!");
|
||||
|
||||
let data = measure_delay_loop(Duration::new(0, 10_000_000), 100);
|
||||
println!("{:?}", data);
|
||||
|
||||
/*let sleep_time = 5000;
|
||||
println!("sleep_time = {}", sleep_time);
|
||||
|
||||
let start = precise_time_ns();
|
||||
sleep(Duration::from_millis(5000));
|
||||
let end = precise_time_ns();
|
||||
let diff = end-start;
|
||||
|
||||
println!("start = {}ms\nend = {}\ndiff = {}", start, end, diff);
|
||||
println!("diff - sleep_time = {}", diff - sleep_time * 1000 * 1000);*/
|
||||
}
|
||||
Reference in New Issue
Block a user