Commit 38577671 authored by Sam Maier's avatar Sam Maier Committed by Commit Bot

zlib: Allowing compression level to be selected in utils

Allow users to set the compression level while using CompressHelper().
There is a 2x to 4x compression speed difference between levels [1..9], where
it is possible to trade speed for better compression ratios
(and vice-versa).

It is up the user to experiment with the data to find the sweet spot
for its application (default compression level is 6).

Bug: 833361
Change-Id: Ia710cc7322707ace242133b283610eaa48def31f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1912791
Commit-Queue: Adenilson Cavalcanti <cavalcantii@chromium.org>
Commit-Queue: Sam Maier <smaier@chromium.org>
Auto-Submit: Sam Maier <smaier@chromium.org>
Reviewed-by: default avatarAdenilson Cavalcanti <cavalcantii@chromium.org>
Cr-Commit-Position: refs/heads/master@{#715455}
parent 7fd71f16
...@@ -66,20 +66,28 @@ int GzipCompressHelper(Bytef* dest, ...@@ -66,20 +66,28 @@ int GzipCompressHelper(Bytef* dest,
void* (*malloc_fn)(size_t), void* (*malloc_fn)(size_t),
void (*free_fn)(void*)) { void (*free_fn)(void*)) {
return CompressHelper(GZIP, dest, dest_length, source, source_length, return CompressHelper(GZIP, dest, dest_length, source, source_length,
malloc_fn, free_fn); Z_DEFAULT_COMPRESSION, malloc_fn, free_fn);
} }
// This code is taken almost verbatim from third_party/zlib/compress.c. The only // This code is taken almost verbatim from third_party/zlib/compress.c. The only
// difference is deflateInit2() is called which allows different window bits to // difference is deflateInit2() is called which allows different window bits to
// be set. > 16 causes a gzip header to be emitted rather than a zlib header, // be set. > 16 causes a gzip header to be emitted rather than a zlib header,
// and negative causes no header to emitted. // and negative causes no header to emitted.
//
// Compression level can be a number from 1-9, with 1 being the fastest, 9 being
// the best compression. The default, which the GZIP helper uses, is 6.
int CompressHelper(WrapperType wrapper_type, int CompressHelper(WrapperType wrapper_type,
Bytef* dest, Bytef* dest,
uLongf* dest_length, uLongf* dest_length,
const Bytef* source, const Bytef* source,
uLong source_length, uLong source_length,
int compression_level,
void* (*malloc_fn)(size_t), void* (*malloc_fn)(size_t),
void (*free_fn)(void*)) { void (*free_fn)(void*)) {
if (compression_level < 1 || compression_level > 9) {
compression_level = Z_DEFAULT_COMPRESSION;
}
z_stream stream; z_stream stream;
// FIXME(cavalcantii): z_const is not defined as 'const'. // FIXME(cavalcantii): z_const is not defined as 'const'.
...@@ -118,7 +126,7 @@ int CompressHelper(WrapperType wrapper_type, ...@@ -118,7 +126,7 @@ int CompressHelper(WrapperType wrapper_type,
stream.opaque = static_cast<voidpf>(0); stream.opaque = static_cast<voidpf>(0);
} }
int err = deflateInit2(&stream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, int err = deflateInit2(&stream, compression_level, Z_DEFLATED,
ZlibStreamWrapperType(wrapper_type), kZlibMemoryLevel, ZlibStreamWrapperType(wrapper_type), kZlibMemoryLevel,
Z_DEFAULT_STRATEGY); Z_DEFAULT_STRATEGY);
if (err != Z_OK) if (err != Z_OK)
......
...@@ -39,6 +39,7 @@ int CompressHelper(WrapperType wrapper_type, ...@@ -39,6 +39,7 @@ int CompressHelper(WrapperType wrapper_type,
uLongf* dest_length, uLongf* dest_length,
const Bytef* source, const Bytef* source,
uLong source_length, uLong source_length,
int compression_level,
void* (*malloc_fn)(size_t), void* (*malloc_fn)(size_t),
void (*free_fn)(void*)); void (*free_fn)(void*));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment