@@ -475,7 +475,7 @@ impl Player {
475475 if self . recent_run_frame_timings . is_empty ( ) {
476476 5
477477 } else {
478- let frame_time = 1000.0 / self . frame_rate ;
478+ let frame_time = self . frame_time ( 1000.0 ) ;
479479 let average_run_frame_time = self . recent_run_frame_timings . iter ( ) . sum :: < f64 > ( )
480480 / self . recent_run_frame_timings . len ( ) as f64 ;
481481 ( ( frame_time / average_run_frame_time) as u32 ) . clamp ( 1 , MAX_FRAMES_PER_TICK )
@@ -489,11 +489,19 @@ impl Player {
489489 }
490490 }
491491
492+ fn frame_time ( & self , time_unit : f64 ) -> f64 {
493+ let frame_rate = self . frame_rate ;
494+ if frame_rate == 0.0 || frame_rate. is_nan ( ) {
495+ 0.0
496+ } else {
497+ time_unit / frame_rate
498+ }
499+ }
500+
492501 pub fn tick ( & mut self , dt : f64 ) {
493502 if self . is_playing ( ) {
494503 self . frame_accumulator += dt;
495- let frame_rate = self . frame_rate ;
496- let frame_time = 1000.0 / frame_rate;
504+ let frame_time = self . frame_time ( 1000.0 ) ;
497505
498506 let max_frames_per_tick = self . max_frames_per_tick ( ) ;
499507 let mut frame = 0 ;
@@ -556,7 +564,7 @@ impl Player {
556564 /// Returns the approximate duration of time until the next frame is due to run.
557565 /// This is only an approximation to be used for sleep durations.
558566 pub fn time_til_next_frame ( & self ) -> std:: time:: Duration {
559- let frame_time = 1000.0 / self . frame_rate ;
567+ let frame_time = self . frame_time ( 1000.0 ) ;
560568 let mut dt = if self . frame_accumulator <= 0.0 {
561569 frame_time
562570 } else if self . frame_accumulator >= frame_time {
@@ -1874,7 +1882,8 @@ impl Player {
18741882
18751883 #[ instrument( level = "debug" , skip_all) ]
18761884 pub fn run_frame ( & mut self ) {
1877- let frame_time = Duration :: from_nanos ( ( 750_000_000.0 / self . frame_rate ) as u64 ) ;
1885+ let frame_time = self . frame_time ( 750_000_000.0 ) ;
1886+ let frame_time = Duration :: from_nanos ( frame_time as u64 ) ;
18781887 let ( mut execution_limit, may_execute_while_streaming) = match self . load_behavior {
18791888 LoadBehavior :: Streaming => (
18801889 ExecutionLimit :: with_max_ops_and_time ( 10000 , frame_time) ,
0 commit comments