From 5378626d85b69b53b79d2539dea9c8746af88616 Mon Sep 17 00:00:00 2001 From: brian cully Date: Mon, 29 Dec 2025 11:20:12 -0500 Subject: wasm: separate update/render for later benching --- src/render_loop.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'src/render_loop.rs') diff --git a/src/render_loop.rs b/src/render_loop.rs index 628e687..7056493 100644 --- a/src/render_loop.rs +++ b/src/render_loop.rs @@ -4,6 +4,8 @@ use std::rc::Rc; use log::error; use wasm_bindgen::prelude::*; +use crate::JSResult; + /// use `window.requestAnimationFrame()` to schedule calling a /// function as long as the function returns true. pub struct RenderLoop { @@ -21,7 +23,7 @@ impl RenderLoop { /// `fun` takes a timestamp in the same space as the document /// timeline and returns a flag specifying whether we should /// schedule another frame.. - pub fn new bool + 'static>(mut fun: T) -> Self { + pub fn new JSResult + 'static>(mut fun: T) -> Self { // init with stub closure because rust wants that, then change // it later once we have our rc clone. let inner = Rc::new(UnsafeCell::new(Closure::new(|_| {}))); @@ -29,11 +31,15 @@ impl RenderLoop { let rloop = inner.clone(); let f = unsafe { &mut *inner.get() }; *f = Closure::new(move |t| { - if fun(t) { - let cl = unsafe { &*rloop.get() }; - if let Err(e) = Self::request_animation_frame(cl) { - error!("couldn't request animation frame: {:?}", e); + match fun(t) { + Err(e) => error!("render callback error: {:?}", e), + Ok(true) => { + let cl = unsafe { &*rloop.get() }; + if let Err(e) = Self::request_animation_frame(cl) { + error!("couldn't request animation frame: {:?}", e); + } } + Ok(false) => {}, } }); -- cgit v1.3