diff options
author | Sam Maier <smaier@chromium.org> | 2019-11-14 22:34:40 +0000 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-11-14 22:34:40 +0000 |
commit | e5c4d8c45ed18f84ea68f5029c9bceb1f67268b8 (patch) | |
tree | ad0d553989bca5e260ae77958f1a85e875ec0afd | |
parent | f4f46747bd5c68320126fea54d6993ae0b5c3edd (diff) | |
download | zlib-e5c4d8c45ed18f84ea68f5029c9bceb1f67268b8.tar.gz |
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: Adenilson Cavalcanti <cavalcantii@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#715455}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: 3857767142ed56b1ec44a8cdda52472e1b357cc3
-rw-r--r-- | google/compression_utils_portable.cc | 12 | ||||
-rw-r--r-- | google/compression_utils_portable.h | 1 |
2 files changed, 11 insertions, 2 deletions
diff --git a/google/compression_utils_portable.cc b/google/compression_utils_portable.cc index 21338b5..191e349 100644 --- a/google/compression_utils_portable.cc +++ b/google/compression_utils_portable.cc @@ -66,20 +66,28 @@ int GzipCompressHelper(Bytef* dest, void* (*malloc_fn)(size_t), void (*free_fn)(void*)) { 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 // 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, // 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, Bytef* dest, uLongf* dest_length, const Bytef* source, uLong source_length, + int compression_level, void* (*malloc_fn)(size_t), void (*free_fn)(void*)) { + if (compression_level < 1 || compression_level > 9) { + compression_level = Z_DEFAULT_COMPRESSION; + } + z_stream stream; // FIXME(cavalcantii): z_const is not defined as 'const'. @@ -118,7 +126,7 @@ int CompressHelper(WrapperType wrapper_type, 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, Z_DEFAULT_STRATEGY); if (err != Z_OK) diff --git a/google/compression_utils_portable.h b/google/compression_utils_portable.h index 7c3753b..cd004e8 100644 --- a/google/compression_utils_portable.h +++ b/google/compression_utils_portable.h @@ -39,6 +39,7 @@ int CompressHelper(WrapperType wrapper_type, uLongf* dest_length, const Bytef* source, uLong source_length, + int compression_level, void* (*malloc_fn)(size_t), void (*free_fn)(void*)); |