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