Vendor rawler 0.7.2 unmodified
The crate as crates.io publishes it, minus .cargo-ok, its Cargo.lock and data/testdata (13 MB of sample files only its own tests read). Not yet routed through [patch.crates-io]; the next commit is the patch.
This commit is contained in:
+49
@@ -0,0 +1,49 @@
|
||||
use criterion::{Criterion, criterion_group, criterion_main};
|
||||
use rawler::ljpeg92::LjpegCompressor;
|
||||
use std::hint::black_box;
|
||||
|
||||
fn generate_data(w: usize, h: usize, ncomp: usize) -> Vec<u16> {
|
||||
let mut img = vec![0; w * h * ncomp];
|
||||
|
||||
for (i, pix) in img.iter_mut().enumerate() {
|
||||
*pix = i as u16 % 4u16;
|
||||
}
|
||||
img
|
||||
}
|
||||
|
||||
fn encode_ljpeg(img: &[u16], w: usize, h: usize, ncomp: usize) {
|
||||
let pred = 1;
|
||||
let bps = 16;
|
||||
|
||||
let state = LjpegCompressor::new(img, w, h, ncomp, bps, pred, 0, 0).unwrap();
|
||||
let _result = state.encode().unwrap();
|
||||
}
|
||||
|
||||
fn copy_data(img: &[u16], w: usize, h: usize) {
|
||||
let mut result = vec![0; w * h];
|
||||
for (dst, src) in result.chunks_exact_mut(w).zip(img.chunks_exact(w)) {
|
||||
dst.copy_from_slice(src);
|
||||
}
|
||||
}
|
||||
|
||||
fn criterion_benchmark(c: &mut Criterion) {
|
||||
let mut group = c.benchmark_group("ljpeg-encoder");
|
||||
// Configure Criterion.rs to detect smaller differences and increase sample size to improve
|
||||
// precision and counteract the resulting noise.
|
||||
group.significance_level(0.1).sample_size(20); //.measurement_time(Duration::from_secs(10));
|
||||
|
||||
let x = generate_data(3000, 2000, 1);
|
||||
|
||||
group.bench_with_input("encode_3000x2000", &x, |b, data| {
|
||||
b.iter(|| encode_ljpeg(black_box(data), black_box(3000), black_box(2000), black_box(1)))
|
||||
});
|
||||
|
||||
group.bench_with_input("copy_3000x2000", &x, |b, data| {
|
||||
b.iter(|| copy_data(black_box(data), black_box(3000), black_box(2000)))
|
||||
});
|
||||
|
||||
group.finish();
|
||||
}
|
||||
|
||||
criterion_group!(benches, criterion_benchmark);
|
||||
criterion_main!(benches);
|
||||
+100
@@ -0,0 +1,100 @@
|
||||
use criterion::{BenchmarkGroup, Criterion, criterion_group, criterion_main, measurement::WallTime};
|
||||
use rawler::{decoders::RawDecodeParams, rawsource::RawSource};
|
||||
use std::{hint::black_box, path::PathBuf, time::Duration};
|
||||
|
||||
fn rawdb_sample(sample: &str) -> PathBuf {
|
||||
let mut path = PathBuf::from(std::env::var("RAWLER_RAWDB").expect("RAWLER_RAWDB variable must be set in order to run RAW test!"));
|
||||
path.push(sample);
|
||||
if !path.exists() {
|
||||
eprintln!("Sample \"{}\" not found", path.display());
|
||||
}
|
||||
path
|
||||
}
|
||||
|
||||
fn bench_raw_image(group: &mut BenchmarkGroup<'_, WallTime>, name: &str, sample: &str) {
|
||||
let mut inner = || -> anyhow::Result<()> {
|
||||
let sample = rawdb_sample(sample);
|
||||
let rawfile = RawSource::new(&sample)?;
|
||||
let decoder = rawler::get_decoder(&rawfile)?;
|
||||
group.bench_with_input(name, &rawfile, |b, rawfile| {
|
||||
b.iter(|| {
|
||||
decoder
|
||||
.raw_image(black_box(rawfile), black_box(&RawDecodeParams::default()), black_box(false))
|
||||
.expect("Decoder failed")
|
||||
})
|
||||
});
|
||||
Ok(())
|
||||
};
|
||||
|
||||
if let Err(err) = inner() {
|
||||
eprintln!("Warning: Bench failed: {:?}", err);
|
||||
}
|
||||
}
|
||||
|
||||
fn decoding_raw_frame(c: &mut Criterion) {
|
||||
let mut group = c.benchmark_group("decoding-raw-frame");
|
||||
// Configure Criterion.rs to detect smaller differences and increase sample size to improve
|
||||
// precision and counteract the resulting noise.
|
||||
group.significance_level(0.1).sample_size(20).measurement_time(Duration::from_secs(10));
|
||||
|
||||
bench_raw_image(
|
||||
&mut group,
|
||||
"decode_canon_eos_5dmk3_raw",
|
||||
"cameras/Canon/EOS 5D Mark III/raw_modes/Canon EOS 5D Mark III_RAW_ISO_200.CR2",
|
||||
);
|
||||
|
||||
bench_raw_image(
|
||||
&mut group,
|
||||
"decode_canon_eos_5dmk3_sraw1",
|
||||
"cameras/Canon/EOS 5D Mark III/raw_modes/Canon EOS 5D Mark III_sRAW1_ISO_200.CR2",
|
||||
);
|
||||
|
||||
bench_raw_image(
|
||||
&mut group,
|
||||
"decode_canon_eos_5dmk3_sraw2",
|
||||
"cameras/Canon/EOS 5D Mark III/raw_modes/Canon EOS 5D Mark III_sRAW2_ISO_200.CR2",
|
||||
);
|
||||
|
||||
bench_raw_image(
|
||||
&mut group,
|
||||
"decode_canon_eos_r6_raw",
|
||||
"cameras/Canon/EOS R6/raw_modes/Canon EOS R6_RAW_ISO_100_nocrop_nodual.CR3",
|
||||
);
|
||||
|
||||
bench_raw_image(
|
||||
&mut group,
|
||||
"decode_canon_eos_r6_craw",
|
||||
"cameras/Canon/EOS R6/raw_modes/Canon EOS R6_CRAW_ISO_100_nocrop_nodual.CR3",
|
||||
);
|
||||
|
||||
bench_raw_image(&mut group, "decode_dng_ljpeg_tiles", "dng/compression-sets/ljpeg_tiles.dng");
|
||||
|
||||
bench_raw_image(&mut group, "decode_dng_10bit", "dng/compression-sets/10bit.dng");
|
||||
|
||||
bench_raw_image(&mut group, "decode_dng_12bit", "dng/compression-sets/12bit.dng");
|
||||
|
||||
bench_raw_image(&mut group, "decode_dng_16bit_be", "dng/compression-sets/16bit_bigend.dng");
|
||||
|
||||
bench_raw_image(&mut group, "decode_dng_8bit_lintable", "dng/compression-sets/8bit_lintable.dng");
|
||||
|
||||
bench_raw_image(&mut group, "decode_dng_ljpeg_singlestrip", "dng/compression-sets/ljpeg_singlestrip.dng");
|
||||
|
||||
bench_raw_image(&mut group, "decode_dng_lossy_jpeg_tiles", "dng/compression-sets/lossy_tiles.dng");
|
||||
|
||||
bench_raw_image(
|
||||
&mut group,
|
||||
"decode_dng_uncomp_multistrip_16rows",
|
||||
"dng/compression-sets/uncompressed_multistrip_16row.dng",
|
||||
);
|
||||
|
||||
bench_raw_image(
|
||||
&mut group,
|
||||
"decode_dng_uncomp_multistrip_1row",
|
||||
"dng/compression-sets/uncompressed_multistrip_1row.dng",
|
||||
);
|
||||
|
||||
group.finish();
|
||||
}
|
||||
|
||||
criterion_group!(benches, decoding_raw_frame);
|
||||
criterion_main!(benches);
|
||||
Reference in New Issue
Block a user