From e5c4d8c45ed18f84ea68f5029c9bceb1f67268b8 Mon Sep 17 00:00:00 2001 From: Sam Maier Date: Thu, 14 Nov 2019 22:34:40 +0000 Subject: 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 Commit-Queue: Sam Maier Auto-Submit: Sam Maier Reviewed-by: Adenilson Cavalcanti Cr-Original-Commit-Position: refs/heads/master@{#715455} Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src Cr-Mirrored-Commit: 3857767142ed56b1ec44a8cdda52472e1b357cc3 --- google/compression_utils_portable.cc | 12 ++++++++++-- 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(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*)); -- cgit v1.2.3