test(terminal): profile webgl render stages
This commit is contained in:
@@ -115,6 +115,7 @@ fn update_terminal_bench_probe(event: TerminalRenderEvent) {
|
||||
"history"
|
||||
};
|
||||
let renderer = format!("{:?}", event.renderer);
|
||||
let webgl_stats = event.webgl_stats;
|
||||
|
||||
let _ = js_sys::Reflect::set(
|
||||
&probe,
|
||||
@@ -152,6 +153,61 @@ fn update_terminal_bench_probe(event: TerminalRenderEvent) {
|
||||
&JsValue::from_str("screenRows"),
|
||||
&JsValue::from_f64(event.screen_rows as f64),
|
||||
);
|
||||
if let Some(stats) = webgl_stats {
|
||||
append_webgl_stats(&probe, stats);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
fn append_webgl_stats(probe: &wasm_bindgen::JsValue, stats: crate::terminal::WebGlRenderStats) {
|
||||
use wasm_bindgen::JsValue;
|
||||
|
||||
let frames = match js_sys::Reflect::get(probe, &JsValue::from_str("webglFrames")) {
|
||||
Ok(value) if js_sys::Array::is_array(&value) => js_sys::Array::from(&value),
|
||||
_ => {
|
||||
let array = js_sys::Array::new();
|
||||
let _ = js_sys::Reflect::set(probe, &JsValue::from_str("webglFrames"), &array);
|
||||
array
|
||||
}
|
||||
};
|
||||
|
||||
let frame = js_sys::Object::new();
|
||||
set_f64(&frame, "totalMs", stats.total_ms);
|
||||
set_f64(&frame, "syncDomMs", stats.sync_dom_ms);
|
||||
set_f64(&frame, "backdropMs", stats.backdrop_ms);
|
||||
set_f64(&frame, "collectMs", stats.collect_ms);
|
||||
set_f64(&frame, "backdropTextureMs", stats.backdrop_texture_ms);
|
||||
set_f64(&frame, "fallbackCanvasMs", stats.fallback_canvas_ms);
|
||||
set_f64(&frame, "atlasMs", stats.atlas_ms);
|
||||
set_f64(&frame, "atlasUploadMs", stats.atlas_upload_ms);
|
||||
set_f64(&frame, "vertexBuildMs", stats.vertex_build_ms);
|
||||
set_f64(&frame, "vertexUploadMs", stats.vertex_upload_ms);
|
||||
set_f64(&frame, "drawMs", stats.draw_ms);
|
||||
set_f64(&frame, "cells", stats.cells as f64);
|
||||
set_f64(&frame, "atlasEntries", stats.atlas_entries as f64);
|
||||
set_f64(&frame, "atlasInsertions", stats.atlas_insertions as f64);
|
||||
set_f64(&frame, "atlasResets", stats.atlas_resets as f64);
|
||||
set_bool(&frame, "fallbackFullCanvas", stats.fallback_full_canvas);
|
||||
set_bool(&frame, "glyphDrawFailed", stats.glyph_draw_failed);
|
||||
|
||||
frames.push(&frame);
|
||||
while frames.length() > 720 {
|
||||
frames.shift();
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
fn set_f64(target: &js_sys::Object, key: &str, value: f64) {
|
||||
use wasm_bindgen::JsValue;
|
||||
|
||||
let _ = js_sys::Reflect::set(target, &JsValue::from_str(key), &JsValue::from_f64(value));
|
||||
}
|
||||
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
fn set_bool(target: &js_sys::Object, key: &str, value: bool) {
|
||||
use wasm_bindgen::JsValue;
|
||||
|
||||
let _ = js_sys::Reflect::set(target, &JsValue::from_str(key), &JsValue::from_bool(value));
|
||||
}
|
||||
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
|
||||
Reference in New Issue
Block a user