test(terminal): profile webgl render stages
This commit is contained in:
@@ -28,7 +28,7 @@ use super::mouse::{
|
||||
use super::protocol::{ClientTerminalMessage, ServerTerminalMessage};
|
||||
use super::renderer::{
|
||||
CanvasDomState, CanvasPlanInput, CanvasSurfaceFrame, CanvasSurfaceMode,
|
||||
RenderCanvasSurfaceRequest, WebGlContextLifecycle, WebGlRendererState,
|
||||
RenderCanvasSurfaceRequest, WebGlContextLifecycle, WebGlRenderStats, WebGlRendererState,
|
||||
attach_webgl_context_lifecycle, canvas_render_plan, render_canvas_surface, render_webgl,
|
||||
set_canvas_surface_mode, webgl_surface_mode,
|
||||
};
|
||||
@@ -235,7 +235,7 @@ pub struct TerminalSelectionEvent {
|
||||
pub end: Option<(usize, usize)>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
||||
#[derive(Clone, Copy, Debug, PartialEq)]
|
||||
pub struct TerminalRenderEvent {
|
||||
pub cols: u16,
|
||||
pub rows: u16,
|
||||
@@ -243,6 +243,7 @@ pub struct TerminalRenderEvent {
|
||||
pub screen_rows: usize,
|
||||
pub mode: ViewMode,
|
||||
pub renderer: Renderer,
|
||||
pub webgl_stats: Option<WebGlRenderStats>,
|
||||
}
|
||||
|
||||
type SerializeFn = Arc<dyn Fn() -> String + Send + Sync>;
|
||||
@@ -514,6 +515,7 @@ pub fn TerminalPanel(
|
||||
let selecting = RwSignal::new(false);
|
||||
let search_match = RwSignal::new(None::<TerminalSearchMatch>);
|
||||
let search_query = RwSignal::new(String::new());
|
||||
let last_webgl_stats = RwSignal::new(None::<WebGlRenderStats>);
|
||||
|
||||
// IME composition state: when true, regular `input` events are ignored and
|
||||
// the final composed string is sent on `compositionend`.
|
||||
@@ -624,6 +626,7 @@ pub fn TerminalPanel(
|
||||
screen_rows: core.screen_rows().len(),
|
||||
mode,
|
||||
renderer,
|
||||
webgl_stats: last_webgl_stats.get_untracked(),
|
||||
}) {
|
||||
on_render.run(event);
|
||||
}
|
||||
@@ -921,15 +924,14 @@ pub fn TerminalPanel(
|
||||
};
|
||||
match renderer {
|
||||
Renderer::WebGl => {
|
||||
if render_webgl(
|
||||
if let Ok(stats) = render_webgl(
|
||||
canvas_el,
|
||||
frame,
|
||||
&canvas_state,
|
||||
&webgl_state,
|
||||
&webgl_context_lost,
|
||||
)
|
||||
.is_ok()
|
||||
{
|
||||
) {
|
||||
last_webgl_stats.set(Some(stats));
|
||||
set_canvas_surface_mode(
|
||||
canvas_el,
|
||||
fallback_canvas_el,
|
||||
@@ -941,6 +943,7 @@ pub fn TerminalPanel(
|
||||
fallback_canvas_el,
|
||||
webgl_surface_mode(false),
|
||||
);
|
||||
last_webgl_stats.set(None);
|
||||
render_canvas_surface(RenderCanvasSurfaceRequest {
|
||||
canvas_el: fallback_canvas_el,
|
||||
frame,
|
||||
@@ -949,6 +952,7 @@ pub fn TerminalPanel(
|
||||
}
|
||||
}
|
||||
Renderer::Canvas => {
|
||||
last_webgl_stats.set(None);
|
||||
set_canvas_surface_mode(canvas_el, fallback_canvas_el, CanvasSurfaceMode::WebGl);
|
||||
render_canvas_surface(RenderCanvasSurfaceRequest {
|
||||
canvas_el,
|
||||
@@ -956,7 +960,9 @@ pub fn TerminalPanel(
|
||||
canvas_state: &canvas_state,
|
||||
});
|
||||
}
|
||||
Renderer::Dom => {}
|
||||
Renderer::Dom => {
|
||||
last_webgl_stats.set(None);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user