use criterion::{criterion_group, criterion_main, Bencher, BenchmarkId, Criterion}; use rand::Rng; use ratatui::{ buffer::Buffer, layout::Rect, widgets::{Sparkline, Widget}, }; /// Benchmark for rendering a sparkline. fn sparkline(c: &mut Criterion) { let mut group = c.benchmark_group("sparkline"); let mut rng = rand::thread_rng(); for data_count in [64, 256, 2048] { let data: Vec = (0..data_count) .map(|_| rng.gen_range(0..data_count)) .collect(); // Render a basic sparkline group.bench_with_input( BenchmarkId::new("render", data_count), &Sparkline::default().data(&data), render, ); } group.finish(); } /// render the block into a buffer of the given `size` fn render(bencher: &mut Bencher, sparkline: &Sparkline) { let mut buffer = Buffer::empty(Rect::new(0, 0, 200, 50)); // We use `iter_batched` to clone the value in the setup function. // See https://github.com/ratatui-org/ratatui/pull/377. bencher.iter_batched( || sparkline.clone(), |bench_sparkline| { bench_sparkline.render(buffer.area, &mut buffer); }, criterion::BatchSize::LargeInput, ); } criterion_group!(benches, sparkline); criterion_main!(benches);