magi-code 0.96.1

Repository-aware CLI coding agent for terminal work
Documentation
//! Modal viewport profiling against the full-document ScrollView path.

use super::super::*;
use ratatui::{
    Terminal,
    backend::TestBackend,
    widgets::{Paragraph, Wrap},
};
use std::cell::RefCell;
use tui_scrollview::ScrollViewState;

fn draw_reference(
    frame: &mut Frame<'_>,
    area: Rect,
    text: &str,
    scroll: &RefCell<ScrollViewState>,
    theme: MissionControlTheme,
) {
    let height = usize_to_u16_saturating(crate::tui::transcript::ratatui_wrapped_visual_rows(
        text,
        scroll_view_content_width(area).max(1),
    ));
    render_scroll_view_persistent_state_with_theme(
        frame,
        area,
        height,
        Paragraph::new(text.to_owned())
            .style(theme.pane())
            .wrap(Wrap { trim: false }),
        scroll,
        theme,
    );
}

fn large_text(label: &str) -> String {
    let mut text = String::new();
    for index in 0..400 {
        text.push_str(&format!(
            "{label}-{index:04}  keep   spaces\tand words 界 👩‍💻 e\u{301}\u{a0}together\r\n\
             \n    indented policy: abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ  \n"
        ));
    }
    text.push_str("Last message line\n\n");
    text
}

#[test]
#[ignore = "manual modal scrolling workload, not physical terminal latency; run with --release --ignored --nocapture"]
fn text_modal_large_document_workload() {
    let text = large_text("system-prompt").repeat(4);
    let scroll = RefCell::new(ScrollViewState::default());
    let theme = MissionControlTheme::default();
    let mut terminal = Terminal::new(TestBackend::new(120, 40)).unwrap();
    let mut viewport_times = Vec::new();
    let mut reference_times = Vec::new();
    for offset in [0, 100, u16::MAX].into_iter().cycle().take(21) {
        scroll.borrow_mut().set_offset(Position::new(0, offset));
        let start = std::time::Instant::now();
        terminal
            .draw(|frame| {
                render_text_scroll_view_with_theme(frame, frame.area(), &text, &scroll, theme);
            })
            .unwrap();
        viewport_times.push(start.elapsed().as_micros());
        let start = std::time::Instant::now();
        terminal
            .draw(|frame| {
                draw_reference(frame, frame.area(), &text, &scroll, theme);
            })
            .unwrap();
        reference_times.push(start.elapsed().as_micros());
    }
    viewport_times.sort_unstable();
    reference_times.sort_unstable();
    eprintln!(
        "text_modal_large_document frames=21 viewport_median_us={} full_reference_median_us={} width=120 height=40 physical_terminal=false",
        viewport_times[10], reference_times[10],
    );
}