benches/render_bench.rs

//! 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);