25% speed improvement in filter mode 2 by using iter instead of for

This commit is contained in:
Joshua Holmer 2016-05-02 14:49:30 -04:00
parent c0fddfe4e6
commit 32c35596ea
3 changed files with 12 additions and 7 deletions

View file

@ -1,5 +1,6 @@
**Version 0.6.1 (unreleased)** **Version 0.6.1 (unreleased)**
- Minor compression improvement on interlaced images - Minor compression improvement on interlaced images
- Performance optimizations
**Version 0.6.0** **Version 0.6.0**
- Fix issue where output directory would not be created if it did not exist - Fix issue where output directory would not be created if it did not exist

View file

@ -21,6 +21,9 @@ name = "oxipng"
path = "src/main.rs" path = "src/main.rs"
doc = false doc = false
[profile.release]
debug = true
[dependencies] [dependencies]
bit-vec = "^0.4.2" bit-vec = "^0.4.2"
byteorder = "^0.5.0" byteorder = "^0.5.0"

View file

@ -1081,13 +1081,14 @@ fn filter_line(filter: u8, bpp: usize, data: &[u8], last_line: &[u8]) -> Vec<u8>
} }
} }
2 => { 2 => {
for (i, byte) in data.iter().enumerate() { if last_line.is_empty() {
if last_line.is_empty() { filtered.extend_from_slice(data);
filtered.push(*byte); } else {
} else { filtered.extend_from_slice(&data.iter()
filtered.push(byte.wrapping_sub(last_line[i])); .zip(last_line.iter())
}; .map(|(cur, last)| cur.wrapping_sub(*last))
} .collect::<Vec<u8>>());
};
} }
3 => { 3 => {
for (i, byte) in data.iter().enumerate() { for (i, byte) in data.iter().enumerate() {