Further perf improv attempts

Reuse the buffer when decompressing the frames
This commit is contained in:
Lol3rrr
2024-09-22 18:12:31 +02:00
parent bead8549d4
commit c1e85d77dc
2 changed files with 22 additions and 5 deletions

View File

@@ -39,6 +39,25 @@ impl<'b> Frame<'b> {
Some(self.inner.as_ref()) Some(self.inner.as_ref())
} }
pub fn decompress_with_buf<'s, 'buf>(&'s self, buf: &'b mut Vec<u8>) -> Result<&'buf [u8], ()> where 's: 'buf {
if !self.compressed {
return Ok(&self.inner);
}
let uncompressed_len = snap::raw::decompress_len(&self.inner).map_err(|e| {
println!("Getting decompress len");
()
})?;
buf.resize(uncompressed_len, 0);
snap::raw::Decoder::new().decompress(&self.inner, buf.as_mut_slice()).map_err(|e| {
println!("Decompressing");
()
})?;
Ok(buf.as_slice())
}
pub fn decompress(&mut self) -> Result<(), ()> { pub fn decompress(&mut self) -> Result<(), ()> {
if !self.compressed { if !self.compressed {
return Ok(()); return Ok(());

View File

@@ -107,11 +107,9 @@ where
let mut entity_states = Vec::new(); let mut entity_states = Vec::new();
for mut frame in frames.into_iter() { let mut buffer = Vec::new();
frame for frame in frames.into_iter() {
.decompress() let data = frame.decompress_with_buf(&mut buffer).map_err(|e| FirstPassError::DecompressFrame)?;
.map_err(|e| FirstPassError::DecompressFrame)?;
let data = frame.data().ok_or(FirstPassError::NoDataFrame)?;
match frame.cmd { match frame.cmd {
DemoCommand::FileHeader => { DemoCommand::FileHeader => {