From 5f61d30d45b5f796a8e67be57acfcd071cc24103 Mon Sep 17 00:00:00 2001 From: Justin Ridgewell Date: Tue, 17 Oct 2023 02:22:29 -0400 Subject: [PATCH 1/2] Deduplicate referenced_output_assets --- crates/turbo-tasks/src/vc/mod.rs | 4 ++-- crates/turbopack-core/src/chunk/chunk_group.rs | 10 +++++++--- crates/turbopack-core/src/chunk/chunking.rs | 6 ++---- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/crates/turbo-tasks/src/vc/mod.rs b/crates/turbo-tasks/src/vc/mod.rs index 7039e892772ed..ec9c8c213b665 100644 --- a/crates/turbo-tasks/src/vc/mod.rs +++ b/crates/turbo-tasks/src/vc/mod.rs @@ -309,9 +309,9 @@ where pub async fn debug_identifier(vc: Self) -> Result { let resolved = vc.resolve().await?; let raw_vc: RawVc = resolved.node; - if let RawVc::TaskCell(_, CellId { type_id, index }) = raw_vc { + if let RawVc::TaskCell(task_id, CellId { type_id, index }) = raw_vc { let value_ty = registry::get_value_type(type_id); - Ok(format!("{}#{}", value_ty.name, index)) + Ok(format!("{}#{}: {}", value_ty.name, index, task_id)) } else { unreachable!() } diff --git a/crates/turbopack-core/src/chunk/chunk_group.rs b/crates/turbopack-core/src/chunk/chunk_group.rs index 905f4ff07ec8f..1af66b1e988dc 100644 --- a/crates/turbopack-core/src/chunk/chunk_group.rs +++ b/crates/turbopack-core/src/chunk/chunk_group.rs @@ -11,7 +11,7 @@ use super::{ chunk_content, chunking::make_chunks, AsyncModuleInfo, Chunk, ChunkContentResult, ChunkItem, ChunkingContext, }; -use crate::{module::Module, output::OutputAsset, reference::ModuleReference}; +use crate::{module::Module, output::OutputAssets, reference::ModuleReference}; pub struct MakeChunkGroupResult { pub chunks: Vec>>, @@ -169,7 +169,7 @@ pub async fn make_chunk_group( async fn references_to_output_assets( references: IndexSet>>, -) -> Result>>> { +) -> Result> { let output_assets = references .into_iter() .map(|reference| reference.resolve_reference().primary_output_assets()) @@ -182,5 +182,9 @@ async fn references_to_output_assets( .copied() .filter(|&asset| set.insert(asset)) .collect::>(); - Ok(output_assets) + Ok(if output_assets.is_empty() { + OutputAssets::empty() + } else { + Vc::cell(output_assets) + }) } diff --git a/crates/turbopack-core/src/chunk/chunking.rs b/crates/turbopack-core/src/chunk/chunking.rs index 25e2063563b9f..1804c70a921c3 100644 --- a/crates/turbopack-core/src/chunk/chunking.rs +++ b/crates/turbopack-core/src/chunk/chunking.rs @@ -13,7 +13,7 @@ use tracing::Level; use turbo_tasks::{ReadRef, TryJoinIterExt, ValueToString, Vc}; use super::{AsyncModuleInfo, Chunk, ChunkItem, ChunkType, ChunkingContext}; -use crate::output::{OutputAsset, OutputAssets}; +use crate::output::OutputAssets; /// Creates chunks based on heuristics for the passed `chunk_items`. Also /// attaches `referenced_output_assets` to the first chunk. @@ -22,7 +22,7 @@ pub async fn make_chunks( chunking_context: Vc>, chunk_items: impl IntoIterator>, Option>)>, key_prefix: &str, - referenced_output_assets: Vec>>, + mut referenced_output_assets: Vc, ) -> Result>>> { let chunk_items = chunk_items .into_iter() @@ -37,8 +37,6 @@ pub async fn make_chunks( map.entry(ty).or_default().push((chunk_item, async_info)); } - let mut referenced_output_assets = Vc::cell(referenced_output_assets); - let mut chunks = Vec::new(); for (ty, chunk_items) in map { let ty_name = ty.to_string().await?; From d605d7a9afee4585132caefa71b1f1edfffb65ec Mon Sep 17 00:00:00 2001 From: Justin Ridgewell Date: Tue, 17 Oct 2023 02:34:53 -0400 Subject: [PATCH 2/2] Add method for constructing OutputAssets --- crates/turbopack-core/src/chunk/chunk_group.rs | 2 +- crates/turbopack-core/src/output.rs | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/crates/turbopack-core/src/chunk/chunk_group.rs b/crates/turbopack-core/src/chunk/chunk_group.rs index 1af66b1e988dc..23f26451d1a63 100644 --- a/crates/turbopack-core/src/chunk/chunk_group.rs +++ b/crates/turbopack-core/src/chunk/chunk_group.rs @@ -185,6 +185,6 @@ async fn references_to_output_assets( Ok(if output_assets.is_empty() { OutputAssets::empty() } else { - Vc::cell(output_assets) + OutputAssets::new(output_assets) }) } diff --git a/crates/turbopack-core/src/output.rs b/crates/turbopack-core/src/output.rs index d1a7bf1779549..2fd642bdcc6ec 100644 --- a/crates/turbopack-core/src/output.rs +++ b/crates/turbopack-core/src/output.rs @@ -23,6 +23,11 @@ pub struct OutputAssets(Vec>>); #[turbo_tasks::value_impl] impl OutputAssets { + #[turbo_tasks::function] + pub fn new(assets: Vec>>) -> Vc { + Vc::cell(assets) + } + #[turbo_tasks::function] pub fn empty() -> Vc { Vc::cell(vec![])