use std::time::{Duration, Instant};
use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion};
use oxvg_ast::parse::roxmltree::{parse_with_options, ParsingOptions};
pub fn criterion_benchmark(c: &mut Criterion) {
macro_rules! file {
($file:expr $(,)?) => {
($file, include_str!($file))
};
}
let files = [
file!("./archlinux-logo-dark-scalable.518881f04ca9.svg"),
file!("./banner.svg"),
file!("./blobs-d.svg"),
file!("./Wikipedia-logo-v2.svg"),
file!("./Inkscape_About_Screen_Isometric_madness_HdG4la4.svg"),
];
for (filename, svg) in files {
c.bench_with_input(BenchmarkId::new("parsing", filename), &svg, |b, svg| {
b.iter_custom(|iters| {
let mut result = Duration::default();
for _ in 0..iters {
let start = Instant::now();
let _ = black_box(parse_with_options(
svg,
ParsingOptions {
allow_dtd: true,
..ParsingOptions::default()
},
|dom, _| {
black_box(dom);
},
));
result += start.elapsed();
}
result
});
});
}
}
criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);