From ab2f1c7d03bea30794078a9327efcf2a631ed43d Mon Sep 17 00:00:00 2001 From: Keeley Hoek Date: Tue, 12 May 2020 03:03:15 +1000 Subject: [PATCH] Don't busy-redraw in examples --- examples/framework.rs | 26 ++++++++++++++++++++++++-- examples/hello-triangle/main.rs | 1 - 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/examples/framework.rs b/examples/framework.rs index cfba525afd..fbb31aad23 100644 --- a/examples/framework.rs +++ b/examples/framework.rs @@ -1,3 +1,4 @@ +use std::time; use winit::{ event::{self, WindowEvent}, event_loop::{ControlFlow, EventLoop}, @@ -100,16 +101,37 @@ async fn run_async(event_loop: EventLoop<()>, window: Window) { queue.submit(init_command_buf); } + #[cfg(not(target_arch = "wasm32"))] + let mut last_update_inst = time::Instant::now(); + log::info!("Entering render loop..."); event_loop.run(move |event, _, control_flow| { let _ = (&instance, &adapter); // force ownership by the closure *control_flow = if cfg!(feature = "metal-auto-capture") { ControlFlow::Exit } else { - ControlFlow::Poll + #[cfg(not(target_arch = "wasm32"))] + { + ControlFlow::WaitUntil(time::Instant::now() + time::Duration::from_millis(10)) + } + #[cfg(target_arch = "wasm32")] + { + ControlFlow::Poll + } }; match event { - event::Event::MainEventsCleared => window.request_redraw(), + event::Event::MainEventsCleared => { + #[cfg(not(target_arch = "wasm32"))] + { + if last_update_inst.elapsed() > time::Duration::from_millis(20) { + window.request_redraw(); + last_update_inst = time::Instant::now(); + } + } + + #[cfg(target_arch = "wasm32")] + window.request_redraw(); + } event::Event::WindowEvent { event: WindowEvent::Resized(size), .. diff --git a/examples/hello-triangle/main.rs b/examples/hello-triangle/main.rs index 6f62cdeeb5..2b44bb8e85 100644 --- a/examples/hello-triangle/main.rs +++ b/examples/hello-triangle/main.rs @@ -100,7 +100,6 @@ async fn run(event_loop: EventLoop<()>, window: Window, swapchain_format: wgpu:: *control_flow = ControlFlow::Poll; match event { - Event::MainEventsCleared => window.request_redraw(), Event::WindowEvent { event: WindowEvent::Resized(size), ..