Описание
vt_parser.rs — scroll_up() использует Vec::remove(0), что сдвигает все элементы влево — O(rows) на каждую прокрутку строки. На 24-строчном терминале это 24 перемещения элементов на каждый newline в нижней строке. Аналогично scroll_down() использует Vec::insert(0, ...). insert_lines и delete_lines имеют ту же O(n²) проблему.
Это hot path — вызывается внутри VT mutex в read_loop при каждом скролле.
Module: runner/src/vt_parser.rs
Fix
Заменить ScreenBuffer::grid с Vec<Row> на VecDeque<Row>:
scroll_up: pop_front() + push_back() — O(1)
scroll_down: pop_back() + push_front() — O(1)
VecDeque поддерживает индексацию grid[i], call sites не меняются
Acceptance Criteria
Описание
vt_parser.rs—scroll_up()используетVec::remove(0), что сдвигает все элементы влево — O(rows) на каждую прокрутку строки. На 24-строчном терминале это 24 перемещения элементов на каждый newline в нижней строке. Аналогичноscroll_down()используетVec::insert(0, ...).insert_linesиdelete_linesимеют ту же O(n²) проблему.Это hot path — вызывается внутри VT mutex в read_loop при каждом скролле.
Module:
runner/src/vt_parser.rsFix
Заменить
ScreenBuffer::gridсVec<Row>наVecDeque<Row>:scroll_up:pop_front()+push_back()— O(1)scroll_down:pop_back()+push_front()— O(1)VecDequeподдерживает индексациюgrid[i], call sites не меняютсяAcceptance Criteria
ScreenBuffer::grid—VecDeque<Row>scroll_upиспользуетpop_front+push_backscroll_downиспользуетpop_back+push_frontinsert_lines/delete_linesобновленыcargo clippy -- -D warningsчисто