Commit graph

18 commits

Author SHA1 Message Date
andrews05
71290acc62
Reduce memory usage of fast evaluation (#713)
This is an experiment I started a while ago before life happened. It
reduces memory usage of fast evaluation (-o2 and lower), bringing it
inline with normal (slow) evaluation. It does this by not retaining the
filtered image data of the evaluations, but instead retaining the row
filters that were used in each line so it can be quickly re-filtered
when required. This does incur a tiny performance penalty, but it's
negligible even at `-o0`.
Although this is fully functional, there are a few rough spots in the
code so I'm just opening it as a draft for now.

```
PR -sao6
       70.08 real       614.36 user         2.66 sys
          2024243200  maximum resident set size
          1839339520  peak memory footprint

PR -sao2
       11.16 real        60.85 user         1.33 sys
          1982562304  maximum resident set size
          1842173824  peak memory footprint

PR -sao2 -t1
       55.11 real        53.85 user         0.76 sys
           429457408  maximum resident set size
           245008064  peak memory footprint

master -sao6
       67.70 real       616.07 user         2.72 sys
          2043379712  maximum resident set size
          1838340416  peak memory footprint

master -sao2
       11.53 real        60.63 user         1.25 sys
          2753396736  maximum resident set size
          2283741440  peak memory footprint

master -sao2 -t1
       54.29 real        53.55 user         0.72 sys
           626311168  maximum resident set size
           305252544  peak memory footprint
```

Note that this involves some refactoring of `RowFilter` and the new
`FilterStrategy`. These are breaking changes so it will ultimately be
destined for v10. One advantage to this new structure is it opens the
door for future changes such as allowing the Brute strategy to take a
parameter for the number of lines.
2025-09-19 20:36:17 +02:00
Alejandro González
5f0a0d6938
Fix new Clippy lints 2025-01-30 18:39:23 +01:00
Kornel
a72bc945fc Clippy 2025-01-02 09:15:24 +13:00
Alejandro González
0608ab9cab
Fix some new nightly Clippy lints and run rustfmt with prettier config 2024-02-20 19:12:35 +01:00
andrews05
ea5f1884be
Refactor aux chunk handling (#505) 2023-05-21 15:34:23 -04:00
andrews05
131a3c6af7
🚀 Revamp alpha optimisation (#475) 2022-12-10 21:14:50 -05:00
andrews05
a41d7de348
New filter strategies (#461)
* Refactor filters as enum

* Include filter byte in filter output

* Add entropy filter

* Add bigrams filter

* Add bigram entropy filter

* Add brute filter

* Replace bit-vec

* Add tests and benches

* Show filters in help

* Use FxHasher in color to palette

* Use windows function for minor improvement
2022-11-19 08:49:25 -05:00
Josh Holmer
139b2878d0 Fix benchmark compilation
Closes #197
2020-04-15 13:26:28 -04:00
Josh Holmer
d110949d2a Version 2.0.0 2018-07-20 19:19:20 -04:00
Kornel
c99b3778b2 Expose only one internal module specifically for tests (#123)
Closes #98
2018-07-17 23:38:11 -04:00
Josh Holmer
88f5bb0931 Hide modules from documentation, and only export structs used in options or return types 2018-01-10 10:37:01 -05:00
Josh Holmer
0db03c6faf Fix new clippy lints 2017-09-03 23:36:38 -04:00
Josh Holmer
413f1aac7c Automatically change transparent pixels to black 2017-07-24 08:47:27 -04:00
Josh Holmer
af76f11f36 Bump dependencies 2017-02-13 08:51:00 -05:00
Josh Holmer
33f1fad711 Minor refactoring 2016-12-03 15:18:11 -05:00
Joshua Holmer
15e41c9c6d Fix benchmarks broken by adding --fix 2016-05-02 13:20:27 -04:00
Joshua Holmer
b67083da0c 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
2016-04-20 11:30:08 -04:00
Joshua Holmer
f2c16696a5 Add benchmark suite using cargo
Closes #7
2016-04-19 23:26:05 -04:00