From a11567b10e49eccc1869b317b38c5e8d978ac127 Mon Sep 17 00:00:00 2001 From: Florian Gebhardt Date: Thu, 21 Mar 2024 06:47:13 +0100 Subject: [PATCH] perf: multithreading recursive mode (#13) --- Cargo.lock | 1 + Cargo.toml | 1 + src/image_util.rs | 1 - src/main.rs | 7 ++++--- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4d52496..7285bc4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -962,6 +962,7 @@ dependencies = [ "env_logger", "image", "log", + "rayon", "thiserror", ] diff --git a/Cargo.toml b/Cargo.toml index 347a031..688b7f5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,4 +27,5 @@ clap = { version = "4.5", features = ["derive"] } env_logger = "0.10" image = { version = "0.25", features = ["png"] } log = "0.4" +rayon = "1.9.0" thiserror = "1.0" diff --git a/src/image_util.rs b/src/image_util.rs index 60503d3..2b1b68b 100644 --- a/src/image_util.rs +++ b/src/image_util.rs @@ -81,7 +81,6 @@ pub fn crop_images(images: &mut Vec) -> ImgUtilResult<(i32, i32)> { let mut max_x = std::u32::MIN; let mut max_y = std::u32::MIN; - // TODO: parallelize this for image in images.iter() { // ensure image has same size if image.width() != raw_width || image.height() != raw_height { diff --git a/src/main.rs b/src/main.rs index 768f224..57cc288 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,6 +7,7 @@ use std::{ use clap::{Args, Parser, Subcommand}; use image::{ImageBuffer, RgbaImage}; use image_util::ImageBufferExt; +use rayon::prelude::*; #[macro_use] extern crate log; @@ -132,11 +133,11 @@ impl SpritesheetArgs { return Ok(()); } - for source in sources { - if let Err(err) = generate_spritesheet(self, &source) { + sources.par_iter().for_each(|source| { + if let Err(err) = generate_spritesheet(self, source) { error!("{}: {err}", source.display(),); } - } + }); Ok(()) }