diff --git a/benches/deflate.rs b/benches/deflate.rs index b24a632e..41499f30 100644 --- a/benches/deflate.rs +++ b/benches/deflate.rs @@ -4,264 +4,206 @@ extern crate test; extern crate oxipng; use oxipng::png; +use oxipng::deflate::deflate; use test::Bencher; -use std::collections::HashSet; -use std::path::Path; use std::path::PathBuf; -fn get_opts(input: &Path) -> oxipng::Options { - let mut filter = HashSet::new(); - filter.insert(0); - let mut compression = HashSet::new(); - compression.insert(9); - let mut memory = HashSet::new(); - memory.insert(9); - let strategies = HashSet::new(); - - oxipng::Options { - backup: false, - out_file: input.with_extension("out.png").to_owned(), - out_dir: None, - stdout: false, - pretend: true, - recursive: false, - fix_errors: false, - force: true, - clobber: true, - create: true, - preserve_attrs: false, - verbosity: None, - filter: filter, - interlace: None, - compression: compression, - memory: memory, - strategies: strategies, - window: 15, - bit_depth_reduction: false, - color_type_reduction: false, - palette_reduction: false, - idat_recoding: true, - strip: png::Headers::None, - use_heuristics: false, - } -} - #[bench] fn bench_deflate_16_bits_strategy_0(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_16_should_be_rgb_16.png")); - let mut opts = get_opts(&input); - opts.strategies.insert(0); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + deflate::deflate(png.raw_data.as_ref(), 9, 9, 0, 15).ok(); }); } #[bench] fn bench_deflate_8_bits_strategy_0(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_8_should_be_rgb_8.png")); - let mut opts = get_opts(&input); - opts.strategies.insert(0); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + deflate::deflate(png.raw_data.as_ref(), 9, 9, 0, 15).ok(); }); } #[bench] fn bench_deflate_4_bits_strategy_0(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_4_should_be_palette_4.png")); - let mut opts = get_opts(&input); - opts.strategies.insert(0); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + deflate::deflate(png.raw_data.as_ref(), 9, 9, 0, 15).ok(); }); } #[bench] fn bench_deflate_2_bits_strategy_0(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_2_should_be_palette_2.png")); - let mut opts = get_opts(&input); - opts.strategies.insert(0); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + deflate::deflate(png.raw_data.as_ref(), 9, 9, 0, 15).ok(); }); } #[bench] fn bench_deflate_1_bits_strategy_0(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_1_should_be_palette_1.png")); - let mut opts = get_opts(&input); - opts.strategies.insert(0); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + deflate::deflate(png.raw_data.as_ref(), 9, 9, 0, 15).ok(); }); } #[bench] fn bench_deflate_16_bits_strategy_1(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_16_should_be_rgb_16.png")); - let mut opts = get_opts(&input); - opts.strategies.insert(1); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + deflate::deflate(png.raw_data.as_ref(), 9, 9, 1, 15).ok(); }); } #[bench] fn bench_deflate_8_bits_strategy_1(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_8_should_be_rgb_8.png")); - let mut opts = get_opts(&input); - opts.strategies.insert(1); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + deflate::deflate(png.raw_data.as_ref(), 9, 9, 1, 15).ok(); }); } #[bench] fn bench_deflate_4_bits_strategy_1(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_4_should_be_palette_4.png")); - let mut opts = get_opts(&input); - opts.strategies.insert(1); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + deflate::deflate(png.raw_data.as_ref(), 9, 9, 1, 15).ok(); }); } #[bench] fn bench_deflate_2_bits_strategy_1(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_2_should_be_palette_2.png")); - let mut opts = get_opts(&input); - opts.strategies.insert(1); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + deflate::deflate(png.raw_data.as_ref(), 9, 9, 1, 15).ok(); }); } #[bench] fn bench_deflate_1_bits_strategy_1(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_1_should_be_palette_1.png")); - let mut opts = get_opts(&input); - opts.strategies.insert(1); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + deflate::deflate(png.raw_data.as_ref(), 9, 9, 1, 15).ok(); }); } #[bench] fn bench_deflate_16_bits_strategy_2(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_16_should_be_rgb_16.png")); - let mut opts = get_opts(&input); - opts.strategies.insert(2); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + deflate::deflate(png.raw_data.as_ref(), 9, 9, 2, 15).ok(); }); } #[bench] fn bench_deflate_8_bits_strategy_2(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_8_should_be_rgb_8.png")); - let mut opts = get_opts(&input); - opts.strategies.insert(2); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + deflate::deflate(png.raw_data.as_ref(), 9, 9, 2, 15).ok(); }); } #[bench] fn bench_deflate_4_bits_strategy_2(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_4_should_be_palette_4.png")); - let mut opts = get_opts(&input); - opts.strategies.insert(2); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + deflate::deflate(png.raw_data.as_ref(), 9, 9, 2, 15).ok(); }); } #[bench] fn bench_deflate_2_bits_strategy_2(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_2_should_be_palette_2.png")); - let mut opts = get_opts(&input); - opts.strategies.insert(2); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + deflate::deflate(png.raw_data.as_ref(), 9, 9, 2, 15).ok(); }); } #[bench] fn bench_deflate_1_bits_strategy_2(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_1_should_be_palette_1.png")); - let mut opts = get_opts(&input); - opts.strategies.insert(2); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + deflate::deflate(png.raw_data.as_ref(), 9, 9, 2, 15).ok(); }); } #[bench] fn bench_deflate_16_bits_strategy_3(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_16_should_be_rgb_16.png")); - let mut opts = get_opts(&input); - opts.strategies.insert(3); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + deflate::deflate(png.raw_data.as_ref(), 9, 9, 3, 15).ok(); }); } #[bench] fn bench_deflate_8_bits_strategy_3(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_8_should_be_rgb_8.png")); - let mut opts = get_opts(&input); - opts.strategies.insert(3); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + deflate::deflate(png.raw_data.as_ref(), 9, 9, 3, 15).ok(); }); } #[bench] fn bench_deflate_4_bits_strategy_3(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_4_should_be_palette_4.png")); - let mut opts = get_opts(&input); - opts.strategies.insert(3); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + deflate::deflate(png.raw_data.as_ref(), 9, 9, 3, 15).ok(); }); } #[bench] fn bench_deflate_2_bits_strategy_3(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_2_should_be_palette_2.png")); - let mut opts = get_opts(&input); - opts.strategies.insert(3); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + deflate::deflate(png.raw_data.as_ref(), 9, 9, 3, 15).ok(); }); } #[bench] fn bench_deflate_1_bits_strategy_3(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_1_should_be_palette_1.png")); - let mut opts = get_opts(&input); - opts.strategies.insert(3); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + deflate::deflate(png.raw_data.as_ref(), 9, 9, 3, 15).ok(); }); } diff --git a/benches/filters.rs b/benches/filters.rs index 74f32a20..130be027 100644 --- a/benches/filters.rs +++ b/benches/filters.rs @@ -5,373 +5,304 @@ extern crate oxipng; use oxipng::png; use test::Bencher; -use std::collections::HashSet; -use std::path::Path; use std::path::PathBuf; -fn get_opts(input: &Path) -> oxipng::Options { - let filter = HashSet::new(); - let mut compression = HashSet::new(); - compression.insert(0); - let mut memory = HashSet::new(); - memory.insert(9); - let mut strategies = HashSet::new(); - strategies.insert(0); - - oxipng::Options { - backup: false, - out_file: input.with_extension("out.png").to_owned(), - out_dir: None, - stdout: false, - pretend: true, - recursive: false, - fix_errors: false, - force: true, - clobber: true, - create: true, - preserve_attrs: false, - verbosity: None, - filter: filter, - interlace: None, - compression: compression, - memory: memory, - strategies: strategies, - window: 15, - bit_depth_reduction: false, - color_type_reduction: false, - palette_reduction: false, - idat_recoding: true, - strip: png::Headers::None, - use_heuristics: false, - } -} - #[bench] -fn bench_deflate_16_bits_filter_0(b: &mut Bencher) { +fn bench_16_bits_filter_0(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_16_should_be_rgb_16.png")); - let mut opts = get_opts(&input); - opts.filter.insert(0); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(0); }); } #[bench] -fn bench_deflate_8_bits_filter_0(b: &mut Bencher) { +fn bench_8_bits_filter_0(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_8_should_be_rgb_8.png")); - let mut opts = get_opts(&input); - opts.filter.insert(0); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(0); }); } #[bench] -fn bench_deflate_4_bits_filter_0(b: &mut Bencher) { +fn bench_4_bits_filter_0(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_4_should_be_palette_4.png")); - let mut opts = get_opts(&input); - opts.filter.insert(0); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(0); }); } #[bench] -fn bench_deflate_2_bits_filter_0(b: &mut Bencher) { +fn bench_2_bits_filter_0(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_2_should_be_palette_2.png")); - let mut opts = get_opts(&input); - opts.filter.insert(0); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(0); }); } #[bench] -fn bench_deflate_1_bits_filter_0(b: &mut Bencher) { +fn bench_1_bits_filter_0(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_1_should_be_palette_1.png")); - let mut opts = get_opts(&input); - opts.filter.insert(0); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(0); }); } #[bench] -fn bench_deflate_16_bits_filter_1(b: &mut Bencher) { +fn bench_16_bits_filter_1(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_16_should_be_rgb_16.png")); - let mut opts = get_opts(&input); - opts.filter.insert(1); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(1); }); } #[bench] -fn bench_deflate_8_bits_filter_1(b: &mut Bencher) { +fn bench_8_bits_filter_1(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_8_should_be_rgb_8.png")); - let mut opts = get_opts(&input); - opts.filter.insert(1); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(1); }); } #[bench] -fn bench_deflate_4_bits_filter_1(b: &mut Bencher) { +fn bench_4_bits_filter_1(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_4_should_be_palette_4.png")); - let mut opts = get_opts(&input); - opts.filter.insert(1); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(1); }); } #[bench] -fn bench_deflate_2_bits_filter_1(b: &mut Bencher) { +fn bench_2_bits_filter_1(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_2_should_be_palette_2.png")); - let mut opts = get_opts(&input); - opts.filter.insert(1); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(1); }); } #[bench] -fn bench_deflate_1_bits_filter_1(b: &mut Bencher) { +fn bench_1_bits_filter_1(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_1_should_be_palette_1.png")); - let mut opts = get_opts(&input); - opts.filter.insert(1); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(1); }); } #[bench] -fn bench_deflate_16_bits_filter_2(b: &mut Bencher) { +fn bench_16_bits_filter_2(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_16_should_be_rgb_16.png")); - let mut opts = get_opts(&input); - opts.filter.insert(2); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(2); }); } #[bench] -fn bench_deflate_8_bits_filter_2(b: &mut Bencher) { +fn bench_8_bits_filter_2(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_8_should_be_rgb_8.png")); - let mut opts = get_opts(&input); - opts.filter.insert(2); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(2); }); } #[bench] -fn bench_deflate_4_bits_filter_2(b: &mut Bencher) { +fn bench_4_bits_filter_2(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_4_should_be_palette_4.png")); - let mut opts = get_opts(&input); - opts.filter.insert(2); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(2); }); } #[bench] -fn bench_deflate_2_bits_filter_2(b: &mut Bencher) { +fn bench_2_bits_filter_2(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_2_should_be_palette_2.png")); - let mut opts = get_opts(&input); - opts.filter.insert(2); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(2); }); } #[bench] -fn bench_deflate_1_bits_filter_2(b: &mut Bencher) { +fn bench_1_bits_filter_2(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_1_should_be_palette_1.png")); - let mut opts = get_opts(&input); - opts.filter.insert(2); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(2); }); } #[bench] -fn bench_deflate_16_bits_filter_3(b: &mut Bencher) { +fn bench_16_bits_filter_3(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_16_should_be_rgb_16.png")); - let mut opts = get_opts(&input); - opts.filter.insert(3); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(3); }); } #[bench] -fn bench_deflate_8_bits_filter_3(b: &mut Bencher) { +fn bench_8_bits_filter_3(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_8_should_be_rgb_8.png")); - let mut opts = get_opts(&input); - opts.filter.insert(3); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(3); }); } #[bench] -fn bench_deflate_4_bits_filter_3(b: &mut Bencher) { +fn bench_4_bits_filter_3(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_4_should_be_palette_4.png")); - let mut opts = get_opts(&input); - opts.filter.insert(3); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(3); }); } #[bench] -fn bench_deflate_2_bits_filter_3(b: &mut Bencher) { +fn bench_2_bits_filter_3(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_2_should_be_palette_2.png")); - let mut opts = get_opts(&input); - opts.filter.insert(3); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(3); }); } #[bench] -fn bench_deflate_1_bits_filter_3(b: &mut Bencher) { +fn bench_1_bits_filter_3(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_1_should_be_palette_1.png")); - let mut opts = get_opts(&input); - opts.filter.insert(3); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(3); }); } #[bench] -fn bench_deflate_16_bits_filter_4(b: &mut Bencher) { +fn bench_16_bits_filter_4(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_16_should_be_rgb_16.png")); - let mut opts = get_opts(&input); - opts.filter.insert(4); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(4); }); } #[bench] -fn bench_deflate_8_bits_filter_4(b: &mut Bencher) { +fn bench_8_bits_filter_4(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_8_should_be_rgb_8.png")); - let mut opts = get_opts(&input); - opts.filter.insert(4); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(4); }); } #[bench] -fn bench_deflate_4_bits_filter_4(b: &mut Bencher) { +fn bench_4_bits_filter_4(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_4_should_be_palette_4.png")); - let mut opts = get_opts(&input); - opts.filter.insert(4); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(4); }); } #[bench] -fn bench_deflate_2_bits_filter_4(b: &mut Bencher) { +fn bench_2_bits_filter_4(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_2_should_be_palette_2.png")); - let mut opts = get_opts(&input); - opts.filter.insert(4); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(4); }); } #[bench] -fn bench_deflate_1_bits_filter_4(b: &mut Bencher) { +fn bench_1_bits_filter_4(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_1_should_be_palette_1.png")); - let mut opts = get_opts(&input); - opts.filter.insert(4); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(4); }); } #[bench] -fn bench_deflate_16_bits_filter_5(b: &mut Bencher) { +fn bench_16_bits_filter_5(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_16_should_be_rgb_16.png")); - let mut opts = get_opts(&input); - opts.filter.insert(5); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(5); }); } #[bench] -fn bench_deflate_8_bits_filter_5(b: &mut Bencher) { +fn bench_8_bits_filter_5(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_8_should_be_rgb_8.png")); - let mut opts = get_opts(&input); - opts.filter.insert(5); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(5); }); } #[bench] -fn bench_deflate_4_bits_filter_5(b: &mut Bencher) { +fn bench_4_bits_filter_5(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_4_should_be_palette_4.png")); - let mut opts = get_opts(&input); - opts.filter.insert(5); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(5); }); } #[bench] -fn bench_deflate_2_bits_filter_5(b: &mut Bencher) { +fn bench_2_bits_filter_5(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_2_should_be_palette_2.png")); - let mut opts = get_opts(&input); - opts.filter.insert(5); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(5); }); } #[bench] -fn bench_deflate_1_bits_filter_5(b: &mut Bencher) { +fn bench_1_bits_filter_5(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_1_should_be_palette_1.png")); - let mut opts = get_opts(&input); - opts.filter.insert(5); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + png.filter_image(5); }); } diff --git a/benches/interlacing.rs b/benches/interlacing.rs index 7ecf79ec..2c6b7f71 100644 --- a/benches/interlacing.rs +++ b/benches/interlacing.rs @@ -5,154 +5,114 @@ extern crate oxipng; use oxipng::png; use test::Bencher; -use std::collections::HashSet; -use std::path::Path; use std::path::PathBuf; -fn get_opts(input: &Path) -> oxipng::Options { - let mut filter = HashSet::new(); - filter.insert(0); - let mut compression = HashSet::new(); - compression.insert(0); - let mut memory = HashSet::new(); - memory.insert(9); - let mut strategies = HashSet::new(); - strategies.insert(0); - - oxipng::Options { - backup: false, - out_file: input.with_extension("out.png").to_owned(), - out_dir: None, - stdout: false, - pretend: true, - recursive: false, - fix_errors: false, - force: true, - clobber: true, - create: true, - preserve_attrs: false, - verbosity: None, - filter: filter, - interlace: None, - compression: compression, - memory: memory, - strategies: strategies, - window: 15, - bit_depth_reduction: false, - color_type_reduction: false, - palette_reduction: false, - idat_recoding: true, - strip: png::Headers::None, - use_heuristics: false, - } -} - #[bench] fn bench_interlace_16_bits(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_16_should_be_rgb_16.png")); - let mut opts = get_opts(&input); - opts.interlace = Some(1); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.change_interlacing(1); }); } #[bench] fn bench_interlace_8_bits(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_8_should_be_rgb_8.png")); - let mut opts = get_opts(&input); - opts.interlace = Some(1); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.change_interlacing(1); }); } #[bench] fn bench_interlace_4_bits(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_4_should_be_palette_4.png")); - let mut opts = get_opts(&input); - opts.interlace = Some(1); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.change_interlacing(1); }); } #[bench] fn bench_interlace_2_bits(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_2_should_be_palette_2.png")); - let mut opts = get_opts(&input); - opts.interlace = Some(1); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.change_interlacing(1); }); } #[bench] fn bench_interlace_1_bits(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_1_should_be_palette_1.png")); - let mut opts = get_opts(&input); - opts.interlace = Some(1); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.change_interlacing(1); }); } #[bench] fn bench_deinterlace_16_bits(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/interlaced_rgb_16_should_be_rgb_16.png")); - let mut opts = get_opts(&input); - opts.interlace = Some(0); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.change_interlacing(0); }); } #[bench] fn bench_deinterlace_8_bits(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/interlaced_rgb_8_should_be_rgb_8.png")); - let mut opts = get_opts(&input); - opts.interlace = Some(0); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.change_interlacing(0); }); } #[bench] fn bench_deinterlace_4_bits(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/interlaced_palette_4_should_be_palette_4.png")); - let mut opts = get_opts(&input); - opts.interlace = Some(0); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.change_interlacing(0); }); } #[bench] fn bench_deinterlace_2_bits(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/interlaced_palette_2_should_be_palette_2.png")); - let mut opts = get_opts(&input); - opts.interlace = Some(0); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.change_interlacing(0); }); } #[bench] fn bench_deinterlace_1_bits(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/interlaced_palette_1_should_be_palette_1.png")); - let mut opts = get_opts(&input); - opts.interlace = Some(0); + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.change_interlacing(0); }); } diff --git a/benches/reductions.rs b/benches/reductions.rs index db0a6eb6..4db63e9d 100644 --- a/benches/reductions.rs +++ b/benches/reductions.rs @@ -5,264 +5,224 @@ extern crate oxipng; use oxipng::png; use test::Bencher; -use std::collections::HashSet; -use std::path::Path; use std::path::PathBuf; -fn get_opts(input: &Path) -> oxipng::Options { - let mut filter = HashSet::new(); - filter.insert(0); - let mut compression = HashSet::new(); - compression.insert(0); - let mut memory = HashSet::new(); - memory.insert(9); - let mut strategies = HashSet::new(); - strategies.insert(0); - - oxipng::Options { - backup: false, - out_file: input.with_extension("out.png").to_owned(), - out_dir: None, - stdout: false, - pretend: true, - recursive: false, - fix_errors: false, - force: true, - clobber: true, - create: true, - preserve_attrs: false, - verbosity: None, - filter: filter, - interlace: None, - compression: compression, - memory: memory, - strategies: strategies, - window: 15, - bit_depth_reduction: false, - color_type_reduction: false, - palette_reduction: false, - idat_recoding: true, - strip: png::Headers::None, - use_heuristics: false, - } -} - #[bench] fn bench_16_to_8_bits(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_16_should_be_rgb_8.png")); - let mut opts = get_opts(&input); - opts.bit_depth_reduction = true; + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.reduce_bit_depth(); }); } #[bench] fn bench_8_to_4_bits(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_8_should_be_palette_4.png")); - let mut opts = get_opts(&input); - opts.bit_depth_reduction = true; + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.reduce_bit_depth(); }); } #[bench] fn bench_8_to_2_bits(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_8_should_be_palette_2.png")); - let mut opts = get_opts(&input); - opts.bit_depth_reduction = true; + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.reduce_bit_depth(); }); } #[bench] fn bench_8_to_1_bits(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_8_should_be_palette_1.png")); - let mut opts = get_opts(&input); - opts.bit_depth_reduction = true; + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.reduce_bit_depth(); }); } #[bench] fn bench_4_to_2_bits(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_4_should_be_palette_2.png")); - let mut opts = get_opts(&input); - opts.bit_depth_reduction = true; + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.reduce_bit_depth(); }); } #[bench] fn bench_4_to_1_bits(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_4_should_be_palette_1.png")); - let mut opts = get_opts(&input); - opts.bit_depth_reduction = true; + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.reduce_bit_depth(); }); } #[bench] fn bench_2_to_1_bits(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_2_should_be_palette_1.png")); - let mut opts = get_opts(&input); - opts.bit_depth_reduction = true; + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.reduce_bit_depth(); }); } #[bench] fn bench_rgba_to_rgb_16(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgba_16_should_be_rgb_16.png")); - let mut opts = get_opts(&input); - opts.color_type_reduction = true; + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.reduce_color_type(); }); } #[bench] fn bench_rgba_to_rgb_8(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgba_8_should_be_rgb_8.png")); - let mut opts = get_opts(&input); - opts.color_type_reduction = true; + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.reduce_color_type(); }); } #[bench] fn bench_rgba_to_grayscale_alpha_16(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgba_16_should_be_grayscale_alpha_16.png")); - let mut opts = get_opts(&input); - opts.color_type_reduction = true; + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.reduce_color_type(); }); } #[bench] fn bench_rgba_to_grayscale_alpha_8(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgba_8_should_be_grayscale_alpha_8.png")); - let mut opts = get_opts(&input); - opts.color_type_reduction = true; + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.reduce_color_type(); }); } #[bench] fn bench_rgba_to_grayscale_16(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgba_16_should_be_grayscale_16.png")); - let mut opts = get_opts(&input); - opts.color_type_reduction = true; + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.reduce_color_type(); }); } #[bench] fn bench_rgba_to_grayscale_8(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgba_8_should_be_grayscale_8.png")); - let mut opts = get_opts(&input); - opts.color_type_reduction = true; + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.reduce_color_type(); }); } #[bench] fn bench_rgb_to_grayscale_16(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_16_should_be_grayscale_16.png")); - let mut opts = get_opts(&input); - opts.color_type_reduction = true; + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.reduce_color_type(); }); } #[bench] fn bench_rgb_to_grayscale_8(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_8_should_be_grayscale_8.png")); - let mut opts = get_opts(&input); - opts.color_type_reduction = true; + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.reduce_color_type(); }); } #[bench] fn bench_rgba_to_palette_8(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgba_8_should_be_palette_8.png")); - let mut opts = get_opts(&input); - opts.color_type_reduction = true; + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.reduce_color_type(); }); } #[bench] fn bench_rgb_to_palette_8(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_8_should_be_palette_8.png")); - let mut opts = get_opts(&input); - opts.color_type_reduction = true; + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.reduce_color_type(); }); } #[bench] fn bench_palette_duplicate_reduction(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_should_be_reduced_with_dupes.png")); - let mut opts = get_opts(&input); - opts.palette_reduction = true; + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.reduce_palette(); }); } #[bench] fn bench_palette_unused_reduction(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_should_be_reduced_with_unused.png")); - let mut opts = get_opts(&input); - opts.palette_reduction = true; + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.reduce_palette(); }); } #[bench] fn bench_palette_full_reduction(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/palette_should_be_reduced_with_both.png")); - let mut opts = get_opts(&input); - opts.palette_reduction = true; + let png = png::PngData::new(&input).unwrap(); b.iter(|| { - oxipng::optimize(&input, &opts).ok(); + let mut safe_png = png.clone(); + safe_png.reduce_palette(); }); }