use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion}; use image::{ImageReader, RgbImage}; use pi_frame_server::dither::{DitherMethod, DitheredImage, Palette}; fn criterion_benchmark(c: &mut Criterion) { let mut group = c.benchmark_group("dithering_benchmark"); let sample_file = "sample_0.tiff"; let image: RgbImage = ImageReader::open(format!("samples/{sample_file}")) .expect("file exists") .decode() .expect("file is valid") .into_rgb8(); group.sample_size(20); group.bench_with_input(BenchmarkId::new("dither", "sample_0"), &image, |b, i| { b.iter(|| { let mut method = DitherMethod::Atkinson.get_ditherer(); let mut result = DitheredImage::new( image.width(), image.height(), Palette::Default.value().to_vec(), ); method.dither(i, &mut result); }); }); } criterion_group!(benches, criterion_benchmark); criterion_main!(benches);