Skip to content

Commit 7e68f14

Browse files
committed
Correctly update availability_info
1 parent 0e1157b commit 7e68f14

File tree

5 files changed

+47
-41
lines changed

5 files changed

+47
-41
lines changed

turbopack/crates/turbopack-browser/src/chunking_context.rs

+10-7
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ use turbopack_core::{
99
availability_info::AvailabilityInfo,
1010
chunk_group::{make_chunk_group, MakeChunkGroupResult},
1111
module_id_strategies::{DevModuleIdStrategy, ModuleIdStrategy},
12-
Chunk, ChunkGroupResult, ChunkItem, ChunkableModule, ChunkingConfig, ChunkingConfigs,
13-
ChunkingContext, EntryChunkGroupResult, EvaluatableAssets, MinifyType, ModuleId,
14-
SourceMapsType,
12+
Chunk, ChunkGroupResult, ChunkGroupType, ChunkItem, ChunkableModule, ChunkingConfig,
13+
ChunkingConfigs, ChunkingContext, EntryChunkGroupResult, EvaluatableAssets, MinifyType,
14+
ModuleId, SourceMapsType,
1515
},
1616
environment::Environment,
1717
ident::AssetIdent,
@@ -425,13 +425,12 @@ impl ChunkingContext for BrowserChunkingContext {
425425
let span = tracing::info_span!("chunking", ident = ident.to_string().await?.to_string());
426426
async move {
427427
let this = self.await?;
428-
let modules = chunk_group.entries();
429428
let input_availability_info = availability_info.into_value();
430429
let MakeChunkGroupResult {
431430
chunks,
432431
availability_info,
433432
} = make_chunk_group(
434-
modules,
433+
chunk_group,
435434
module_graph,
436435
ResolvedVc::upcast(self),
437436
input_availability_info,
@@ -499,13 +498,17 @@ impl ChunkingContext for BrowserChunkingContext {
499498

500499
let entries = evaluatable_assets_ref
501500
.iter()
502-
.map(|&evaluatable| ResolvedVc::upcast(evaluatable));
501+
.map(|&evaluatable| ResolvedVc::upcast(evaluatable))
502+
.collect();
503503

504504
let MakeChunkGroupResult {
505505
chunks,
506506
availability_info,
507507
} = make_chunk_group(
508-
entries,
508+
ChunkGroup::Entry {
509+
entries,
510+
ty: ChunkGroupType::Evaluated,
511+
},
509512
module_graph,
510513
ResolvedVc::upcast(self),
511514
availability_info,

turbopack/crates/turbopack-core/src/chunk/availability_info.rs

+3-6
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
use anyhow::Result;
2-
use turbo_tasks::{ResolvedVc, Vc};
2+
use turbo_tasks::ResolvedVc;
33

4-
use crate::{
5-
chunk::available_chunk_groups::AvailableChunkGroups,
6-
module_graph::chunk_group_info::RoaringBitmapWrapperCell,
7-
};
4+
use crate::chunk::available_chunk_groups::AvailableChunkGroups;
85

96
#[turbo_tasks::value(serialization = "auto_for_input")]
107
#[derive(Hash, Clone, Copy, Debug)]
@@ -30,7 +27,7 @@ impl AvailabilityInfo {
3027
}
3128
}
3229

33-
pub async fn with_modules(self, chunk_group: Vc<RoaringBitmapWrapperCell>) -> Result<Self> {
30+
pub async fn with_modules(self, chunk_group: u32) -> Result<Self> {
3431
Ok(match self {
3532
AvailabilityInfo::Untracked => AvailabilityInfo::Untracked,
3633
AvailabilityInfo::Root => AvailabilityInfo::Complete {

turbopack/crates/turbopack-core/src/chunk/available_chunk_groups.rs

+9-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::hash::{Hash, Hasher};
22

33
use anyhow::Result;
4+
use roaring::RoaringBitmap;
45
use rustc_hash::FxHasher;
56
use turbo_tasks::Vc;
67

@@ -15,22 +16,20 @@ pub struct AvailableChunkGroups {
1516
#[turbo_tasks::value_impl]
1617
impl AvailableChunkGroups {
1718
#[turbo_tasks::function]
18-
pub async fn new(chunk_groups: Vc<RoaringBitmapWrapperCell>) -> Result<Vc<Self>> {
19+
pub async fn new(chunk_group: u32) -> Result<Vc<Self>> {
1920
Ok(AvailableChunkGroups {
20-
chunk_groups: chunk_groups.owned().await?,
21+
chunk_groups: RoaringBitmapWrapper::new(
22+
RoaringBitmap::from_sorted_iter(std::iter::once(chunk_group)).unwrap(),
23+
),
2124
}
2225
.cell())
2326
}
2427

2528
#[turbo_tasks::function]
26-
pub async fn with_chunk_group(
27-
&self,
28-
chunk_group: Vc<RoaringBitmapWrapperCell>,
29-
) -> Result<Vc<Self>> {
30-
Ok(AvailableChunkGroups {
31-
chunk_groups: RoaringBitmapWrapper::new(&*self.chunk_groups | &**chunk_group.await?),
32-
}
33-
.cell())
29+
pub async fn with_chunk_group(&self, chunk_group: u32) -> Result<Vc<Self>> {
30+
let mut chunk_groups = self.chunk_groups.clone();
31+
chunk_groups.insert(chunk_group);
32+
Ok(AvailableChunkGroups { chunk_groups }.cell())
3433
}
3534

3635
#[turbo_tasks::function]

turbopack/crates/turbopack-core/src/chunk/chunk_group.rs

+9-7
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use crate::{
1212
chunk::ChunkingType,
1313
environment::ChunkLoading,
1414
module::Module,
15-
module_graph::{GraphTraversalAction, ModuleGraph},
15+
module_graph::{chunk_group_info::ChunkGroup, GraphTraversalAction, ModuleGraph},
1616
output::OutputAssets,
1717
reference::ModuleReference,
1818
traced_asset::TracedAsset,
@@ -25,7 +25,7 @@ pub struct MakeChunkGroupResult {
2525

2626
/// Creates a chunk group from a set of entries.
2727
pub async fn make_chunk_group(
28-
chunk_group_entries: impl IntoIterator<Item = ResolvedVc<Box<dyn Module>>>,
28+
chunk_group: ChunkGroup,
2929
module_graph: Vc<ModuleGraph>,
3030
chunking_context: ResolvedVc<Box<dyn ChunkingContext>>,
3131
availability_info: AvailabilityInfo,
@@ -42,7 +42,7 @@ pub async fn make_chunk_group(
4242
traced_modules,
4343
} = chunk_group_content(
4444
module_graph,
45-
chunk_group_entries,
45+
chunk_group.entries(),
4646
availability_info,
4747
can_split_async,
4848
should_trace,
@@ -76,11 +76,13 @@ pub async fn make_chunk_group(
7676
.collect::<FxIndexMap<_, Option<ResolvedVc<AsyncModuleInfo>>>>();
7777

7878
// Compute new [AvailabilityInfo]
79-
let own_chunk_group_info = module_graph
79+
let current_chunk_group_idx = *module_graph
8080
.chunk_group_info()
81-
// TODO which module should actually be looked up here?
82-
.get(*ResolvedVc::upcast(*chunkable_modules.first().unwrap()));
83-
let availability_info = availability_info.with_modules(own_chunk_group_info).await?;
81+
.get_index_of(chunk_group)
82+
.await? as u32;
83+
let availability_info = availability_info
84+
.with_modules(current_chunk_group_idx)
85+
.await?;
8486

8587
// Insert async chunk loaders for every referenced async module
8688
let async_loaders = async_modules

turbopack/crates/turbopack-nodejs/src/chunking_context.rs

+16-11
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ use turbopack_core::{
1111
availability_info::AvailabilityInfo,
1212
chunk_group::{make_chunk_group, MakeChunkGroupResult},
1313
module_id_strategies::{DevModuleIdStrategy, ModuleIdStrategy},
14-
Chunk, ChunkGroupResult, ChunkItem, ChunkableModule, ChunkingConfig, ChunkingConfigs,
15-
ChunkingContext, EntryChunkGroupResult, EvaluatableAssets, MinifyType, ModuleId,
16-
SourceMapsType,
14+
Chunk, ChunkGroupResult, ChunkGroupType, ChunkItem, ChunkableModule, ChunkingConfig,
15+
ChunkingConfigs, ChunkingContext, EntryChunkGroupResult, EvaluatableAssets, MinifyType,
16+
ModuleId, SourceMapsType,
1717
},
1818
environment::Environment,
1919
ident::AssetIdent,
@@ -348,12 +348,11 @@ impl ChunkingContext for NodeJsChunkingContext {
348348
) -> Result<Vc<ChunkGroupResult>> {
349349
let span = tracing::info_span!("chunking", module = ident.to_string().await?.to_string());
350350
async move {
351-
let modules = chunk_group.entries();
352351
let MakeChunkGroupResult {
353352
chunks,
354353
availability_info,
355354
} = make_chunk_group(
356-
modules,
355+
chunk_group,
357356
module_graph,
358357
ResolvedVc::upcast(self),
359358
availability_info.into_value(),
@@ -391,16 +390,22 @@ impl ChunkingContext for NodeJsChunkingContext {
391390
) -> Result<Vc<EntryChunkGroupResult>> {
392391
let availability_info = availability_info.into_value();
393392

394-
let MakeChunkGroupResult {
395-
chunks,
396-
availability_info,
397-
} = make_chunk_group(
398-
once(module).chain(
393+
let entries = once(module)
394+
.chain(
399395
evaluatable_assets
400396
.await?
401397
.iter()
402398
.map(|&asset| ResolvedVc::upcast(asset)),
403-
),
399+
)
400+
.collect();
401+
let MakeChunkGroupResult {
402+
chunks,
403+
availability_info,
404+
} = make_chunk_group(
405+
ChunkGroup::Entry {
406+
entries,
407+
ty: ChunkGroupType::Entry,
408+
},
404409
module_graph,
405410
ResolvedVc::upcast(self),
406411
availability_info,

0 commit comments

Comments
 (0)