Add benchmarks

This commit is contained in:
Steve Cook
2023-03-02 19:30:47 -05:00
parent 47e2444b11
commit 0993b8b5ad
2 changed files with 209 additions and 0 deletions

View File

@@ -36,6 +36,7 @@ thiserror = "1.0.38"
java-properties = "1.4.1"
java-rand = "0.2.0"
rand = "0.8.5"
criterion = "0.4.0"
[features]
default = ["image"]
@@ -70,6 +71,10 @@ members = [
"crates/cli"
]
[[bench]]
name = "benchmarks"
harness = false
[profile.release]
codegen-units = 1
lto = true

204
benches/benchmarks.rs Normal file
View File

@@ -0,0 +1,204 @@
use criterion::{criterion_group, criterion_main, Criterion};
use rxing::aztec::AztecReader;
use rxing::common::HybridBinarizer;
use rxing::datamatrix::DataMatrixReader;
use rxing::maxicode::MaxiCodeReader;
use rxing::oned::rss::expanded::RSSExpandedReader;
use rxing::oned::rss::RSS14Reader;
use rxing::oned::{
CodaBarReader, Code39Reader, Code93Reader, EAN13Reader, EAN8Reader, ITFReader, UPCAReader,
UPCEReader,
};
use rxing::pdf417::PDF417Reader;
use rxing::qrcode::QRCodeReader;
use rxing::{BinaryBitmap, BufferedImageLuminanceSource, Reader};
use std::path::Path;
fn get_image(
path: impl AsRef<Path>,
) -> BinaryBitmap<HybridBinarizer<BufferedImageLuminanceSource>> {
BinaryBitmap::new(HybridBinarizer::new(BufferedImageLuminanceSource::new(
image::open(path).unwrap(),
)))
}
fn aztec_benchmark(c: &mut Criterion) {
let mut image = get_image("test_resources/blackbox/aztec-1/abc-37x37.png");
let mut reader = AztecReader::default();
c.bench_function("aztec", |b| {
b.iter(|| {
let _res = reader.decode(&mut image);
});
});
}
fn codabar_benchmark(c: &mut Criterion) {
let mut image = get_image("test_resources/blackbox/codabar-1/02.png");
let mut reader = CodaBarReader::default();
c.bench_function("codabar", |b| {
b.iter(|| {
let _res = reader.decode(&mut image);
});
});
}
fn code39_benchmark(c: &mut Criterion) {
let mut image = get_image("test_resources/blackbox/code39-1/1.png");
let mut reader = Code39Reader::default();
c.bench_function("code39", |b| {
b.iter(|| {
let _res = reader.decode(&mut image);
});
});
}
fn code93_benchmark(c: &mut Criterion) {
let mut image = get_image("test_resources/blackbox/code93-1/1.png");
let mut reader = Code93Reader::default();
c.bench_function("code93", |b| {
b.iter(|| {
let _res = reader.decode(&mut image);
});
});
}
fn datamatrix_benchmark(c: &mut Criterion) {
let mut image = get_image("test_resources/blackbox/datamatrix-1/C40.png");
let mut reader = DataMatrixReader::default();
c.bench_function("datamatrix", |b| {
b.iter(|| {
let _res = reader.decode(&mut image);
});
});
}
fn ean8_benchmark(c: &mut Criterion) {
let mut image = get_image("test_resources/blackbox/ean8-1/1.png");
let mut reader = EAN8Reader::default();
c.bench_function("ean8", |b| {
b.iter(|| {
let _res = reader.decode(&mut image);
});
});
}
fn ean13_benchmark(c: &mut Criterion) {
let mut image = get_image("test_resources/blackbox/ean13-1/1.png");
let mut reader = EAN13Reader::default();
c.bench_function("ean13", |b| {
b.iter(|| {
let _res = reader.decode(&mut image);
});
});
}
fn itf_benchmark(c: &mut Criterion) {
let mut image = get_image("test_resources/blackbox/itf-1/1.png");
let mut reader = ITFReader::default();
c.bench_function("itf", |b| {
b.iter(|| {
let _res = reader.decode(&mut image);
});
});
}
fn maxicode_benchmark(c: &mut Criterion) {
let mut image = get_image("test_resources/blackbox/maxicode-1/1.png");
let mut reader = MaxiCodeReader::default();
c.bench_function("maxicode", |b| {
b.iter(|| {
let _res = reader.decode(&mut image);
});
});
}
fn pdf417_benchmark(c: &mut Criterion) {
let mut image = get_image("test_resources/blackbox/pdf417-1/01.png");
let mut reader = PDF417Reader::default();
c.bench_function("pdf417", |b| {
b.iter(|| {
let _res = reader.decode(&mut image);
});
});
}
fn qrcode_benchmark(c: &mut Criterion) {
let mut image = get_image("test_resources/blackbox/qrcode-2/1.png");
let mut reader = QRCodeReader::default();
c.bench_function("qrcode", |b| {
b.iter(|| {
let _res = reader.decode(&mut image);
});
});
}
fn rss14_benchmark(c: &mut Criterion) {
let mut image = get_image("test_resources/blackbox/rss14-1/3.png");
c.bench_function("rss14", |b| {
b.iter(|| {
let mut reader = RSS14Reader::default();
let _res = reader.decode(&mut image);
});
});
}
fn rss_expanded_benchmark(c: &mut Criterion) {
let mut image = get_image("test_resources/blackbox/rssexpanded-1/1.png");
c.bench_function("rss_expanded", |b| {
b.iter(|| {
let mut reader = RSSExpandedReader::default();
let _res = reader.decode(&mut image);
});
});
}
fn upca_benchmark(c: &mut Criterion) {
let mut image = get_image("test_resources/blackbox/upca-4/1.png");
c.bench_function("upca", |b| {
b.iter(|| {
let mut reader = UPCAReader::default();
let _res = reader.decode(&mut image);
});
});
}
fn upce_benchmark(c: &mut Criterion) {
let mut image = get_image("test_resources/blackbox/upce-1/1.png");
c.bench_function("upce", |b| {
b.iter(|| {
let mut reader = UPCEReader::default();
let _res = reader.decode(&mut image);
});
});
}
criterion_group!(
benches,
aztec_benchmark,
codabar_benchmark,
code39_benchmark,
code93_benchmark,
datamatrix_benchmark,
ean8_benchmark,
ean13_benchmark,
itf_benchmark,
maxicode_benchmark,
pdf417_benchmark,
qrcode_benchmark,
rss14_benchmark,
rss_expanded_benchmark,
upca_benchmark,
upce_benchmark
);
criterion_main!(benches);