core: Add max frames-per-tick as sanity

Avoid running too many frames at once.
This commit is contained in:
Mike Welsh 2019-08-22 13:31:24 -07:00
parent 3933b00000
commit c1b8978555
1 changed files with 11 additions and 1 deletions

View File

@ -134,9 +134,19 @@ impl<Audio: AudioBackend, Renderer: RenderBackend> Player<Audio, Renderer> {
let frame_time = 1000.0 / self.frame_rate;
let needs_render = self.frame_accumulator >= frame_time;
while self.frame_accumulator >= frame_time {
const MAX_FRAMES_PER_TICK: u32 = 5; // Sanity cap on frame tick.
let mut frame = 0;
while frame < MAX_FRAMES_PER_TICK && self.frame_accumulator >= frame_time {
self.frame_accumulator -= frame_time;
self.run_frame();
frame += 1;
}
// Sanity: If we had too many frames to tick, just reset the accumulator
// to prevent running at turbo speed.
if self.frame_accumulator >= frame_time {
self.frame_accumulator = 0.0;
}
if needs_render {