//! Criterion benchmark for the rendering backends.
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use ripgrab::render::mode::json::{JsonLine, JsonRenderer};
use ripgrab::render::mode::stream::StreamRenderer;
mod fixtures;
fn bench_stream_no_color(c: &mut Criterion) {
let lines = fixtures::access_log(fixtures::DEFAULT_LINES);
c.bench_function("render/stream-no-color", |b| {
b.iter(|| {
let mut buf = Vec::with_capacity(lines.iter().map(|l| l.len() + 1).sum());
let mut r = StreamRenderer::new(&mut buf, false, false);
for line in &lines {
r.render("bench.log", black_box(line)).unwrap();
}
black_box(buf)
})
});
}
fn bench_stream_color(c: &mut Criterion) {
let lines = fixtures::access_log(fixtures::DEFAULT_LINES);
c.bench_function("render/stream-color", |b| {
b.iter(|| {
let mut buf = Vec::new();
let mut r = StreamRenderer::new(&mut buf, true, true);
for line in &lines {
r.render("bench.log", black_box(line)).unwrap();
}
black_box(buf)
})
});
}
fn bench_json_compact(c: &mut Criterion) {
let lines = fixtures::access_log(fixtures::DEFAULT_LINES);
c.bench_function("render/json-compact", |b| {
b.iter(|| {
let mut buf = Vec::new();
let mut r = JsonRenderer::new(&mut buf, false);
for (i, line) in lines.iter().enumerate() {
r.render(&JsonLine {
origin: "bench.log",
raw: line,
fields: Vec::new(),
seq: i as u64,
})
.unwrap();
}
black_box(buf)
})
});
}
criterion_group!(benches, bench_stream_no_color, bench_stream_color, bench_json_compact);
criterion_main!(benches);