From 52fa494d482973ad76b7c579df6d85cb2f817a2d Mon Sep 17 00:00:00 2001 From: Alan Jeffrey Date: Thu, 28 Mar 2019 14:34:24 -0500 Subject: [PATCH 1/2] Allow the Window to customize rayon's thread builder --- demo/common/src/lib.rs | 18 ++++++++++++------ demo/common/src/window.rs | 5 +++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/demo/common/src/lib.rs b/demo/common/src/lib.rs index c4bd6117..eaac4205 100644 --- a/demo/common/src/lib.rs +++ b/demo/common/src/lib.rs @@ -118,6 +118,12 @@ impl DemoApp where W: Window { let view_box_size = view_box_size(options.mode, &window_size, false); + // Set up Rayon. + let mut thread_pool_builder = ThreadPoolBuilder::new(); + thread_pool_builder = options.customize_rayon(thread_pool_builder); + thread_pool_builder = window.customize_rayon(thread_pool_builder); + thread_pool_builder.build_global().unwrap(); + let built_svg = load_scene(resources, &options.input_path); let message = get_svg_building_message(&built_svg); let scene_view_box = built_svg.scene.view_box; @@ -761,14 +767,14 @@ impl Options { Some(path) => SVGPath::Path(PathBuf::from(path)), }; - // Set up Rayon. - let mut thread_pool_builder = ThreadPoolBuilder::new(); - if let Some(jobs) = jobs { + Options { jobs, mode, input_path } + } + + fn customize_rayon(&self, mut thread_pool_builder: ThreadPoolBuilder) -> ThreadPoolBuilder { + if let Some(jobs) = self.jobs { thread_pool_builder = thread_pool_builder.num_threads(jobs); } - thread_pool_builder.build_global().unwrap(); - - Options { jobs, mode, input_path } + thread_pool_builder } } diff --git a/demo/common/src/window.rs b/demo/common/src/window.rs index 8679b630..39c5323c 100644 --- a/demo/common/src/window.rs +++ b/demo/common/src/window.rs @@ -14,6 +14,7 @@ use pathfinder_geometry::basic::point::Point2DI32; use pathfinder_geometry::distortion::BarrelDistortionCoefficients; use pathfinder_gl::GLVersion; use pathfinder_gpu::resources::ResourceLoader; +use rayon::ThreadPoolBuilder; use std::path::PathBuf; pub trait Window { @@ -26,6 +27,10 @@ pub trait Window { fn present_open_svg_dialog(&mut self); fn run_save_dialog(&self, extension: &str) -> Result; + fn customize_rayon(&self, thread_pool_builder: ThreadPoolBuilder) -> ThreadPoolBuilder { + thread_pool_builder + } + #[inline] fn barrel_distortion_coefficients(&self) -> BarrelDistortionCoefficients { BarrelDistortionCoefficients::default() From c51885a6967251fed4ddc8d1b14024353c9e4ec8 Mon Sep 17 00:00:00 2001 From: Alan Jeffrey Date: Thu, 28 Mar 2019 17:16:47 -0500 Subject: [PATCH 2/2] Renamed customize_rayon to adjust_thread_pool_settings --- demo/common/src/lib.rs | 6 +++--- demo/common/src/window.rs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/demo/common/src/lib.rs b/demo/common/src/lib.rs index eaac4205..426ea304 100644 --- a/demo/common/src/lib.rs +++ b/demo/common/src/lib.rs @@ -120,8 +120,8 @@ impl DemoApp where W: Window { // Set up Rayon. let mut thread_pool_builder = ThreadPoolBuilder::new(); - thread_pool_builder = options.customize_rayon(thread_pool_builder); - thread_pool_builder = window.customize_rayon(thread_pool_builder); + thread_pool_builder = options.adjust_thread_pool_settings(thread_pool_builder); + thread_pool_builder = window.adjust_thread_pool_settings(thread_pool_builder); thread_pool_builder.build_global().unwrap(); let built_svg = load_scene(resources, &options.input_path); @@ -770,7 +770,7 @@ impl Options { Options { jobs, mode, input_path } } - fn customize_rayon(&self, mut thread_pool_builder: ThreadPoolBuilder) -> ThreadPoolBuilder { + fn adjust_thread_pool_settings(&self, mut thread_pool_builder: ThreadPoolBuilder) -> ThreadPoolBuilder { if let Some(jobs) = self.jobs { thread_pool_builder = thread_pool_builder.num_threads(jobs); } diff --git a/demo/common/src/window.rs b/demo/common/src/window.rs index 39c5323c..3d4b5d12 100644 --- a/demo/common/src/window.rs +++ b/demo/common/src/window.rs @@ -27,7 +27,7 @@ pub trait Window { fn present_open_svg_dialog(&mut self); fn run_save_dialog(&self, extension: &str) -> Result; - fn customize_rayon(&self, thread_pool_builder: ThreadPoolBuilder) -> ThreadPoolBuilder { + fn adjust_thread_pool_settings(&self, thread_pool_builder: ThreadPoolBuilder) -> ThreadPoolBuilder { thread_pool_builder }