Fix crash when using Duration::MAX (#4900)
# Objective If you set the `ReactiveLowPower` max wait to `Duration::MAX`, stuff panics. Fix that. ## Solution Wait forever if addition failed.
This commit is contained in:
parent
f487407e07
commit
9976ecb810
@ -591,7 +591,11 @@ pub fn winit_runner_with(mut app: App) {
|
|||||||
*control_flow = match winit_config.update_mode(focused) {
|
*control_flow = match winit_config.update_mode(focused) {
|
||||||
Continuous => ControlFlow::Poll,
|
Continuous => ControlFlow::Poll,
|
||||||
Reactive { max_wait } | ReactiveLowPower { max_wait } => {
|
Reactive { max_wait } | ReactiveLowPower { max_wait } => {
|
||||||
ControlFlow::WaitUntil(now + *max_wait)
|
if let Some(instant) = now.checked_add(*max_wait) {
|
||||||
|
ControlFlow::WaitUntil(instant)
|
||||||
|
} else {
|
||||||
|
ControlFlow::Wait
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -68,7 +68,12 @@ pub enum UpdateMode {
|
|||||||
/// Once the app has executed all bevy systems and reaches the end of the event loop, there is
|
/// Once the app has executed all bevy systems and reaches the end of the event loop, there is
|
||||||
/// no way to force the app to wake and update again, unless a `winit` event (such as user
|
/// no way to force the app to wake and update again, unless a `winit` event (such as user
|
||||||
/// input, or the window being resized) is received or the time limit is reached.
|
/// input, or the window being resized) is received or the time limit is reached.
|
||||||
Reactive { max_wait: Duration },
|
Reactive {
|
||||||
|
/// The maximum time to wait before the event loop runs again.
|
||||||
|
///
|
||||||
|
/// Note that Bevy will wait indefinitely if the duration is too high (such as [`Duration::MAX`]).
|
||||||
|
max_wait: Duration,
|
||||||
|
},
|
||||||
/// The event loop will only update if there is a winit event from direct interaction with the
|
/// The event loop will only update if there is a winit event from direct interaction with the
|
||||||
/// window (e.g. mouseover), a redraw is requested, or the maximum wait time has elapsed.
|
/// window (e.g. mouseover), a redraw is requested, or the maximum wait time has elapsed.
|
||||||
///
|
///
|
||||||
@ -85,5 +90,10 @@ pub enum UpdateMode {
|
|||||||
/// window is not focused, to only re-draw your bevy app when the cursor is over the window, but
|
/// window is not focused, to only re-draw your bevy app when the cursor is over the window, but
|
||||||
/// not when the mouse moves somewhere else on the screen. This helps to significantly reduce
|
/// not when the mouse moves somewhere else on the screen. This helps to significantly reduce
|
||||||
/// power consumption by only updated the app when absolutely necessary.
|
/// power consumption by only updated the app when absolutely necessary.
|
||||||
ReactiveLowPower { max_wait: Duration },
|
ReactiveLowPower {
|
||||||
|
/// The maximum time to wait before the event loop runs again.
|
||||||
|
///
|
||||||
|
/// Note that Bevy will wait indefinitely if the duration is too high (such as [`Duration::MAX`]).
|
||||||
|
max_wait: Duration,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user