Commit graph

431 commits

Author SHA1 Message Date
Ingvar Stepanyan
bb332fa6d7
Don't override global rayon pool (#211)
Rayon uses a singleton global pool.

By default it's set to a regular spawn handler with number of logical CPU cores, but it can be overridden by Rust applications to customize number of threads, spawn handlers, exit handlers and other options.

Such customization should be usually done at the app level, because if a single library initialises the global pool, then Rayon will prevent any further overrides and they will error out. This can cause conflicts between libraries or library and user code and make them impossible to use together.

Hence, I've removed the `threads` option from the `Options` struct and instead moved initialisation to the CLI part of the codebase (main.rs).

Users of the library that didn't depend on custom `threads` number can keep using it as before - they'll still get same number of threads as number of logical CPU cores, while users who need fine-tuning, can do that by customizing rayon pool themselves at the top level of the app.

Note: another alternative to keep the option could've been to use `ThreadPoolBuilder::build` + `ThreadPool::install` to use a local pool just within OxiPNG, but that would ignore any customizations made by users in top-level pool and would prevent usage on targets that require custom spawn handlers like WebAssembly. As such, I've decided to avoid it.

Co-authored-by: Josh Holmer <jholmer.in@gmail.com>
2020-04-17 04:49:40 -04:00
Ingvar Stepanyan
4fd9203800 Bring back RefCell
It was accidentally removed as part of #208.
Fixes #214.
2020-04-16 18:31:24 -04:00
Ingvar Stepanyan
9b8361171f Revert "Unbreak no-default-features"
This reverts commit 4ef92089d5.
2020-04-16 18:31:24 -04:00
dependabot-preview[bot]
11a7b68c4f Bump num_cpus from 1.12.0 to 1.13.0
Bumps [num_cpus](https://github.com/seanmonstar/num_cpus) from 1.12.0 to 1.13.0.
- [Release notes](https://github.com/seanmonstar/num_cpus/releases)
- [Changelog](https://github.com/seanmonstar/num_cpus/blob/master/CHANGELOG.md)
- [Commits](https://github.com/seanmonstar/num_cpus/compare/v1.12.0...v1.13.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-16 10:54:52 +00:00
dependabot-preview[bot]
9098de22c1 Bump image from 0.23.2 to 0.23.3
Bumps [image](https://github.com/image-rs/image) from 0.23.2 to 0.23.3.
- [Release notes](https://github.com/image-rs/image/releases)
- [Changelog](https://github.com/image-rs/image/blob/master/CHANGES.md)
- [Commits](https://github.com/image-rs/image/compare/v0.23.2...v0.23.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-16 09:55:56 +00:00
Josh Holmer
139b2878d0 Fix benchmark compilation
Closes #197
2020-04-15 13:26:28 -04:00
Josh Holmer
53368fcbbf Reexport indexmap structs 2020-04-15 13:26:28 -04:00
Josh Holmer
4ef92089d5 Unbreak no-default-features
In order to avoid problems with mutable references,
the approach is to use the eval sender for non-parallel.
Computations will still be done synchronously
with the fake synchronous rayon module.
2020-04-15 13:26:28 -04:00
Josh Holmer
43735086d1 Migrate to Github Actions
Closes #206
2020-04-15 13:26:28 -04:00
Ingvar Stepanyan
63e36ed43f
Simplify comparer (#208)
* Skip baselines earlier in the evaluator

We know that we'll throw them away anyway, so there is no point in even sending them to Sender and comparing them with others once we used them for the best candidate size.

* Simplify comparison logic
2020-04-14 17:09:52 -04:00
Ingvar Stepanyan
f747269151
Respect deadline in miniz (#200) 2020-03-31 23:31:17 -04:00
Ingvar Stepanyan
878bbedb37
Improve performance consistency (#202)
* Improve performance consistency

Switch from HashMap / HashSet to IndexMap / IndexSet for consistent iteration order of various options and, as a result, more predictable performance.
2020-03-31 21:54:05 -04:00
Josh Holmer
4b1a47e902 Bump minimum rust version to 1.41 2020-03-31 20:57:50 -04:00
Ingvar Stepanyan
121558bf5c
Add libdeflater as an option (#203)
libdeflater is a Rust wrapper around
[libdeflate](https://github.com/ebiggers/libdeflate) - an alternative
heavily optimised library for deflate/zlib/gzip compression and
decompression that is intended for situations where upper bounds of the
output are well-known.

In my benchmarks on test files in the repo it has shown to be usually
both slightly faster and providing better compressed output than
cloudflare-zlib, but in some cases showing the opposite, so rather
than swapping defaults, it's currently provided as another option,
similarly to zopfli.

Since it's not strictly better in all cases, I'm not providing median
numbers, but you can check distribution histograms for time and size
differences here (all using `oxipng -o 6 -t 6 -P`):
https://docs.google.com/spreadsheets/d/1WOKgeYZBhLkQvMGAC36snN4azilElzOFhx63RJu0EZY/edit?usp=sharing
2020-03-31 20:24:57 -04:00
Kornel
681089f8c7
Remove the concept of size bias (#199)
Closes #198
2020-03-31 19:28:22 -04:00
dependabot-preview[bot]
d417a712d3 Bump image from 0.23.0 to 0.23.2
Bumps [image](https://github.com/image-rs/image) from 0.23.0 to 0.23.2.
- [Release notes](https://github.com/image-rs/image/releases)
- [Changelog](https://github.com/image-rs/image/blob/master/CHANGES.md)
- [Commits](https://github.com/image-rs/image/compare/v0.23.0...v0.23.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-19 04:40:46 +00:00
dependabot-preview[bot]
6593a5f6fe Bump itertools from 0.8.2 to 0.9.0
Bumps [itertools](https://github.com/bluss/rust-itertools) from 0.8.2 to 0.9.0.
- [Release notes](https://github.com/bluss/rust-itertools/releases)
- [Changelog](https://github.com/rust-itertools/itertools/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bluss/rust-itertools/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-19 04:03:14 +00:00
dependabot[bot]
e33d120481
Bump minimist from 1.2.0 to 1.2.5 (#201)
Bumps [minimist](https://github.com/substack/minimist) from 1.2.0 to 1.2.5.
- [Release notes](https://github.com/substack/minimist/releases)
- [Commits](https://github.com/substack/minimist/compare/1.2.0...1.2.5)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-03-18 14:07:48 -04:00
Josh Holmer
39ff7cfd5c Bump all dependency patch versions 2020-03-02 01:50:10 -05:00
Josh Holmer
bded03908f Silence cognitive complexity warnings 2020-03-02 01:45:04 -05:00
Josh Holmer
b9dc9e72bb Update image crate to 0.23 2020-03-02 01:44:53 -05:00
Josh Holmer
0e3c0b922d Enable more clippy lints and fix some clippy issues 2020-01-19 05:22:14 -05:00
Josh Holmer
139d29cc9b Version 2.3.0 2019-10-07 23:34:23 -04:00
Ingvar Stepanyan
659717cb1f Allow usage on wasm32-unknown-unknown target (#194)
* Avoid using time API when we don't need it

This avoids a syscall to the time API when the result is ignored later anyway.

This allows to use the library with default options on wasm32-unknown-unknown, where the unimplemented syscall would panic otherwise.

* eval_send doesn't need to be an Option

We can drop the value manually, thus avoiding unwrap on each access.

* Keep single `use rayon::prelude::*`

If either `rayon` is already imported, then `rayon::prelude::*` should always resolve.

* Extract comparator

* Fully enable non-parallel mode
2019-09-25 13:01:53 -04:00
Kamal Ahmad
68db304a2a Don't apply alpha optimizations unless --alpha is paseed (#187)
Closes #164
2019-09-24 11:33:50 -04:00
Kornel
e473958377 Palette sorting (#193)
* Implement alpha and luminosity palette sorting

* Also sort when reducing to palette

* Bump Rust version

* Color comparison
2019-09-10 18:13:05 -04:00
Kamal Ahmad
68b763bcdd Reduce alloc in filtering/unfiltering by reusing buffers (#191) 2019-09-04 11:09:54 -04:00
Kornel
239ca81db7 Update dependencies (#186)
* Update dependencies

* Bump Rust to 1.34
2019-08-04 12:12:08 -04:00
Felix Hanau
4adcc5e14a Interlacing fixes (#182)
* Fix decoding interlaced images with height or width <= 2

* Add Issue 175 test case

* Deinterlace tiny images correctly
2019-07-24 09:16:13 -04:00
Daniel Wong
4cb26d462e Allow disabling all alpha optimizations (#181)
Fixes a bug where oxipng would crash if alpha optimizations were all disabled.
2019-07-23 14:21:46 -04:00
Josh Holmer
9408a50b1b Version 2.2.2 2019-07-03 19:21:21 -04:00
Josh Holmer
b2364d2398 Update dependencies 2019-07-03 19:14:42 -04:00
Kamal Ahmad
34ee78dbbc Preallocate memory in reduced_alpha_to_up (#180) 2019-06-27 13:44:49 -04:00
Felix Hanau
56b94542a6 Fix decoding interlaced images with height or width <= 2 (#175) 2019-06-27 13:44:34 -04:00
Felix Hanau
c09e8f6d12 Make filter, zlib level and strategy deterministic (#179) 2019-06-27 10:05:35 -04:00
Hugo Locurcio
5b5aeaa683 Enable link-time optimization for release builds (#177)
This creates faster and smaller binaries, at the cost of longer
build times.
2019-06-26 09:09:26 -04:00
Josh Holmer
c60bd82da7 Add test case for #171 2019-06-20 14:07:47 -04:00
Josh Holmer
9d8ce5e4ee Disable large image test for 32-bit systems
Closes #176
2019-06-20 13:38:59 -04:00
Josh Holmer
458e9f64a7 Fix --strip safe which was broken in 5b1121c9d 2019-06-19 15:27:43 -04:00
Josh Holmer
3809421de7 Use image 0.21.2 with bugfixes from crates.io 2019-06-19 15:21:41 -04:00
Josh Holmer
5b1121c9dd Make order of chunks deterministic by sorting chunks
Closes #174
2019-06-18 13:29:17 -04:00
Felix Hanau
5dcfe44ccd Fix info message and typos (#172) 2019-06-18 13:06:37 -04:00
Felix Hanau
cc290c0bdb Fixes for grey scale reduction (#171) 2019-06-18 13:04:26 -04:00
Josh Holmer
9c6190c1ff Version 2.2.1 2019-03-26 14:19:34 -04:00
Josh Holmer
7bd7c0cfc9 Bump image crate to handle large images
Closes #167 and #168
2019-03-26 14:14:01 -04:00
Josh Holmer
b18414ba8c
Fix display of benchmarks in README (#165) 2019-02-04 10:03:58 -05:00
Josh Holmer
6430166ec9 Add to changelog as well [ci skip] 2019-02-01 17:59:15 -05:00
Josh Holmer
c7da7f2073 Bump minimum supported Rust version 2019-02-01 17:58:24 -05:00
Josh Holmer
bd6e7dbbb1 Version 2.2.0 2019-02-01 17:30:16 -05:00
Josh Holmer
d86bc80f43 Prepare for next release 2019-02-01 17:27:03 -05:00