Last active
May 28, 2024 05:06
-
-
Save jedisct1/a231c64de60ebfd700e7eb9882beaed4 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use flate2::Compression; | |
use std::io::prelude::*; | |
use benchmark_simple::*; | |
fn memusage() -> usize { | |
#[cfg(target_arch = "wasm32")] | |
let z = core::arch::wasm32::memory_grow(0, 0); | |
#[cfg(not(target_arch = "wasm32"))] | |
let z = 0; | |
z | |
} | |
fn main() { | |
let bench = Bench::new(); | |
let options = &Options { | |
iterations: 1, | |
warmup_iterations: 1, | |
min_samples: 5, | |
max_samples: 10, | |
max_rsd: 1.0, | |
..Default::default() | |
}; | |
let corpus = include_bytes!("corpus.txt"); | |
let mut mem = memusage(); | |
let res = bench.run(options, || { | |
let mut compressor = flate2::bufread::GzEncoder::new(&corpus[..], Compression::new(9)); | |
let mut compressed = Vec::new(); | |
compressor.read_to_end(&mut compressed).unwrap(); | |
compressed | |
}); | |
println!("Compression speed: {}", res.throughput(corpus.len() as _)); | |
println!("Compression memory usage: {}", memusage() - mem); | |
let mut compressor = flate2::bufread::GzEncoder::new(&corpus[..], Compression::new(9)); | |
let mut compressed = Vec::new(); | |
compressor.read_to_end(&mut compressed).unwrap(); | |
println!("Compressed size: {}", compressed.len()); | |
mem = memusage(); | |
let res = bench.run(options, || { | |
let mut decompressor = flate2::bufread::GzDecoder::new(&compressed[..]); | |
let mut decompressed = Vec::new(); | |
decompressor.read_to_end(&mut decompressed).unwrap(); | |
}); | |
println!("Decompression speed: {}", res.throughput(corpus.len() as _)); | |
println!("Decompression memory usage: {}", memusage() - mem); | |
} |
If compression speed matters, the Zig implementation of zlib
is 50% faster, and can easily be wrapped in a Rust crate.
Compression speed: 20.74 M/s
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
WebAssembly (
wasmtime
):