feat: clean up main function

This commit is contained in:
Nova
2023-05-19 18:11:52 -04:00
parent cac2be7a4f
commit c4234becb9

View File

@@ -220,26 +220,13 @@ fn main() -> Result<()> {
} }
input::process_input(); input::process_input();
nodes::root::Root::send_frame_events(sk.time_elapsed_unscaled()); nodes::root::Root::send_frame_events(sk.time_elapsed_unscaled());
{ adaptive_sleep(
let frame_delta = Duration::from_secs_f64(sk.time_elapsed_unscaled()); sk,
if last_frame_delta < frame_delta { &mut last_frame_delta,
if let Some(frame_delta_delta) = frame_delta.checked_sub(last_frame_delta) { &mut sleep_duration,
if let Some(new_sleep_duration) = Duration::from_micros(250),
sleep_duration.checked_sub(frame_delta_delta) );
{
sleep_duration = new_sleep_duration;
}
}
} else {
sleep_duration += Duration::from_micros(250);
}
debug_span!("Sleep", ?sleep_duration, ?frame_delta, ?last_frame_delta)
.in_scope(|| {
last_frame_delta = frame_delta;
std::thread::sleep(sleep_duration); // to give clients a chance to even update anything before drawing
});
}
#[cfg(feature = "wayland")] #[cfg(feature = "wayland")]
wayland.update(sk); wayland.update(sk);
drawable::draw(sk); drawable::draw(sk);
@@ -264,6 +251,29 @@ fn main() -> Result<()> {
Ok(()) Ok(())
} }
fn adaptive_sleep(
sk: &impl StereoKitMultiThread,
last_frame_delta: &mut Duration,
sleep_duration: &mut Duration,
sleep_duration_increase: Duration,
) {
let frame_delta = Duration::from_secs_f64(sk.time_elapsed_unscaled());
if *last_frame_delta < frame_delta {
if let Some(frame_delta_delta) = frame_delta.checked_sub(*last_frame_delta) {
if let Some(new_sleep_duration) = sleep_duration.checked_sub(frame_delta_delta) {
*sleep_duration = new_sleep_duration;
}
}
} else {
*sleep_duration += sleep_duration_increase;
}
debug_span!("Sleep", ?sleep_duration, ?frame_delta, ?last_frame_delta).in_scope(|| {
*last_frame_delta = frame_delta;
std::thread::sleep(*sleep_duration); // to give clients a chance to even update anything before drawing
});
}
#[tokio::main] #[tokio::main]
// #[tokio::main(flavor = "current_thread")] // #[tokio::main(flavor = "current_thread")]
async fn event_loop( async fn event_loop(