From 30e66056506f6f5557fa6f29a83f64e5faac8937 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Wed, 28 Feb 2024 19:37:26 +0100 Subject: [PATCH] Run `UserInterface::update` only when events are present --- winit/src/application.rs | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/winit/src/application.rs b/winit/src/application.rs index 752d9c8d..b19a5517 100644 --- a/winit/src/application.rs +++ b/winit/src/application.rs @@ -499,21 +499,29 @@ async fn run_instance( continue; } - let interact_timer = debug::interact_time(window::Id::MAIN); - let (interface_state, statuses) = user_interface.update( - &events, - state.cursor(), - &mut renderer, - &mut clipboard, - &mut messages, - ); - interact_timer.finish(); + let interface_state = if events.is_empty() { + user_interface::State::Updated { + redraw_request: None, + } + } else { + let interact_timer = debug::interact_time(window::Id::MAIN); + let (interface_state, statuses) = user_interface.update( + &events, + state.cursor(), + &mut renderer, + &mut clipboard, + &mut messages, + ); - for (event, status) in - events.drain(..).zip(statuses.into_iter()) - { - runtime.broadcast(event, status); - } + for (event, status) in + events.drain(..).zip(statuses.into_iter()) + { + runtime.broadcast(event, status); + } + interact_timer.finish(); + + interface_state + }; if !messages.is_empty() || matches!(