summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Maier <smaier@chromium.org>2019-11-14 22:34:40 +0000
committerCommit Bot <commit-bot@chromium.org>2019-11-14 22:34:40 +0000
commite5c4d8c45ed18f84ea68f5029c9bceb1f67268b8 (patch)
treead0d553989bca5e260ae77958f1a85e875ec0afd
parentf4f46747bd5c68320126fea54d6993ae0b5c3edd (diff)
downloadzlib-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.cc12
-rw-r--r--google/compression_utils_portable.h1
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*));