diff --git a/bench/Cargo.toml b/bench/Cargo.toml index 6bc5ec2..8181ed3 100644 --- a/bench/Cargo.toml +++ b/bench/Cargo.toml @@ -10,7 +10,7 @@ bench = false [dependencies] tui-textarea = { path = "..", features = ["no-backend", "search"] } -ratatui = { version = "0.23.0", default-features = false } +ratatui = { version = ">=0.23.0", default-features = false } [dev-dependencies] criterion = "0.5" diff --git a/bench/benches/insert.rs b/bench/benches/insert.rs index 84b014f..cecbbad 100644 --- a/bench/benches/insert.rs +++ b/bench/benches/insert.rs @@ -62,6 +62,27 @@ fn random_lorem(repeat: usize) -> usize { textarea.lines().len() } +#[inline] +fn append_long_lorem(repeat: usize) -> usize { + let mut textarea = TextArea::default(); + let mut term = dummy_terminal(); + + for _ in 0..repeat { + for line in LOREM { + for c in line.chars() { + textarea.input(Input { + key: Key::Char(c), + ctrl: false, + alt: false, + }); + term.draw_textarea(&textarea); + } + } + } + + textarea.lines().len() +} + fn append(c: &mut Criterion) { c.bench_function("insert::append::1_lorem", |b| { b.iter(|| black_box(append_lorem(1))) @@ -86,5 +107,17 @@ fn random(c: &mut Criterion) { }); } -criterion_group!(insert, append, random); +fn long(c: &mut Criterion) { + c.bench_function("insert::long::1_lorem", |b| { + b.iter(|| black_box(append_long_lorem(1))) + }); + c.bench_function("insert::long::5_lorem", |b| { + b.iter(|| black_box(append_long_lorem(5))) + }); + c.bench_function("insert::long::10_lorem", |b| { + b.iter(|| black_box(append_long_lorem(10))) + }); +} + +criterion_group!(insert, append, random, long); criterion_main!(insert); diff --git a/bench/src/lib.rs b/bench/src/lib.rs index 5160032..92b2b24 100644 --- a/bench/src/lib.rs +++ b/bench/src/lib.rs @@ -1,9 +1,9 @@ // We use empty backend for our benchmark instead of tui::backend::TestBackend to make impact of benchmark from tui-rs // as small as possible. -use ratatui::backend::Backend; +use ratatui::backend::{Backend, WindowSize}; use ratatui::buffer::Cell; -use ratatui::layout::Rect; +use ratatui::layout::{Rect, Size}; use ratatui::Terminal; use std::io; use tui_textarea::TextArea; @@ -84,6 +84,20 @@ impl Backend for DummyBackend { }) } + #[inline] + fn window_size(&mut self) -> Result { + Ok(WindowSize { + columns_rows: Size { + width: self.width, + height: self.height, + }, + pixels: Size { + width: self.width * 6, + height: self.height * 12, + }, + }) + } + #[inline] fn flush(&mut self) -> Result<(), io::Error> { Ok(())