From d4cb9d1f99ee2515b56bca0bb4ed3011b5d39d84 Mon Sep 17 00:00:00 2001 From: brian cully Date: Mon, 29 Dec 2025 12:27:20 -0500 Subject: wasm: render bench results in html --- site/index.html | 1 + src/lib.rs | 42 ++++++++++++++++++++++++++++++++++-------- src/render_loop.rs | 16 +++++++--------- 3 files changed, 42 insertions(+), 17 deletions(-) diff --git a/site/index.html b/site/index.html index e978b31..97b5997 100644 --- a/site/index.html +++ b/site/index.html @@ -24,6 +24,7 @@

bench

+

diff --git a/src/lib.rs b/src/lib.rs index 60fdc0f..3644638 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,5 @@ -use std::{cell::RefCell, rc::Rc}; use std::sync::Mutex; +use std::{cell::RefCell, rc::Rc}; use log::{Level, debug, info}; use wasm_bindgen::prelude::*; @@ -25,27 +25,44 @@ fn document() -> web_sys::Document { } fn canvas() -> JSResult { - let x = document().query_selector("section.watch canvas")?.ok_or("no canvas")?; + let x = document() + .query_selector("section.watch canvas")? + .ok_or("no canvas")?; Ok(x.dyn_into()?) } fn fps() -> JSResult { - let x = document().query_selector("section.watch .fps")?.ok_or("no fps counter")?; + let x = document() + .query_selector("section.watch .fps")? + .ok_or("no fps counter")?; Ok(x.dyn_into()?) } fn go() -> JSResult { - let x = document().query_selector("section.watch button")?.ok_or("no go button")?; + let x = document() + .query_selector("section.watch button")? + .ok_or("no go button")?; Ok(x.dyn_into()?) } fn iters() -> JSResult { - let x = document().query_selector("section.bench input")?.ok_or("no go button")?; + let x = document() + .query_selector("section.bench input")? + .ok_or("no iters input")?; Ok(x.dyn_into()?) } fn bench() -> JSResult { - let x = document().query_selector("section.bench button")?.ok_or("no go button")?; + let x = document() + .query_selector("section.bench button")? + .ok_or("no bench button")?; + Ok(x.dyn_into()?) +} + +fn results() -> JSResult { + let x = document() + .query_selector("section.bench .results")? + .ok_or("no results element")?; Ok(x.dyn_into()?) } @@ -91,7 +108,10 @@ pub fn init() -> JSResult<()> { let bench_handler: HandlerClosure = Closure::new(move |e| { debug!("bench clicked {:?}", e); - let iters = iters()?.value().parse::().map_err(|_| "iters isn't int")?; + let iters = iters()? + .value() + .parse::() + .map_err(|_| "iters isn't int")?; let mut s = s1.borrow_mut(); let perf = window().performance().unwrap(); @@ -103,7 +123,13 @@ pub fn init() -> JSResult<()> { let delta = end - start; let iters_per_ms = Into::::into(iters) / delta; - info!("bench done. {iters} iters in {delta} ms ({iters_per_ms} iters per ms)"); + results()?.set_text_content(Some( + format!( + "{} iters in {:0.2} ms ({:0.2} iters per ms)", + iters, delta, iters_per_ms + ) + .as_str(), + )); Ok(()) }); bench()?.set_onclick(Some(bench_handler.as_ref().unchecked_ref())); diff --git a/src/render_loop.rs b/src/render_loop.rs index 7056493..2dd0f9d 100644 --- a/src/render_loop.rs +++ b/src/render_loop.rs @@ -30,17 +30,15 @@ impl RenderLoop { let rloop = inner.clone(); let f = unsafe { &mut *inner.get() }; - *f = Closure::new(move |t| { - 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); - } + *f = Closure::new(move |t| 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) => {}, } + Ok(false) => {} }); Self { inner } -- cgit v1.3