From 7fb9f9d9749d270b3beea1202de3d678cac28fb8 Mon Sep 17 00:00:00 2001 From: Michael Francis Date: Tue, 18 Aug 2020 21:51:12 -0400 Subject: [PATCH 1/2] Changes ScheduleRunnerPlugin RunMode::Loop to run on fixed interval --- crates/bevy_app/src/schedule_runner.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/crates/bevy_app/src/schedule_runner.rs b/crates/bevy_app/src/schedule_runner.rs index 605eb8713995f..5f990362e430c 100644 --- a/crates/bevy_app/src/schedule_runner.rs +++ b/crates/bevy_app/src/schedule_runner.rs @@ -4,7 +4,7 @@ use crate::{ event::{EventReader, Events}, plugin::Plugin, }; -use std::{thread, time::Duration}; +use std::{thread, time::Duration, time::Instant}; /// Determines the method used to run an [App]'s `Schedule` #[derive(Copy, Clone, Debug)] @@ -51,6 +51,8 @@ impl Plugin for ScheduleRunnerPlugin { app.schedule.run(&mut app.world, &mut app.resources); } RunMode::Loop { wait } => loop { + let start_time = Instant::now(); + if let Some(app_exit_events) = app.resources.get_mut::>() { if app_exit_event_reader.latest(&app_exit_events).is_some() { break; @@ -65,8 +67,13 @@ impl Plugin for ScheduleRunnerPlugin { } } + let end_time = Instant::now(); + if let Some(wait) = wait { - thread::sleep(wait); + let exe_time = end_time - start_time; + if exe_time < wait { + thread::sleep(wait - exe_time); + } } }, } From a0f5fd91ab0d17e37e1c41d479921949df39ae8a Mon Sep 17 00:00:00 2001 From: Michael Francis Date: Tue, 18 Aug 2020 22:08:29 -0400 Subject: [PATCH 2/2] fix formatting --- crates/bevy_app/src/schedule_runner.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crates/bevy_app/src/schedule_runner.rs b/crates/bevy_app/src/schedule_runner.rs index 5f990362e430c..68bce06b51f00 100644 --- a/crates/bevy_app/src/schedule_runner.rs +++ b/crates/bevy_app/src/schedule_runner.rs @@ -4,7 +4,10 @@ use crate::{ event::{EventReader, Events}, plugin::Plugin, }; -use std::{thread, time::Duration, time::Instant}; +use std::{ + thread, + time::{Duration, Instant}, +}; /// Determines the method used to run an [App]'s `Schedule` #[derive(Copy, Clone, Debug)]