diff options
Diffstat (limited to 'vendor/tiff/benches/lzw.rs')
-rw-r--r-- | vendor/tiff/benches/lzw.rs | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/vendor/tiff/benches/lzw.rs b/vendor/tiff/benches/lzw.rs new file mode 100644 index 0000000..47f513b --- /dev/null +++ b/vendor/tiff/benches/lzw.rs @@ -0,0 +1,82 @@ +extern crate criterion; +extern crate tiff; + +use criterion::{ + black_box, measurement::Measurement, BenchmarkGroup, BenchmarkId, Criterion, Throughput, +}; +use tiff::decoder::Decoder; + +fn read_image(image: &[u8]) { + let image = std::io::Cursor::new(image); + let decoder = Decoder::new(black_box(image)); + let mut reader = decoder.unwrap(); + + while { + reader.read_image().unwrap(); + reader.more_images() + } {} +} + +fn main() { + struct BenchDef { + data: &'static [u8], + id: &'static str, + sample_size: usize, + } + + fn run_bench_def<M: Measurement>(group: &mut BenchmarkGroup<M>, def: BenchDef) { + group + .sample_size(def.sample_size) + .throughput(Throughput::Bytes(def.data.len() as u64)) + .bench_with_input( + BenchmarkId::new(def.id, def.data.len()), + def.data, + |b, input| b.iter(|| read_image(input)), + ); + } + + let mut c = Criterion::default().configure_from_args(); + let mut group = c.benchmark_group("tiff-lzw"); + + macro_rules! data_file { + ($name:literal) => { + include_bytes!(concat!(env!("CARGO_MANIFEST_DIR"), $name)) + }; + } + + run_bench_def( + &mut group, + BenchDef { + data: data_file!("/tests/images/issue_69_lzw.tiff"), + id: "issue-69-lzw.tif", + sample_size: 500, + }, + ); + + run_bench_def( + &mut group, + BenchDef { + data: data_file!("/tests/benches/kodim02-lzw.tif"), + id: "kodim02-lzw.tif", + sample_size: 20, + }, + ); + + run_bench_def( + &mut group, + BenchDef { + data: data_file!("/tests/benches/kodim07-lzw.tif"), + id: "kodim07-lzw.tif", + sample_size: 20, + }, + ); + + run_bench_def( + &mut group, + BenchDef { + data: data_file!("/tests/benches/Transparency-lzw.tif"), + id: "Transparency-lzw.tif", + sample_size: 20, + }, + ); +} |