1
0
зеркало из https://github.com/glebtv/tui-textarea.git synced 2026-08-28 11:36:17 +03:00
Files
tui-textarea/bench/benches/insert_random.rs
srothgan 19151a4076 chore(bench): restructure into focused targets, add runner, and tune slow cases (#10)
- Upgrade Criterion 0.5 → 0.8.2
- Split 4 broad bench files into 14 focused targets
- Add Rust runner binary with per-target start/done logging
- Add wrap_render benchmarks (all 4 WrapMode variants × 2 sizes)
- Add undo_redo benchmarks (undo/redo × 3 history depths)
- Apply benchmark_group + SamplingMode::Flat + reduced sample_size on slow insert cases to cut total run time from ~28 min to ~12 min
- Rewrite bench/README.md to document runner, targets, and workflow
2026-02-19 09:22:09 +10:00

68 строки
1.9 KiB
Rust
Исходник Постоянная ссылка Ответственный История

Этот файл содержит неоднозначные символы Юникода
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
use criterion::{criterion_group, criterion_main, Criterion, SamplingMode};
use rand::rngs::SmallRng;
use rand::{Rng, SeedableRng};
use tui_textarea::{CursorMove, Input, Key, TextArea};
use tui_textarea_bench::{dummy_terminal, TerminalExt, LOREM, SEED};
#[inline]
fn random_lorem(repeat: usize) -> usize {
let mut rng = SmallRng::from_seed(SEED);
let mut textarea = TextArea::default();
let mut term = dummy_terminal();
for _ in 0..repeat {
for line in LOREM {
let row = rng.gen_range(0..textarea.lines().len() as u16);
textarea.move_cursor(CursorMove::Jump(row, 0));
textarea.move_cursor(CursorMove::End);
textarea.input(Input {
key: Key::Enter,
ctrl: false,
alt: false,
shift: false,
});
term.draw_textarea(&textarea);
for c in line.chars() {
textarea.input(Input {
key: Key::Char(c),
ctrl: false,
alt: false,
shift: false,
});
term.draw_textarea(&textarea);
}
}
}
textarea.lines().len()
}
fn bench(c: &mut Criterion) {
let mut group = c.benchmark_group("insert::random");
// ~23ms/iter — fits 100 samples in ~5s, keep defaults
group.bench_function("1_lorem", |b| {
b.iter(|| std::hint::black_box(random_lorem(1)))
});
// ~419ms/iter — 20 samples × 419ms ≈ 8s
group.sampling_mode(SamplingMode::Flat);
group.sample_size(20);
group.bench_function("10_lorem", |b| {
b.iter(|| std::hint::black_box(random_lorem(10)))
});
// ~2.1s/iter — 10 samples × 2.1s ≈ 21s
group.sample_size(10);
group.bench_function("50_lorem", |b| {
b.iter(|| std::hint::black_box(random_lorem(50)))
});
group.finish();
}
criterion_group!(insert_random, bench);
criterion_main!(insert_random);