Skip to content

Commit 89b48dd

Browse files
wbinnssmithtimneutkens
authored andcommitted
Skip Traced chunking type in module graph
1 parent 8a2b381 commit 89b48dd

File tree

2 files changed

+127
-85
lines changed

2 files changed

+127
-85
lines changed

crates/next-core/src/next_client_reference/visit_client_reference.rs

+75-66
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ use turbo_tasks::{
1212
};
1313
use turbo_tasks_fs::FileSystemPath;
1414
use turbopack::css::chunk::CssChunkPlaceable;
15-
use turbopack_core::{module::Module, reference::primary_referenced_modules};
15+
use turbopack_core::{
16+
chunk::ChunkingType, module::Module, reference::primary_chunkable_referenced_modules,
17+
};
1618

1719
use crate::{
1820
next_client_reference::{
@@ -402,79 +404,86 @@ impl Visit<VisitClientReferenceNode> for VisitClientReference {
402404
}
403405
};
404406

405-
let referenced_modules = primary_referenced_modules(*parent_module).await?;
407+
let referenced_modules = primary_chunkable_referenced_modules(*parent_module).await?;
406408

407-
let referenced_modules = referenced_modules.iter().map(|module| async move {
408-
if let Some(client_reference_module) =
409-
ResolvedVc::try_downcast_type::<EcmascriptClientReferenceModule>(*module)
410-
.await?
411-
{
412-
return Ok(VisitClientReferenceNode {
413-
state: node.state,
414-
ty: VisitClientReferenceNodeType::ClientReference(
415-
ClientReference {
416-
server_component: node.state.server_component(),
417-
ty: ClientReferenceType::EcmascriptClientReference(
418-
client_reference_module,
419-
),
420-
},
421-
client_reference_module.ident().to_string().await?,
422-
),
423-
});
424-
}
409+
let referenced_modules = referenced_modules
410+
.iter()
411+
.flat_map(|(chunking_type, modules)| match chunking_type {
412+
ChunkingType::Traced => None,
413+
_ => Some(modules.iter()),
414+
})
415+
.flatten()
416+
.map(|module| async move {
417+
if let Some(client_reference_module) =
418+
ResolvedVc::try_downcast_type::<EcmascriptClientReferenceModule>(*module)
419+
.await?
420+
{
421+
return Ok(VisitClientReferenceNode {
422+
state: node.state,
423+
ty: VisitClientReferenceNodeType::ClientReference(
424+
ClientReference {
425+
server_component: node.state.server_component(),
426+
ty: ClientReferenceType::EcmascriptClientReference(
427+
client_reference_module,
428+
),
429+
},
430+
client_reference_module.ident().to_string().await?,
431+
),
432+
});
433+
}
425434

426-
if let Some(client_reference_module) =
427-
ResolvedVc::try_downcast_type::<CssClientReferenceModule>(*module).await?
428-
{
429-
return Ok(VisitClientReferenceNode {
430-
state: node.state,
431-
ty: VisitClientReferenceNodeType::ClientReference(
432-
ClientReference {
433-
server_component: node.state.server_component(),
434-
ty: ClientReferenceType::CssClientReference(
435-
client_reference_module.await?.client_module,
436-
),
435+
if let Some(client_reference_module) =
436+
ResolvedVc::try_downcast_type::<CssClientReferenceModule>(*module).await?
437+
{
438+
return Ok(VisitClientReferenceNode {
439+
state: node.state,
440+
ty: VisitClientReferenceNodeType::ClientReference(
441+
ClientReference {
442+
server_component: node.state.server_component(),
443+
ty: ClientReferenceType::CssClientReference(
444+
client_reference_module.await?.client_module,
445+
),
446+
},
447+
client_reference_module.ident().to_string().await?,
448+
),
449+
});
450+
}
451+
452+
if let Some(server_component_asset) =
453+
ResolvedVc::try_downcast_type::<NextServerComponentModule>(*module).await?
454+
{
455+
return Ok(VisitClientReferenceNode {
456+
state: VisitClientReferenceNodeState::InServerComponent {
457+
server_component: server_component_asset,
437458
},
438-
client_reference_module.ident().to_string().await?,
439-
),
440-
});
441-
}
459+
ty: VisitClientReferenceNodeType::ServerComponentEntry(
460+
server_component_asset,
461+
server_component_asset.ident().to_string().await?,
462+
),
463+
});
464+
}
442465

443-
if let Some(server_component_asset) =
444-
ResolvedVc::try_downcast_type::<NextServerComponentModule>(*module).await?
445-
{
446-
return Ok(VisitClientReferenceNode {
447-
state: VisitClientReferenceNodeState::InServerComponent {
448-
server_component: server_component_asset,
449-
},
450-
ty: VisitClientReferenceNodeType::ServerComponentEntry(
451-
server_component_asset,
452-
server_component_asset.ident().to_string().await?,
453-
),
454-
});
455-
}
466+
if ResolvedVc::try_downcast_type::<NextServerUtilityModule>(*module)
467+
.await?
468+
.is_some()
469+
{
470+
return Ok(VisitClientReferenceNode {
471+
state: VisitClientReferenceNodeState::InServerUtil,
472+
ty: VisitClientReferenceNodeType::ServerUtilEntry(
473+
*module,
474+
module.ident().to_string().await?,
475+
),
476+
});
477+
}
456478

457-
if ResolvedVc::try_downcast_type::<NextServerUtilityModule>(*module)
458-
.await?
459-
.is_some()
460-
{
461-
return Ok(VisitClientReferenceNode {
462-
state: VisitClientReferenceNodeState::InServerUtil,
463-
ty: VisitClientReferenceNodeType::ServerUtilEntry(
479+
Ok(VisitClientReferenceNode {
480+
state: node.state,
481+
ty: VisitClientReferenceNodeType::Internal(
464482
*module,
465483
module.ident().to_string().await?,
466484
),
467-
});
468-
}
469-
470-
Ok(VisitClientReferenceNode {
471-
state: node.state,
472-
ty: VisitClientReferenceNodeType::Internal(
473-
*module,
474-
module.ident().to_string().await?,
475-
),
476-
})
477-
});
485+
})
486+
});
478487

479488
let assets = referenced_modules.try_join().await?;
480489

turbopack/crates/turbopack-core/src/module_graph/mod.rs

+52-19
Original file line numberDiff line numberDiff line change
@@ -195,18 +195,20 @@ impl SingleModuleGraph {
195195
{
196196
let _span = tracing::info_span!("build module graph").entered();
197197
for (parent, current) in children_nodes_iter.into_breadth_first_edges() {
198-
let parent_edge = parent.map(|parent| match parent {
199-
SingleModuleGraphBuilderNode::Module { module, .. } => {
200-
(*modules.get(&module).unwrap(), COMMON_CHUNKING_TYPE)
198+
let parent_edge = match parent {
199+
Some(SingleModuleGraphBuilderNode::Module { module, .. }) => {
200+
Some((*modules.get(&module).unwrap(), COMMON_CHUNKING_TYPE))
201201
}
202-
SingleModuleGraphBuilderNode::ChunkableReference {
203-
source,
204-
chunking_type,
205-
..
206-
} => (*modules.get(&source).unwrap(), chunking_type),
207-
SingleModuleGraphBuilderNode::VisitedModule { .. }
208-
| SingleModuleGraphBuilderNode::Issues { .. } => unreachable!(),
209-
});
202+
Some(SingleModuleGraphBuilderNode::ChunkableReference { .. }) => {
203+
// Handled when visiting ChunkableReference below
204+
continue;
205+
}
206+
Some(
207+
SingleModuleGraphBuilderNode::VisitedModule { .. }
208+
| SingleModuleGraphBuilderNode::Issues { .. },
209+
) => unreachable!(),
210+
None => None,
211+
};
210212

211213
match current {
212214
SingleModuleGraphBuilderNode::Module {
@@ -248,9 +250,32 @@ impl SingleModuleGraph {
248250
graph.add_edge(parent_idx, current_idx, chunking_type);
249251
}
250252
}
251-
SingleModuleGraphBuilderNode::ChunkableReference { .. } => {
252-
// Ignore. They are handled when visiting the next edge
253-
// (ChunkableReference -> Module)
253+
SingleModuleGraphBuilderNode::ChunkableReference {
254+
source,
255+
target,
256+
target_layer,
257+
chunking_type,
258+
..
259+
} => {
260+
// Find the current node, if it was already added
261+
let target_idx = if let Some(target_idx) = modules.get(&target) {
262+
*target_idx
263+
} else {
264+
let target_idx = visited_modules.get(&target);
265+
let idx = graph.add_node(match target_idx {
266+
Some(idx) => SingleModuleGraphNode::VisitedModule { idx: *idx },
267+
None => {
268+
SingleModuleGraphNode::Module(SingleModuleGraphModuleNode {
269+
module: target,
270+
issues: Default::default(),
271+
layer: target_layer,
272+
})
273+
}
274+
});
275+
modules.insert(target, idx);
276+
idx
277+
};
278+
graph.add_edge(*modules.get(&source).unwrap(), target_idx, chunking_type);
254279
}
255280
SingleModuleGraphBuilderNode::Issues(new_issues) => {
256281
let (parent_idx, _) = parent_edge.unwrap();
@@ -975,6 +1000,7 @@ enum SingleModuleGraphBuilderNode {
9751000
source_ident: ReadRef<RcStr>,
9761001
target: ResolvedVc<Box<dyn Module>>,
9771002
target_ident: ReadRef<RcStr>,
1003+
target_layer: Option<ReadRef<RcStr>>,
9781004
},
9791005
/// A regular module
9801006
Module {
@@ -1015,6 +1041,10 @@ impl SingleModuleGraphBuilderNode {
10151041
source_ident: source.ident().to_string().await?,
10161042
target,
10171043
target_ident: target.ident().to_string().await?,
1044+
target_layer: match target.ident().await?.layer {
1045+
Some(layer) => Some(layer.await?),
1046+
None => None,
1047+
},
10181048
})
10191049
}
10201050
fn new_visited_module(module: ResolvedVc<Box<dyn Module>>, idx: GraphNodeIndex) -> Self {
@@ -1039,10 +1069,13 @@ impl Visit<SingleModuleGraphBuilderNode> for SingleModuleGraphBuilder<'_> {
10391069

10401070
fn visit(&mut self, edge: Self::Edge) -> VisitControlFlow<SingleModuleGraphBuilderNode> {
10411071
match edge.to {
1042-
SingleModuleGraphBuilderNode::Module { .. }
1043-
| SingleModuleGraphBuilderNode::ChunkableReference { .. } => {
1044-
VisitControlFlow::Continue(edge.to)
1045-
}
1072+
SingleModuleGraphBuilderNode::Module { .. } => VisitControlFlow::Continue(edge.to),
1073+
SingleModuleGraphBuilderNode::ChunkableReference {
1074+
ref chunking_type, ..
1075+
} => match chunking_type {
1076+
ChunkingType::Traced => VisitControlFlow::Skip(edge.to),
1077+
_ => VisitControlFlow::Continue(edge.to),
1078+
},
10461079
// Module was already visited previously
10471080
SingleModuleGraphBuilderNode::VisitedModule { .. } => VisitControlFlow::Skip(edge.to),
10481081
// Issues doen't have any children
@@ -1066,7 +1099,7 @@ impl Visit<SingleModuleGraphBuilderNode> for SingleModuleGraphBuilder<'_> {
10661099
Ok(match (module, chunkable_ref_target) {
10671100
(Some(module), None) => {
10681101
let refs_cell = primary_chunkable_referenced_modules(*module);
1069-
let refs = refs_cell.await?;
1102+
let refs = refs_cell.await.context(module.ident().to_string().await?)?;
10701103
// TODO This is currently too slow
10711104
// let refs_issues = refs_cell
10721105
// .take_collectibles::<Box<dyn Issue>>()

0 commit comments

Comments
 (0)