]> git.lizzy.rs Git - rust.git/commitdiff
Use fast decompression in `deflate_bytes`.
authorNicholas Nethercote <nnethercote@mozilla.com>
Thu, 20 Oct 2016 02:53:27 +0000 (13:53 +1100)
committerNicholas Nethercote <nnethercote@mozilla.com>
Thu, 20 Oct 2016 04:08:01 +0000 (15:08 +1100)
This commit changes the parameters of `deflate` to do faster,
lower-quality compression. For the compression of LLVM bytecode -- which
is the main use of `deflate_bytes` -- it makes compression almost twice
as fast while the size of the compressed files is only ~2% worse.

src/libflate/lib.rs

index 89df931da0299d01c3b40f2079fb2fd4072c2d20..3c608ef9c9268b5554fae5617d108c42e8015ea5 100644 (file)
@@ -94,11 +94,14 @@ fn tinfl_decompress_mem_to_heap(psrc_buf: *const c_void,
                                     -> *mut c_void;
 }
 
-const LZ_NORM: c_int = 0x80;  // LZ with 128 probes, "normal"
+const LZ_FAST: c_int = 0x01;  // LZ with 1 probe, "fast"
+const TDEFL_GREEDY_PARSING_FLAG: c_int = 0x04000; // fast greedy parsing instead of lazy parsing
 
-/// Compress a buffer without writing any sort of header on the output.
+/// Compress a buffer without writing any sort of header on the output. Fast
+/// compression is used because it is almost twice as fast as default
+/// compression and the compression ratio is only marginally worse.
 pub fn deflate_bytes(bytes: &[u8]) -> Bytes {
-    let flags = LZ_NORM;
+    let flags = LZ_FAST | TDEFL_GREEDY_PARSING_FLAG;
     unsafe {
         let mut outsz: size_t = 0;
         let res = tdefl_compress_mem_to_heap(bytes.as_ptr() as *const _,