Want to profile some Rust code in the browser? No problem! You can use the
performance.now() API and friends to get timing information to see how long
things take.
#![allow(unused)]fnmain() {
use std::time::{Duration, SystemTime, UNIX_EPOCH};
use wasm_bindgen::prelude::*;
// lifted from the `console_log` example#[wasm_bindgen]extern"C" {
#[wasm_bindgen(js_namespace = console)]fnlog(a: &str);
}
macro_rules! console_log {
($($t:tt)*) => (log(&format_args!($($t)*).to_string()))
}
#[wasm_bindgen(start)]fnrun() {
let window = web_sys::window().expect("should have a window in this context");
let performance = window
.performance()
.expect("performance should be available");
console_log!("the current time (in ms) is {}", performance.now());
let start = perf_to_system(performance.timing().request_start());
let end = perf_to_system(performance.timing().response_end());
console_log!("request started at {}", humantime::format_rfc3339(start));
console_log!("request ended at {}", humantime::format_rfc3339(end));
}
fnperf_to_system(amt: f64) -> SystemTime {
let secs = (amt asu64) / 1_000;
let nanos = (((amt asu64) % 1_000) asu32) * 1_000_000;
UNIX_EPOCH + Duration::new(secs, nanos)
}
}