diff options
Diffstat (limited to 'vendor/png/benches')
-rw-r--r-- | vendor/png/benches/README.md | 6 | ||||
-rw-r--r-- | vendor/png/benches/decoder.rs | 38 |
2 files changed, 44 insertions, 0 deletions
diff --git a/vendor/png/benches/README.md b/vendor/png/benches/README.md new file mode 100644 index 0000000..bf13a55 --- /dev/null +++ b/vendor/png/benches/README.md @@ -0,0 +1,6 @@ +# Getting started with benchmarking + +To run the benchmarks you need a nightly rust toolchain. +Then you launch it with + + rustup run nightly cargo bench --features=benchmarks diff --git a/vendor/png/benches/decoder.rs b/vendor/png/benches/decoder.rs new file mode 100644 index 0000000..a078c9a --- /dev/null +++ b/vendor/png/benches/decoder.rs @@ -0,0 +1,38 @@ +use std::fs; + +use criterion::{criterion_group, criterion_main, Criterion, Throughput}; +use png::Decoder; + +fn load_all(c: &mut Criterion) { + for entry in fs::read_dir("tests/benches/").unwrap().flatten() { + match entry.path().extension() { + Some(st) if st == "png" => {} + _ => continue, + } + + let data = fs::read(entry.path()).unwrap(); + bench_file(c, data, entry.file_name().into_string().unwrap()); + } +} + +criterion_group!(benches, load_all); +criterion_main!(benches); + +fn bench_file(c: &mut Criterion, data: Vec<u8>, name: String) { + let mut group = c.benchmark_group("decode"); + group.sample_size(20); + + let decoder = Decoder::new(&*data); + let mut reader = decoder.read_info().unwrap(); + let mut image = vec![0; reader.output_buffer_size()]; + let info = reader.next_frame(&mut image).unwrap(); + + group.throughput(Throughput::Bytes(info.buffer_size() as u64)); + group.bench_with_input(name, &data, |b, data| { + b.iter(|| { + let decoder = Decoder::new(data.as_slice()); + let mut decoder = decoder.read_info().unwrap(); + decoder.next_frame(&mut image).unwrap(); + }) + }); +} |