aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorbrian cully <bjc@spork.org>2025-12-29 12:27:20 -0500
committerbrian cully <bjc@spork.org>2025-12-29 12:27:20 -0500
commitd4cb9d1f99ee2515b56bca0bb4ed3011b5d39d84 (patch)
treede52375f2f1c464da399a6f4f52f3d98328d2ce0 /src
parent33ff3488f89b3e89ed31780ff7ab72128abe5312 (diff)
downloadpolyring-d4cb9d1f99ee2515b56bca0bb4ed3011b5d39d84.tar.gz
polyring-d4cb9d1f99ee2515b56bca0bb4ed3011b5d39d84.zip
wasm: render bench results in html
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs42
-rw-r--r--src/render_loop.rs16
2 files changed, 41 insertions, 17 deletions
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<web_sys::HtmlCanvasElement> {
- 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<web_sys::HtmlElement> {
- 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<web_sys::HtmlElement> {
- 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<web_sys::HtmlInputElement> {
- 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<web_sys::HtmlElement> {
- 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<web_sys::HtmlElement> {
+ 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::<u32>().map_err(|_| "iters isn't int")?;
+ let iters = iters()?
+ .value()
+ .parse::<u32>()
+ .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::<f64>::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 }