Skip to content

Commit 1e3a0c1

Browse files
authored
fix: rsdoctor multi compiler data scope (#11310)
1 parent f3b3446 commit 1e3a0c1

File tree

3 files changed

+52
-26
lines changed

3 files changed

+52
-26
lines changed

crates/rspack_plugin_rsdoctor/src/chunk_graph.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ use rspack_core::{
77
Chunk, ChunkByUkey, ChunkGraph, ChunkGroupByUkey, ChunkGroupUkey, ChunkUkey, CompilationAsset,
88
ModuleGraph,
99
};
10-
use rspack_util::fx_hash::FxDashMap;
1110
use rustc_hash::{FxHashMap as HashMap, FxHashSet as HashSet};
1211

1312
use crate::{
@@ -179,7 +178,7 @@ pub fn collect_assets(
179178

180179
pub fn collect_chunk_modules(
181180
chunk_by_ukey: &ChunkByUkey,
182-
module_ukeys: &FxDashMap<Identifier, RsdoctorChunkUkey>,
181+
module_ukeys: &HashMap<Identifier, RsdoctorChunkUkey>,
183182
chunk_graph: &ChunkGraph,
184183
module_graph: &ModuleGraph,
185184
) -> Vec<RsdoctorChunkModules> {
@@ -203,7 +202,7 @@ pub fn collect_chunk_modules(
203202
concatenated_module
204203
.get_modules()
205204
.iter()
206-
.filter_map(|m| module_ukeys.get(&m.id).map(|u| *u)),
205+
.filter_map(|m| module_ukeys.get(&m.id).copied()),
207206
);
208207
}
209208
res
@@ -238,7 +237,7 @@ pub fn collect_chunk_assets(
238237
pub fn collect_entrypoint_assets(
239238
entrypoints: &IndexMap<String, ChunkGroupUkey>,
240239
rsd_assets: &HashMap<String, RsdoctorAsset>,
241-
entrypoint_ukey_map: &FxDashMap<ChunkGroupUkey, RsdoctorEntrypointUkey>,
240+
entrypoint_ukey_map: &HashMap<ChunkGroupUkey, RsdoctorEntrypointUkey>,
242241
chunk_group_by_ukey: &ChunkGroupByUkey,
243242
chunk_by_ukey: &ChunkByUkey,
244243
) -> Vec<RsdoctorEntrypointAssets> {

crates/rspack_plugin_rsdoctor/src/module_graph.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ use rspack_core::{
77
ModuleIdsArtifact, rspack_sources::MapOptions,
88
};
99
use rspack_paths::Utf8PathBuf;
10-
use rspack_util::fx_hash::FxDashMap;
1110
use rustc_hash::{FxHashMap as HashMap, FxHashSet as HashSet};
1211

1312
use crate::{
@@ -121,7 +120,7 @@ pub fn collect_concatenated_modules(
121120

122121
pub fn collect_module_original_sources(
123122
modules: &IdentifierMap<&BoxModule>,
124-
module_ukeys: &FxDashMap<Identifier, ModuleUkey>,
123+
module_ukeys: &HashMap<Identifier, ModuleUkey>,
125124
module_graph: &ModuleGraph,
126125
compilation: &Compilation,
127126
) -> Vec<RsdoctorModuleOriginalSource> {
@@ -167,7 +166,7 @@ pub fn collect_module_original_sources(
167166

168167
pub fn collect_module_dependencies(
169168
modules: &IdentifierMap<&BoxModule>,
170-
module_ukeys: &FxDashMap<Identifier, ModuleUkey>,
169+
module_ukeys: &HashMap<Identifier, ModuleUkey>,
171170
module_graph: &ModuleGraph,
172171
) -> HashMap<Identifier, HashMap<Identifier, (DependencyId, RsdoctorDependency)>> {
173172
let dependency_ukey_counter = Arc::new(AtomicI32::new(0));
@@ -220,7 +219,7 @@ pub fn collect_module_dependencies(
220219

221220
pub fn collect_module_ids(
222221
modules: &IdentifierMap<&BoxModule>,
223-
module_ukeys: &FxDashMap<Identifier, ModuleUkey>,
222+
module_ukeys: &HashMap<Identifier, ModuleUkey>,
224223
module_ids: &ModuleIdsArtifact,
225224
) -> Vec<RsdoctorModuleId> {
226225
modules

crates/rspack_plugin_rsdoctor/src/plugin.rs

Lines changed: 46 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,11 @@ type ArcRsdoctorPluginHooks = Arc<AtomicRefCell<RsdoctorPluginHooks>>;
5050
static COMPILATION_HOOKS_MAP: LazyLock<FxDashMap<CompilationId, ArcRsdoctorPluginHooks>> =
5151
LazyLock::new(Default::default);
5252

53-
static MODULE_UKEY_MAP: LazyLock<FxDashMap<Identifier, ModuleUkey>> =
54-
LazyLock::new(FxDashMap::default);
55-
static ENTRYPOINT_UKEY_MAP: LazyLock<FxDashMap<ChunkGroupUkey, EntrypointUkey>> =
53+
static MODULE_UKEY_MAP: LazyLock<FxDashMap<CompilationId, HashMap<Identifier, ModuleUkey>>> =
5654
LazyLock::new(FxDashMap::default);
55+
static ENTRYPOINT_UKEY_MAP: LazyLock<
56+
FxDashMap<CompilationId, HashMap<ChunkGroupUkey, EntrypointUkey>>,
57+
> = LazyLock::new(FxDashMap::default);
5758

5859
#[derive(Debug, Hash, PartialEq, Eq)]
5960
pub enum RsdoctorPluginModuleGraphFeature {
@@ -178,10 +179,11 @@ impl RsdoctorPlugin {
178179
#[plugin_hook(CompilerCompilation for RsdoctorPlugin)]
179180
async fn compilation(
180181
&self,
181-
_compilation: &mut Compilation,
182+
compilation: &mut Compilation,
182183
_params: &mut CompilationParams,
183184
) -> Result<()> {
184-
MODULE_UKEY_MAP.clear();
185+
MODULE_UKEY_MAP.insert(compilation.id(), HashMap::default());
186+
ENTRYPOINT_UKEY_MAP.insert(compilation.id(), HashMap::default());
185187
Ok(())
186188
}
187189

@@ -221,8 +223,13 @@ async fn optimize_chunks(&self, compilation: &mut Compilation) -> Result<Option<
221223
chunk_group_by_ukey,
222224
));
223225

224-
for (entrypoint_ukey, entrypoint) in rsd_entrypoints.iter() {
225-
ENTRYPOINT_UKEY_MAP.insert(*entrypoint_ukey, entrypoint.ukey);
226+
{
227+
let mut entrypoint_ukey_map = ENTRYPOINT_UKEY_MAP
228+
.get_mut(&compilation.id())
229+
.expect("should have entrypoint ukey map");
230+
for (entrypoint_ukey, entrypoint) in rsd_entrypoints.iter() {
231+
entrypoint_ukey_map.insert(*entrypoint_ukey, entrypoint.ukey);
232+
}
226233
}
227234

228235
tokio::spawn(async move {
@@ -267,18 +274,26 @@ async fn optimize_chunk_modules(&self, compilation: &mut Compilation) -> Result<
267274
&compilation.options.context,
268275
));
269276

270-
for (module_id, module) in rsd_modules.iter() {
271-
MODULE_UKEY_MAP.insert(*module_id, module.ukey);
277+
{
278+
let mut module_ukey_map = MODULE_UKEY_MAP
279+
.get_mut(&compilation.id())
280+
.expect("should have module ukey map");
281+
for (module_id, module) in rsd_modules.iter() {
282+
module_ukey_map.insert(*module_id, module.ukey);
283+
}
272284
}
273285

286+
let module_ukey_map = MODULE_UKEY_MAP
287+
.get(&compilation.id())
288+
.expect("should have module ukey map");
274289
// 2. collect concatenate children
275290
let (child_map, parent_map) = collect_concatenated_modules(&modules);
276291
for (module_id, children) in child_map {
277292
if let Some(rsd_module) = rsd_modules.get_mut(&module_id) {
278293
rsd_module.modules.extend(
279294
children
280295
.iter()
281-
.filter_map(|i| MODULE_UKEY_MAP.get(i).map(|u| *u))
296+
.filter_map(|i| module_ukey_map.get(i).copied())
282297
.collect::<HashSet<_>>(),
283298
);
284299
}
@@ -290,14 +305,14 @@ async fn optimize_chunk_modules(&self, compilation: &mut Compilation) -> Result<
290305
rsd_module.belong_modules.extend(
291306
parents
292307
.iter()
293-
.filter_map(|i| MODULE_UKEY_MAP.get(i).map(|u| *u))
308+
.filter_map(|i| module_ukey_map.get(i).copied())
294309
.collect::<HashSet<_>>(),
295310
);
296311
}
297312
}
298313

299314
// 4. collect module dependencies
300-
let dependency_infos = collect_module_dependencies(&modules, &MODULE_UKEY_MAP, &module_graph);
315+
let dependency_infos = collect_module_dependencies(&modules, &module_ukey_map, &module_graph);
301316
for (origin_module_id, dependencies) in dependency_infos {
302317
for (dep_module_id, (dep_id, dependency)) in dependencies {
303318
if let Some(rsd_module) = rsd_modules.get_mut(&dep_module_id) {
@@ -338,7 +353,7 @@ async fn optimize_chunk_modules(&self, compilation: &mut Compilation) -> Result<
338353

339354
// 6. collect chunk modules
340355
let chunk_modules =
341-
collect_chunk_modules(chunk_by_ukey, &MODULE_UKEY_MAP, chunk_graph, &module_graph);
356+
collect_chunk_modules(chunk_by_ukey, &module_ukey_map, chunk_graph, &module_graph);
342357

343358
tokio::spawn(async move {
344359
match hooks
@@ -368,8 +383,13 @@ async fn module_ids(&self, compilation: &mut Compilation) -> Result<()> {
368383
let hooks = RsdoctorPlugin::get_compilation_hooks(compilation.id());
369384
let module_graph = compilation.get_module_graph();
370385
let modules = module_graph.modules();
371-
let rsd_module_ids =
372-
collect_module_ids(&modules, &MODULE_UKEY_MAP, &compilation.module_ids_artifact);
386+
let rsd_module_ids = collect_module_ids(
387+
&modules,
388+
&MODULE_UKEY_MAP
389+
.get(&compilation.id())
390+
.expect("should have module ukey map"),
391+
&compilation.module_ids_artifact,
392+
);
373393

374394
tokio::spawn(async move {
375395
match hooks
@@ -397,8 +417,14 @@ async fn after_code_generation(&self, compilation: &mut Compilation) -> Result<(
397417
let hooks = RsdoctorPlugin::get_compilation_hooks(compilation.id());
398418
let module_graph = compilation.get_module_graph();
399419
let modules = module_graph.modules();
400-
let rsd_module_original_sources =
401-
collect_module_original_sources(&modules, &MODULE_UKEY_MAP, &module_graph, compilation);
420+
let rsd_module_original_sources = collect_module_original_sources(
421+
&modules,
422+
&MODULE_UKEY_MAP
423+
.get(&compilation.id())
424+
.expect("should have module ukey map"),
425+
&module_graph,
426+
compilation,
427+
);
402428

403429
tokio::spawn(async move {
404430
match hooks
@@ -431,7 +457,9 @@ async fn after_process_assets(&self, compilation: &mut Compilation) -> Result<()
431457
let rsd_entrypoint_assets = collect_entrypoint_assets(
432458
&compilation.entrypoints,
433459
&rsd_assets,
434-
&ENTRYPOINT_UKEY_MAP,
460+
&ENTRYPOINT_UKEY_MAP
461+
.get(&compilation.id())
462+
.expect("should have entrypoint ukey map"),
435463
chunk_group_by_ukey,
436464
chunk_by_ukey,
437465
);

0 commit comments

Comments
 (0)