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
This commit is contained in:
parent
f2c16696a5
commit
b67083da0c
4 changed files with 221 additions and 428 deletions
|
|
@ -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();
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue