Skip to content

VT parser: Vec::remove(0) in scroll_up is O(n) on hot path #98

@kirich1409

Description

@kirich1409

Описание

vt_parser.rsscroll_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

  • ScreenBuffer::gridVecDeque<Row>
  • scroll_up использует pop_front + push_back
  • scroll_down использует pop_back + push_front
  • insert_lines / delete_lines обновлены
  • Все существующие VT тесты проходят
  • cargo clippy -- -D warnings чисто

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions