From 7abe363e75ea02b3803eca55f8f95faa7ad0f8c4 Mon Sep 17 00:00:00 2001 From: Franco Colmenarez Date: Sat, 20 Nov 2021 20:52:56 -0500 Subject: [PATCH] Calculating frames delay in microseconds --- src/frames.rs | 13 ++++++------- src/render.rs | 16 ++++++++-------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/frames.rs b/src/frames.rs index 53f33cb..40137a8 100644 --- a/src/frames.rs +++ b/src/frames.rs @@ -14,7 +14,7 @@ impl Frames { count: 0, timer: Instant::now(), time_start: 0, - fps: 1000 / 63, + fps: 16600, } } @@ -23,7 +23,7 @@ impl Frames { } pub fn reset_timer(&mut self) { - self.time_start = self.timer.elapsed().as_millis(); + self.timer = Instant::now(); } pub fn increment(&mut self) { @@ -38,13 +38,12 @@ impl Frames { self.count } - pub fn limit(&mut self) { - let elapsed = self.elapsed_ms(); - // println!("{}", elapsed); + pub fn limit(&self) { + let elapsed = self.timer.elapsed().as_micros(); if elapsed > self.fps { - // println!("Frame dropped"); return; } - thread::sleep(time::Duration::from_millis((self.fps - elapsed).try_into().unwrap())); + let wait = (self.fps - elapsed).try_into().unwrap(); + thread::sleep(time::Duration::from_micros(wait)); } } diff --git a/src/render.rs b/src/render.rs index 28a8e00..5257f75 100644 --- a/src/render.rs +++ b/src/render.rs @@ -42,7 +42,7 @@ pub fn create_window(width: u32, height: u32, title: String, event_loop: &Eve pub fn start_eventloop() { let mut emulator = Emulator::new(); - let mut frames = Frames::new(); + let mut frame_counter = Frames::new(); let mut frame_limit = Frames::new(); env_logger::init(); @@ -81,16 +81,16 @@ pub fn start_eventloop() { *control_flow = ControlFlow::Exit }, Event::MainEventsCleared => { - frame_limit.reset_timer(); emulator.run(Cycles(70224), pixels.get_frame()); - frames.increment(); - window.request_redraw(); - if frames.elapsed_ms() >= 1000 { - window.set_title(&format!("rmg-001 (FPS: {})", frames.count())); - frames.reset_count(); - frames.reset_timer(); + frame_counter.increment(); + if frame_counter.elapsed_ms() >= 1000 { + window.set_title(&format!("rmg-001 (FPS: {})", frame_counter.count())); + frame_counter.reset_count(); + frame_counter.reset_timer(); } + window.request_redraw(); frame_limit.limit(); + frame_limit.reset_timer(); }, Event::RedrawRequested(_) => { if pixels