From 2a879c609e29832cb583e31d66d32f46bad5632a Mon Sep 17 00:00:00 2001 From: Kevin Reid Date: Mon, 1 Jan 2024 10:58:18 -0800 Subject: [PATCH] CI: Reduce parallelism of render tests on macOS in CI only. We've been getting frequent GPU out-of-memory errors, and I suspect they're due to a memory leak but it might be just limited resources. So, let's see what this does. --- test-renderers/src/harness.rs | 3 ++- test-renderers/tests/ray-render.rs | 1 + test-renderers/tests/wgpu-render.rs | 9 +++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/test-renderers/src/harness.rs b/test-renderers/src/harness.rs index 631c767ed..c19e9142f 100644 --- a/test-renderers/src/harness.rs +++ b/test-renderers/src/harness.rs @@ -210,6 +210,7 @@ pub async fn harness_main( renderer_id: RendererId, test_suite: fn(&mut TestCaseCollector<'_>), factory_factory: Ff, // TODO: better name + max_parallelism: Option, ) -> HarnessResult where Factory: RendererFactory + 'static, @@ -335,7 +336,7 @@ where } .boxed() }) - .buffer_unordered(4); + .buffer_unordered(max_parallelism.unwrap_or(4)); let mut per_test_output = BTreeMap::new(); let mut count_passed = 0; diff --git a/test-renderers/tests/ray-render.rs b/test-renderers/tests/ray-render.rs index 9957b0d09..57e140f37 100644 --- a/test-renderers/tests/ray-render.rs +++ b/test-renderers/tests/ray-render.rs @@ -16,6 +16,7 @@ async fn main() -> test_renderers::HarnessResult { RendererId::Raytracer, test_renderers::test_cases::all_tests, || std::future::ready(RtFactory), + None, ) .await } diff --git a/test-renderers/tests/wgpu-render.rs b/test-renderers/tests/wgpu-render.rs index 03f786ef6..ac389baba 100644 --- a/test-renderers/tests/wgpu-render.rs +++ b/test-renderers/tests/wgpu-render.rs @@ -23,11 +23,20 @@ async fn main() -> test_renderers::HarnessResult { return ExitCode::SUCCESS; }; + let parallelism = if option_env!("CI").is_some() && cfg!(target_os = "macos") { + // Attempted workaround for out-of-memory on macOS CI. If this doesn't help then + // the problem must be a leak, not concurrency. + Some(1) + } else { + None + }; + test_renderers::harness_main( test_renderers::HarnessArgs::parse(), RendererId::Wgpu, test_renderers::test_cases::all_tests, get_factory, + parallelism, ) .await }