use super::*;
#[test]
#[ignore = "release-mode transcript projection measurement; run with --release --ignored --nocapture"]
fn transcript_projection_and_thinking_measurement() {
let mut state = MissionControlState::default();
for index in 0..500 {
state.transcript.push_back(format!(
"assistant: entry {index} {}",
"wrapped ".repeat(40)
));
}
let _ = visible_scrollback_visual_lines(&state, 80, 20, 200);
reset_project_entry_count_for_profiling();
let started = std::time::Instant::now();
for _ in 0..100 {
let _ = visible_scrollback_visual_lines(&state, 80, 20, 200);
}
eprintln!(
"transcript_cache unchanged_frames=100 elapsed_us={} projected_cards={} entry_hash_bytes=0 shared_cards=true backend=projection physical_terminal=false",
started.elapsed().as_micros(),
project_entry_count_for_profiling()
);
for (label, width, focus) in [
(
"narrow_prompt_focus",
40,
crate::tui::state::TuiFocusPane::Prompt,
),
(
"wide_transcript_focus",
120,
crate::tui::state::TuiFocusPane::Transcript,
),
] {
state.focus_pane = focus;
let started = std::time::Instant::now();
let visible = visible_scrollback_visual_lines(&state, width, 20, 200);
eprintln!(
"transcript_scenario name={} elapsed_us={} visible_lines={} width={} backend=projection physical_terminal=false",
label,
started.elapsed().as_micros(),
visible.lines.len(),
width
);
}
state.start_selection(
crate::tui::layout::TuiPane::Transcript,
crate::tui::selection::TextPosition::new(0, 0, 0),
);
state.update_selection(
crate::tui::layout::TuiPane::Transcript,
crate::tui::selection::TextPosition::new(20, 0, 20),
);
let started = std::time::Instant::now();
let selected = crate::tui::transcript_projection::visible_transcript_lines(&state, 80, 20);
eprintln!(
"transcript_scenario name=selection elapsed_us={} visible_lines={} width=80 backend=projection physical_terminal=false",
started.elapsed().as_micros(),
selected.lines.len()
);
let mut streaming = MissionControlState::default();
let started = std::time::Instant::now();
reset_project_entry_count_for_profiling();
for _ in 0..100 {
streaming.apply_output_event(&OutputEvent::ThinkingSummaryDelta { text: "x".into() });
let _ = visible_scrollback_visual_lines(&streaming, 80, 20, 0);
}
eprintln!(
"transcript_thinking deltas=100 elapsed_us={} projected_cards={} appended_bytes={} backend=projection physical_terminal=false",
started.elapsed().as_micros(),
project_entry_count_for_profiling(),
streaming.thinking_append_work_bytes
);
}