From 34dc14d6b272247c29732f884502ea8b09946e2a Mon Sep 17 00:00:00 2001
From: ErrorNoInternet <errornointernet@envs.net>
Date: Thu, 13 Mar 2025 19:49:08 -0400
Subject: [PATCH] perf(replay/recorder): buffer writes to zip file

---
 src/replay/recorder.rs | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/replay/recorder.rs b/src/replay/recorder.rs
index 7e2ae2f..3654ce0 100644
--- a/src/replay/recorder.rs
+++ b/src/replay/recorder.rs
@@ -9,14 +9,14 @@ use log::debug;
 use serde_json::json;
 use std::{
     fs::File,
-    io::Write,
+    io::{BufWriter, Write},
     time::{Instant, SystemTime, UNIX_EPOCH},
 };
 use zip::{ZipWriter, write::SimpleFileOptions};
 
 #[derive(Resource)]
 pub struct Recorder {
-    zip_writer: ZipWriter<File>,
+    zip_writer: BufWriter<ZipWriter<File>>,
     start: Instant,
     server: String,
     pub should_ignore_compression: bool,
@@ -33,20 +33,20 @@ impl Recorder {
         );
         zip_writer.start_file("recording.tmcpr", SimpleFileOptions::default())?;
         Ok(Self {
-            zip_writer,
+            zip_writer: BufWriter::new(zip_writer),
             start: Instant::now(),
             server,
             should_ignore_compression,
         })
     }
 
-    pub fn finish(mut self) -> Result<()> {
+    pub fn finish(self) -> Result<()> {
         debug!("finishing replay recording");
 
         let elapsed = self.start.elapsed().as_millis();
-        self.zip_writer
-            .start_file("metaData.json", SimpleFileOptions::default())?;
-        self.zip_writer.write_all(
+        let mut zip_writer = self.zip_writer.into_inner()?;
+        zip_writer.start_file("metaData.json", SimpleFileOptions::default())?;
+        zip_writer.write_all(
             json!({
                 "singleplayer": false,
                 "serverName": self.server,
@@ -61,7 +61,7 @@ impl Recorder {
             .to_string()
             .as_bytes(),
         )?;
-        self.zip_writer.finish()?;
+        zip_writer.finish()?;
 
         debug!("finished replay recording");
         Ok(())