mirror of
https://github.com/ratatui-org/ratatui
synced 2024-11-14 08:57:20 +00:00
5ad623c29b
This helps make the doc examples more explicit about what is being used. It will also makes it a bit easier to do future refactoring of Ratatui, into several crates, as the ambiguity of where types are coming from will be reduced. Additionally, several doc examples have been simplified to use Stylize, and necessary imports are no longer hidden. This doesn't remove the prelude. Only the internal usages.
71 lines
2.2 KiB
Rust
71 lines
2.2 KiB
Rust
use criterion::{criterion_group, Bencher, BenchmarkId, Criterion};
|
|
use rand::Rng;
|
|
use ratatui::{
|
|
buffer::Buffer,
|
|
layout::{Direction, Rect},
|
|
widgets::{Bar, BarChart, BarGroup, Widget},
|
|
};
|
|
|
|
/// Benchmark for rendering a barchart.
|
|
fn barchart(c: &mut Criterion) {
|
|
let mut group = c.benchmark_group("barchart");
|
|
let mut rng = rand::thread_rng();
|
|
|
|
for data_count in [64, 256, 2048] {
|
|
let data: Vec<Bar> = (0..data_count)
|
|
.map(|i| {
|
|
Bar::default()
|
|
.label(format!("B{i}").into())
|
|
.value(rng.gen_range(0..data_count))
|
|
})
|
|
.collect();
|
|
|
|
let bargroup = BarGroup::default().bars(&data);
|
|
|
|
// Render a basic barchart
|
|
group.bench_with_input(
|
|
BenchmarkId::new("render", data_count),
|
|
&BarChart::default().data(bargroup.clone()),
|
|
render,
|
|
);
|
|
|
|
// Render an horizontal barchart
|
|
group.bench_with_input(
|
|
BenchmarkId::new("render_horizontal", data_count),
|
|
&BarChart::default()
|
|
.direction(Direction::Horizontal)
|
|
.data(bargroup.clone()),
|
|
render,
|
|
);
|
|
|
|
// Render a barchart with multiple groups
|
|
group.bench_with_input(
|
|
BenchmarkId::new("render_grouped", data_count),
|
|
&BarChart::default()
|
|
// We call `data` multiple time to add multiple groups.
|
|
// This is not a duplicated call.
|
|
.data(bargroup.clone())
|
|
.data(bargroup.clone())
|
|
.data(bargroup.clone()),
|
|
render,
|
|
);
|
|
}
|
|
|
|
group.finish();
|
|
}
|
|
|
|
/// Render the widget in a classical size buffer
|
|
fn render(bencher: &mut Bencher, barchart: &BarChart) {
|
|
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/ratatui/pull/377.
|
|
bencher.iter_batched(
|
|
|| barchart.clone(),
|
|
|bench_barchart| {
|
|
bench_barchart.render(buffer.area, &mut buffer);
|
|
},
|
|
criterion::BatchSize::LargeInput,
|
|
);
|
|
}
|
|
|
|
criterion_group!(benches, barchart);
|