From b67083da0c589c5dee2f9716fab02a640fe7adf0 Mon Sep 17 00:00:00 2001 From: Joshua Holmer Date: Wed, 20 Apr 2016 09:57:56 -0400 Subject: [PATCH] Revise benchmarks to be more direct [ci skip] Now actually runs through the whole suite without file locking issues. Initial results: Running target/release/deflate-032c8bb6310daa8e running 20 tests test bench_deflate_16_bits_strategy_0 ... bench: 34,772,065 ns/iter (+/- 3,927,686) test bench_deflate_16_bits_strategy_1 ... bench: 35,829,570 ns/iter (+/- 1,683,748) test bench_deflate_16_bits_strategy_2 ... bench: 12,428,913 ns/iter (+/- 1,005,308) test bench_deflate_16_bits_strategy_3 ... bench: 13,247,589 ns/iter (+/- 1,026,688) test bench_deflate_1_bits_strategy_0 ... bench: 232,037 ns/iter (+/- 5,818) test bench_deflate_1_bits_strategy_1 ... bench: 235,463 ns/iter (+/- 25,972) test bench_deflate_1_bits_strategy_2 ... bench: 168,770 ns/iter (+/- 20,463) test bench_deflate_1_bits_strategy_3 ... bench: 32,254 ns/iter (+/- 1,034) test bench_deflate_2_bits_strategy_0 ... bench: 537,638 ns/iter (+/- 27,704) test bench_deflate_2_bits_strategy_1 ... bench: 532,766 ns/iter (+/- 26,777) test bench_deflate_2_bits_strategy_2 ... bench: 313,566 ns/iter (+/- 29,872) test bench_deflate_2_bits_strategy_3 ... bench: 44,436 ns/iter (+/- 3,554) test bench_deflate_4_bits_strategy_0 ... bench: 2,259,173 ns/iter (+/- 236,430) test bench_deflate_4_bits_strategy_1 ... bench: 2,259,694 ns/iter (+/- 254,753) test bench_deflate_4_bits_strategy_2 ... bench: 731,383 ns/iter (+/- 21,518) test bench_deflate_4_bits_strategy_3 ... bench: 193,049 ns/iter (+/- 24,552) test bench_deflate_8_bits_strategy_0 ... bench: 26,799,023 ns/iter (+/- 2,322,131) test bench_deflate_8_bits_strategy_1 ... bench: 26,986,947 ns/iter (+/- 3,026,671) test bench_deflate_8_bits_strategy_2 ... bench: 5,844,986 ns/iter (+/- 547,120) test bench_deflate_8_bits_strategy_3 ... bench: 5,401,345 ns/iter (+/- 592,391) test result: ok. 0 passed; 0 failed; 0 ignored; 20 measured Running target/release/filters-4cdef7ed188d5a43 running 30 tests test bench_16_bits_filter_0 ... bench: 1,201,636 ns/iter (+/- 122,922) test bench_16_bits_filter_1 ... bench: 2,515,136 ns/iter (+/- 351,661) test bench_16_bits_filter_2 ... bench: 2,536,454 ns/iter (+/- 595,207) test bench_16_bits_filter_3 ... bench: 2,555,551 ns/iter (+/- 519,059) test bench_16_bits_filter_4 ... bench: 6,413,073 ns/iter (+/- 505,450) test bench_16_bits_filter_5 ... bench: 27,124,584 ns/iter (+/- 3,171,162) test bench_1_bits_filter_0 ... bench: 55,761 ns/iter (+/- 19,412) test bench_1_bits_filter_1 ... bench: 80,915 ns/iter (+/- 13,928) test bench_1_bits_filter_2 ... bench: 80,479 ns/iter (+/- 9,268) test bench_1_bits_filter_3 ... bench: 86,080 ns/iter (+/- 47,504) test bench_1_bits_filter_4 ... bench: 154,723 ns/iter (+/- 3,932) test bench_1_bits_filter_5 ... bench: 805,938 ns/iter (+/- 118,853) test bench_2_bits_filter_0 ... bench: 74,940 ns/iter (+/- 14,205) test bench_2_bits_filter_1 ... bench: 126,821 ns/iter (+/- 22,497) test bench_2_bits_filter_2 ... bench: 126,445 ns/iter (+/- 17,852) test bench_2_bits_filter_3 ... bench: 129,264 ns/iter (+/- 52,772) test bench_2_bits_filter_4 ... bench: 267,978 ns/iter (+/- 7,064) test bench_2_bits_filter_5 ... bench: 1,354,604 ns/iter (+/- 206,764) test bench_4_bits_filter_0 ... bench: 119,468 ns/iter (+/- 13,806) test bench_4_bits_filter_1 ... bench: 219,357 ns/iter (+/- 34,642) test bench_4_bits_filter_2 ... bench: 218,588 ns/iter (+/- 11,280) test bench_4_bits_filter_3 ... bench: 222,955 ns/iter (+/- 60,112) test bench_4_bits_filter_4 ... bench: 516,987 ns/iter (+/- 33,155) test bench_4_bits_filter_5 ... bench: 2,424,414 ns/iter (+/- 244,989) test bench_8_bits_filter_0 ... bench: 551,986 ns/iter (+/- 89,602) test bench_8_bits_filter_1 ... bench: 1,234,364 ns/iter (+/- 307,291) test bench_8_bits_filter_2 ... bench: 1,150,679 ns/iter (+/- 35,718) test bench_8_bits_filter_3 ... bench: 1,161,331 ns/iter (+/- 124,379) test bench_8_bits_filter_4 ... bench: 3,704,653 ns/iter (+/- 659,212) test bench_8_bits_filter_5 ... bench: 13,863,376 ns/iter (+/- 2,134,142) test result: ok. 0 passed; 0 failed; 0 ignored; 30 measured Running target/release/interlacing-3a5b64514b03c920 running 10 tests test bench_deinterlace_16_bits ... bench: 144,075,159 ns/iter (+/- 3,388,596) test bench_deinterlace_1_bits ... bench: 2,848,418 ns/iter (+/- 480,685) test bench_deinterlace_2_bits ... bench: 5,608,614 ns/iter (+/- 224,235) test bench_deinterlace_4_bits ... bench: 11,114,761 ns/iter (+/- 943,506) test bench_deinterlace_8_bits ... bench: 71,918,245 ns/iter (+/- 5,374,438) test bench_interlace_16_bits ... bench: 186,786,301 ns/iter (+/- 108,170,992) test bench_interlace_1_bits ... bench: 3,298,814 ns/iter (+/- 299,550) test bench_interlace_2_bits ... bench: 6,615,721 ns/iter (+/- 886,353) test bench_interlace_4_bits ... bench: 13,148,900 ns/iter (+/- 1,015,178) test bench_interlace_8_bits ... bench: 86,973,845 ns/iter (+/- 2,876,862) test result: ok. 0 passed; 0 failed; 0 ignored; 10 measured Running target/release/oxipng-0aa81de33b66b9ba running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured Running target/release/oxipng-8dc3c38a24f45aca running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured Running target/release/reductions-706f4e9274315f2d running 20 tests test bench_16_to_8_bits ... bench: 1,462,010 ns/iter (+/- 245,041) test bench_2_to_1_bits ... bench: 9,090,966 ns/iter (+/- 949,980) test bench_4_to_1_bits ... bench: 17,291,283 ns/iter (+/- 2,295,195) test bench_4_to_2_bits ... bench: 18,106,877 ns/iter (+/- 3,257,698) test bench_8_to_1_bits ... bench: 33,967,094 ns/iter (+/- 1,963,155) test bench_8_to_2_bits ... bench: 34,834,040 ns/iter (+/- 2,992,472) test bench_8_to_4_bits ... bench: 36,904,665 ns/iter (+/- 2,767,626) test bench_palette_duplicate_reduction ... bench: 5,113,086 ns/iter (+/- 449,931) test bench_palette_full_reduction ... bench: 14,751,743 ns/iter (+/- 1,412,029) test bench_palette_unused_reduction ... bench: 9,639,936 ns/iter (+/- 462,188) test bench_rgb_to_grayscale_16 ... bench: 29,428,159 ns/iter (+/- 3,303,357) test bench_rgb_to_grayscale_8 ... bench: 7,224,088 ns/iter (+/- 951,724) test bench_rgb_to_palette_8 ... bench: 34,767,333 ns/iter (+/- 1,765,318) test bench_rgba_to_grayscale_16 ... bench: 28,374,910 ns/iter (+/- 1,495,313) test bench_rgba_to_grayscale_8 ... bench: 14,288,546 ns/iter (+/- 1,106,506) test bench_rgba_to_grayscale_alpha_16 ... bench: 20,908,298 ns/iter (+/- 1,351,356) test bench_rgba_to_grayscale_alpha_8 ... bench: 10,504,579 ns/iter (+/- 1,093,582) test bench_rgba_to_palette_8 ... bench: 42,195,599 ns/iter (+/- 1,868,201) test bench_rgba_to_rgb_16 ... bench: 15,955,026 ns/iter (+/- 2,242,433) test bench_rgba_to_rgb_8 ... bench: 8,185,576 ns/iter (+/- 1,116,708) test result: ok. 0 passed; 0 failed; 0 ignored; 20 measured --- benches/deflate.rs | 140 +++++++---------------- benches/filters.rs | 249 +++++++++++++++-------------------------- benches/interlacing.rs | 100 +++++------------ benches/reductions.rs | 160 ++++++++++---------------- 4 files changed, 221 insertions(+), 428 deletions(-) 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(); }); }