Preserve alternate screen snapshots and speed builds
ci / test (push) Has been cancelled
ci / remote-bench (push) Has been cancelled

This commit is contained in:
DuProcess
2026-06-11 16:19:30 -04:00
parent 93a210b420
commit 1860a0e610
3 changed files with 77 additions and 7 deletions
+15 -4
View File
@@ -277,7 +277,7 @@ async fn handle_bootstrap_attach(
session.parser.set_size(req.rows, req.cols);
}
let client_id = crypto::random_16();
let snapshot = session.parser.screen().state_formatted();
let snapshot = screen_snapshot(session.parser.screen());
let screen = session.parser.screen().clone();
let output_seq = session.output_seq;
session.clients.insert(
@@ -385,7 +385,7 @@ async fn handle_ticket_attach(
session.parser.set_size(req.rows, req.cols);
}
let client_id = crypto::random_16();
let snapshot = session.parser.screen().state_formatted();
let snapshot = screen_snapshot(session.parser.screen());
let screen = session.parser.screen().clone();
let output_seq = session.output_seq;
session.clients.insert(
@@ -491,7 +491,7 @@ async fn handle_resume(
session.pty.resize(req.cols, req.rows)?;
session.parser.set_size(req.rows, req.cols);
}
let snapshot = session.parser.screen().state_formatted();
let snapshot = screen_snapshot(session.parser.screen());
client.last_screen = Some(session.parser.screen().clone());
(client.send_seq, session.output_seq, snapshot)
};
@@ -675,7 +675,7 @@ async fn broadcast_output(
let current_screen = session.parser.screen().clone();
let (bytes, snapshot) = if client.pending.len() >= retransmit_window {
client.pending.clear();
(current_screen.state_formatted(), true)
(screen_snapshot(&current_screen), true)
} else {
(output.bytes.clone(), false)
};
@@ -758,6 +758,17 @@ async fn broadcast_session_exit(
Ok(())
}
fn screen_snapshot(screen: &vt100::Screen) -> Vec<u8> {
let mut bytes = Vec::new();
if screen.alternate_screen() {
bytes.extend_from_slice(b"\x1b[?1049h");
} else {
bytes.extend_from_slice(b"\x1b[?1049l");
}
bytes.extend(screen.state_formatted());
bytes
}
async fn retransmit_pending(
state: &Arc<Mutex<ServerState>>,
socket: &Arc<UdpSocket>,