1 extern crate criterion;
2 extern crate tiff;
3
4 use criterion::{
5 black_box, measurement::Measurement, BenchmarkGroup, BenchmarkId, Criterion, Throughput,
6 };
7 use tiff::decoder::Decoder;
8
read_image(image: &[u8])9 fn read_image(image: &[u8]) {
10 let image = std::io::Cursor::new(image);
11 let decoder = Decoder::new(black_box(image));
12 let mut reader = decoder.unwrap();
13
14 while {
15 reader.read_image().unwrap();
16 reader.more_images()
17 } {}
18 }
19
main()20 fn main() {
21 struct BenchDef {
22 data: &'static [u8],
23 id: &'static str,
24 sample_size: usize,
25 }
26
27 fn run_bench_def<M: Measurement>(group: &mut BenchmarkGroup<M>, def: BenchDef) {
28 group
29 .sample_size(def.sample_size)
30 .throughput(Throughput::Bytes(def.data.len() as u64))
31 .bench_with_input(
32 BenchmarkId::new(def.id, def.data.len()),
33 def.data,
34 |b, input| b.iter(|| read_image(input)),
35 );
36 };
37
38 let mut c = Criterion::default().configure_from_args();
39 let mut group = c.benchmark_group("tiff-lzw");
40
41 macro_rules! data_file {
42 ($name:literal) => {
43 include_bytes!(concat!(env!("CARGO_MANIFEST_DIR"), $name))
44 };
45 }
46
47 run_bench_def(
48 &mut group,
49 BenchDef {
50 data: data_file!("/tests/images/issue_69_lzw.tiff"),
51 id: "issue-69-lzw.tif",
52 sample_size: 500,
53 },
54 );
55
56 run_bench_def(
57 &mut group,
58 BenchDef {
59 data: data_file!("/tests/benches/kodim02-lzw.tif"),
60 id: "kodim02-lzw.tif",
61 sample_size: 20,
62 },
63 );
64
65 run_bench_def(
66 &mut group,
67 BenchDef {
68 data: data_file!("/tests/benches/kodim07-lzw.tif"),
69 id: "kodim07-lzw.tif",
70 sample_size: 20,
71 },
72 );
73
74 run_bench_def(
75 &mut group,
76 BenchDef {
77 data: data_file!("/tests/benches/Transparency-lzw.tif"),
78 id: "Transparency-lzw.tif",
79 sample_size: 20,
80 },
81 );
82 }
83