use std::num;
use std::sync;
use std::sync::atomic;
use std::time;
fn main() {
let stop = sync::Arc::new(atomic::AtomicBool::new(false));
let is_stopped = stop.clone();
ctrlc::set_handler(move || stop.store(true, atomic::Ordering::SeqCst))
.expect("Error setting Ctrl-C handler");
println!("Press Ctrl-C to quit.");
let start = time::Instant::now();
let updates_per_second = num::NonZeroU32::new(10).unwrap();
let frames_per_second = num::NonZeroU32::new(6).unwrap();
let clock = chron::Clock::new(updates_per_second)
.max_frame_rate(frames_per_second)
.max_updates_per_frame(10);
let mut updates = 0;
let mut renders = 0;
for tick in clock {
if is_stopped.load(atomic::Ordering::SeqCst) {
break;
}
match tick {
chron::Tick::Update => {
updates += 1;
println!("update {:?}", start.elapsed());
}
chron::Tick::Render { interpolation } => {
renders += 1;
println!("render {:?}, {interpolation}", start.elapsed());
}
}
}
let elapsed = start.elapsed();
println!();
println!("elapsed: {:?}", elapsed);
println!(
"updates/s: {:?}, total: {:?}",
updates as f32 / elapsed.as_secs_f32(),
updates,
);
println!(
"frames/s: {:?}, total: {:?}",
renders as f32 / elapsed.as_secs_f32(),
renders,
);
}