diff options
| -rw-r--r-- | Cargo.lock | 1 | ||||
| -rw-r--r-- | Cargo.toml | 1 | ||||
| -rw-r--r-- | src/renderer.rs | 7 | 
3 files changed, 5 insertions, 4 deletions
| @@ -605,6 +605,7 @@ dependencies = [   "color-eyre",   "colorgrad",   "criterion", + "crossbeam-channel",   "flate2",   "fnv",   "image", @@ -15,6 +15,7 @@ brotli = "3.3.4"  clap = { version = "4.1.0", features = ["derive"] }  color-eyre = "0.6.2"  colorgrad = "0.6.2" +crossbeam-channel = "0.5.6"  flate2 = "1.0.25"  fnv = "1.0.7"  image = "0.24.5" diff --git a/src/renderer.rs b/src/renderer.rs index de65da6..bb33ddc 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -1,4 +1,4 @@ -use std::{fs, mem, path::Path, sync::mpsc, thread}; +use std::{fs, path::Path, thread};  use color_eyre::{      eyre::{bail, Result}, @@ -147,7 +147,7 @@ pub fn lazy_colorization<P: AsRef<Path>, F: Fn(usize) + Send + Sync>(      }      type Job = (u64, u64, Vec<u8>); -    let (tx, rx) = mpsc::sync_channel::<Job>(30); +    let (tx, rx) = crossbeam_channel::bounded::<Job>(30);      thread::scope(|s| {          let saver = s.spawn(move || loop { @@ -165,7 +165,7 @@ pub fn lazy_colorization<P: AsRef<Path>, F: Fn(usize) + Send + Sync>(          layer              .into_parallel_tiles() -            .try_for_each(|(tile_x, tile_y, tile)| { +            .try_for_each_with(tx, |tx, (tile_x, tile_y, tile)| {                  let colorized = colorize_tile(&tile, max.into());                  let data = layer::compress_png_as_bytes(&colorized)?;                  tx.send((tile_x, tile_y, data))?; @@ -173,7 +173,6 @@ pub fn lazy_colorization<P: AsRef<Path>, F: Fn(usize) + Send + Sync>(                  Ok::<(), Report>(())              })?; -        mem::drop(tx);          saver.join().unwrap()?;          Ok::<_, Report>(())      })?; | 
