Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Split ZopfliInitHash to:
Allocate Hash outside of ZopfliLZ77Greedy and ZopfliLZ77OptimalRun that
pass it further to functions previously allocating them. Do the same for
costs malloc'd array.
Reason for this change:
^ speeds up Zopfli (especially on smaller blocks) by reducing amount of
sys time from ~7s to 0.1s on x64 Linux for ~5m compression time and from
~1m to 0.1s on ARMv7 Linux for 13m compression time.
^^ fixes a large amount of iterations crash on some ARM devices that due
to architecture or older kernel (not sure which) don't handle too
aggressive heap allocation and freeing well.
PS. You don't want to know how many hours I wasted guessing what was wrong on Odroid U3 when gdb showed false-positives - without pthreads it was running into assert in ZopfliVerifyLenDist, with pthreads it was crashing on free in ZopfliCleanHash. :)
PS2: TCmalloc didn't help on Odroid U3, still crash due to heap problems occured, before this fix.