test(terminal): add renderer bench smoke script

This commit is contained in:
zhangheng
2026-06-24 14:13:09 +08:00
parent f4c919de40
commit 21019d82e0
7 changed files with 465 additions and 3 deletions

View File

@@ -18,6 +18,7 @@ leptos.workspace = true
leptos_axum = { workspace = true, optional = true }
leptos_meta.workspace = true
leptos_router.workspace = true
js-sys.workspace = true
log.workspace = true
redis = { workspace = true, optional = true }
reqwest = { workspace = true, optional = true }

View File

@@ -1,16 +1,89 @@
use leptos::prelude::*;
use crate::components::layout::{AdminShell, Breadcrumb};
use crate::terminal::TerminalPanel;
use crate::terminal::{TerminalPanel, TerminalRenderEvent};
#[component]
pub fn TerminalPage() -> impl IntoView {
let on_render = Callback::new(update_terminal_bench_probe);
view! {
<AdminShell>
<Breadcrumb current="浏览器终端" />
<section class="cowa-work-surface terminal-page-shell">
<TerminalPanel />
<TerminalPanel on_render=on_render />
</section>
</AdminShell>
}
}
#[cfg(target_arch = "wasm32")]
fn update_terminal_bench_probe(event: TerminalRenderEvent) {
use wasm_bindgen::JsValue;
let Some(window) = web_sys::window() else {
return;
};
let Ok(probe) = js_sys::Reflect::get(&window, &JsValue::from_str("__terminalBench")) else {
return;
};
let probe = if probe.is_object() {
probe
} else {
let object = js_sys::Object::new();
let _ = js_sys::Reflect::set(&window, &JsValue::from_str("__terminalBench"), &object);
object.into()
};
let count = js_sys::Reflect::get(&probe, &JsValue::from_str("renderCount"))
.ok()
.and_then(|value| value.as_f64())
.unwrap_or(0.0)
+ 1.0;
let mode = if event.mode.is_live() {
"live"
} else {
"history"
};
let renderer = format!("{:?}", event.renderer);
let _ = js_sys::Reflect::set(
&probe,
&JsValue::from_str("renderCount"),
&JsValue::from_f64(count),
);
let _ = js_sys::Reflect::set(
&probe,
&JsValue::from_str("lastRenderAt"),
&JsValue::from_f64(js_sys::Date::now()),
);
let _ = js_sys::Reflect::set(
&probe,
&JsValue::from_str("renderer"),
&JsValue::from_str(&renderer),
);
let _ = js_sys::Reflect::set(&probe, &JsValue::from_str("mode"), &JsValue::from_str(mode));
let _ = js_sys::Reflect::set(
&probe,
&JsValue::from_str("cols"),
&JsValue::from_f64(f64::from(event.cols)),
);
let _ = js_sys::Reflect::set(
&probe,
&JsValue::from_str("rows"),
&JsValue::from_f64(f64::from(event.rows)),
);
let _ = js_sys::Reflect::set(
&probe,
&JsValue::from_str("historyRows"),
&JsValue::from_f64(event.history_rows as f64),
);
let _ = js_sys::Reflect::set(
&probe,
&JsValue::from_str("screenRows"),
&JsValue::from_f64(event.screen_rows as f64),
);
}
#[cfg(not(target_arch = "wasm32"))]
fn update_terminal_bench_probe(_event: TerminalRenderEvent) {}