diff options
Diffstat (limited to 'src/server/render_stream.rs')
| -rw-r--r-- | src/server/render_stream.rs | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/server/render_stream.rs b/src/server/render_stream.rs index 3548f98a..97baf38d 100644 --- a/src/server/render_stream.rs +++ b/src/server/render_stream.rs @@ -45,8 +45,10 @@ impl ClientRenderState { match self { Self::Semantic { last_frame } => { if last_frame.as_ref() == Some(frame) { + crate::render_prof::event("prepare_frame.semantic.skip_current"); return None; } + crate::render_prof::event("prepare_frame.semantic.changed"); Some(PreparedRender { message: ServerMessage::Frame(frame.clone()), encoded: None, @@ -54,10 +56,22 @@ impl ClientRenderState { } Self::TerminalAnsi { blit_encoder, seq } => { if blit_encoder.is_current(frame) { + crate::render_prof::event("prepare_frame.ansi.skip_current"); return None; } let mut encoded = blit_encoder.encode(frame, false); + crate::render_prof::event("prepare_frame.ansi.changed"); + crate::render_prof::counter("prepare_frame.ansi.bytes", encoded.bytes.len() as u64); + if encoded.full { + crate::render_prof::event("prepare_frame.ansi.full"); + } else { + crate::render_prof::event("prepare_frame.ansi.partial"); + } insert_graphics_before_sync_end(&mut encoded.bytes, &frame.graphics); + crate::render_prof::counter( + "prepare_frame.graphics.bytes", + frame.graphics.len() as u64, + ); Some(PreparedRender { message: ServerMessage::Terminal(TerminalFrame { seq: *seq + 1, @@ -72,6 +86,13 @@ impl ClientRenderState { } } + pub(crate) fn last_frame(&self) -> Option<&FrameData> { + match self { + Self::Semantic { last_frame } => last_frame.as_ref(), + Self::TerminalAnsi { blit_encoder, .. } => blit_encoder.last_frame(), + } + } + pub(crate) fn commit_sent_frame(&mut self, frame: FrameData, prepared: PreparedRender) { match (self, prepared.encoded) { (Self::Semantic { last_frame }, None) => *last_frame = Some(frame), @@ -316,7 +337,7 @@ pub(crate) fn visible_hyperlinks( links } -fn focused_terminal_cursor( +pub(crate) fn focused_terminal_cursor( app_state: &AppState, terminal_runtimes: &TerminalRuntimeRegistry, ) -> Option<CursorState> { |
