diff --git a/Cargo.toml b/Cargo.toml index 7367a37..f01a483 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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 diff --git a/benches/benchmarks.rs b/benches/benchmarks.rs new file mode 100644 index 0000000..a1471d6 --- /dev/null +++ b/benches/benchmarks.rs @@ -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, +) -> BinaryBitmap> { + 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);