From 85c1e54ae1b6df60ecb2c947d7cb2efc714f1c7a Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Thu, 26 Sep 2024 01:53:57 +0200 Subject: [PATCH] split completions into a tree --- .../crates/turbo-tasks/src/completion.rs | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/turbopack/crates/turbo-tasks/src/completion.rs b/turbopack/crates/turbo-tasks/src/completion.rs index acbfeb724220c..56c182a50796c 100644 --- a/turbopack/crates/turbo-tasks/src/completion.rs +++ b/turbopack/crates/turbo-tasks/src/completion.rs @@ -60,14 +60,26 @@ impl Completions { /// Merges the list of completions into one. #[turbo_tasks::function] pub async fn completed(&self) -> anyhow::Result> { - self.0 - .iter() - .map(|&c| async move { - c.await?; - Ok(()) - }) - .try_join() - .await?; - Ok(Completion::new()) + if self.0.len() > 100 { + let mid = self.0.len() / 2; + let (left, right) = self.0.split_at(mid); + let left = Vc::::cell(left.to_vec()); + let right = Vc::::cell(right.to_vec()); + let left = left.completed(); + let right = right.completed(); + left.await?; + right.await?; + Ok(Completion::new()) + } else { + self.0 + .iter() + .map(|&c| async move { + c.await?; + Ok(()) + }) + .try_join() + .await?; + Ok(Completion::new()) + } } }