1
0
mirror of https://github.com/emilk/egui.git synced 2026-09-02 06:40:06 -04:00

Improve next_repaint_time

This commit is contained in:
Konkitoman
2023-11-13 15:38:52 +02:00
parent 7c251a599c
commit c32d035a46

View File

@@ -160,7 +160,6 @@ fn run_and_return(
log::debug!("Entering the winit event loop (run_return)…"); log::debug!("Entering the winit event loop (run_return)…");
let mut windows_next_repaint_times = HashMap::default(); let mut windows_next_repaint_times = HashMap::default();
let mut next_repaint_time = Option::<Instant>::None;
let mut returned_result = Ok(()); let mut returned_result = Ok(());
@@ -278,20 +277,18 @@ fn run_and_return(
windows_next_repaint_times.remove(window_id); windows_next_repaint_times.remove(window_id);
} }
control_flow.set_poll(); control_flow.set_poll();
} else {
next_repaint_time = Some(
next_repaint_time.map_or(*repaint_time, |last| last.min(*repaint_time)),
);
} }
} }
} }
let next_repaint_time = windows_next_repaint_times.values().min();
if let Some(next_repaint_time) = next_repaint_time { if let Some(next_repaint_time) = next_repaint_time {
let time_until_next = next_repaint_time.saturating_duration_since(Instant::now()); let time_until_next = next_repaint_time.saturating_duration_since(Instant::now());
if time_until_next < std::time::Duration::from_secs(10_000) { if time_until_next < std::time::Duration::from_secs(10_000) {
log::trace!("WaitUntil {time_until_next:?}"); log::trace!("WaitUntil {time_until_next:?}");
} }
control_flow.set_wait_until(next_repaint_time); control_flow.set_wait_until(*next_repaint_time);
}; };
}); });
@@ -318,7 +315,6 @@ fn run_and_exit(event_loop: EventLoop<UserEvent>, mut winit_app: impl WinitApp +
log::debug!("Entering the winit event loop (run)…"); log::debug!("Entering the winit event loop (run)…");
let mut windows_next_repaint_times = HashMap::default(); let mut windows_next_repaint_times = HashMap::default();
let mut next_repaint_time = Option::<Instant>::None;
event_loop.run(move |event, event_loop, control_flow| { event_loop.run(move |event, event_loop, control_flow| {
crate::profile_scope!("winit_event", short_event_description(&event)); crate::profile_scope!("winit_event", short_event_description(&event));
@@ -411,14 +407,12 @@ fn run_and_exit(event_loop: EventLoop<UserEvent>, mut winit_app: impl WinitApp +
windows_next_repaint_times.remove(window_id); windows_next_repaint_times.remove(window_id);
} }
control_flow.set_poll(); control_flow.set_poll();
} else {
next_repaint_time = Some(
next_repaint_time.map_or(*repaint_time, |last| last.min(*repaint_time)),
);
} }
} }
} }
let next_repaint_time = windows_next_repaint_times.values().min();
if let Some(next_repaint_time) = next_repaint_time { if let Some(next_repaint_time) = next_repaint_time {
let time_until_next = next_repaint_time.saturating_duration_since(Instant::now()); let time_until_next = next_repaint_time.saturating_duration_since(Instant::now());
if time_until_next < std::time::Duration::from_secs(10_000) { if time_until_next < std::time::Duration::from_secs(10_000) {
@@ -435,7 +429,7 @@ fn run_and_exit(event_loop: EventLoop<UserEvent>, mut winit_app: impl WinitApp +
.map(|window| window.request_redraw()) .map(|window| window.request_redraw())
}); });
control_flow.set_wait_until(next_repaint_time); control_flow.set_wait_until(*next_repaint_time);
}; };
}) })
} }