Skip to content

Commit 4058f26

Browse files
authored
refactor: use atomic_refcell for async_module_artifact (#12408)
refacto: use atomic_refcell for async_module_artifact
1 parent 9bace5c commit 4058f26

File tree

17 files changed

+41
-26
lines changed

17 files changed

+41
-26
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/rspack_binding_api/src/module_graph.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ impl JsModuleGraph {
258258
pub fn is_async(&self, module: ModuleObjectRef) -> napi::Result<bool> {
259259
let (compilation, _) = self.as_ref()?;
260260
Ok(ModuleGraph::is_async(
261-
&compilation.async_modules_artifact,
261+
&compilation.async_modules_artifact.borrow(),
262262
&module.identifier,
263263
))
264264
}

crates/rspack_core/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ version.workspace = true
1010
anymap = { workspace = true }
1111
async-recursion = { workspace = true }
1212
async-trait = { workspace = true }
13+
atomic_refcell = { workspace = true }
1314
bitflags = { workspace = true }
1415
cow-utils = { workspace = true }
1516
dashmap = { workspace = true, features = ["rayon"] }

crates/rspack_core/src/chunk_graph/chunk_graph_module.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -383,8 +383,11 @@ impl ChunkGraph {
383383
.hash(&mut hasher);
384384
module.source_types(&mg).dyn_hash(&mut hasher);
385385

386-
ModuleGraph::is_async(&compilation.async_modules_artifact, &module_identifier)
387-
.dyn_hash(&mut hasher);
386+
ModuleGraph::is_async(
387+
&compilation.async_modules_artifact.borrow(),
388+
&module_identifier,
389+
)
390+
.dyn_hash(&mut hasher);
388391
let exports_info =
389392
mg.get_prefetched_exports_info(&module_identifier, PrefetchExportsInfoMode::Full);
390393
let (entry, exports) = exports_info.meta();

crates/rspack_core/src/compilation/mod.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use std::{
1111
},
1212
};
1313

14+
use atomic_refcell::AtomicRefCell;
1415
use build_chunk_graph::{
1516
artifact::use_code_splitting_cache, build_chunk_graph, build_chunk_graph_new,
1617
};
@@ -247,7 +248,7 @@ pub struct Compilation {
247248
pub runtime_template: RuntimeTemplate,
248249

249250
// artifact for infer_async_modules_plugin
250-
pub async_modules_artifact: DerefOption<AsyncModulesArtifact>,
251+
pub async_modules_artifact: Arc<AtomicRefCell<AsyncModulesArtifact>>,
251252
// artifact for collect_dependencies_diagnostics
252253
pub dependencies_diagnostics_artifact: DerefOption<DependenciesDiagnosticsArtifact>,
253254
// artifact for side_effects_flag_plugin
@@ -386,7 +387,7 @@ impl Compilation {
386387
named_chunks: Default::default(),
387388
named_chunk_groups: Default::default(),
388389

389-
async_modules_artifact: DerefOption::new(AsyncModulesArtifact::default()),
390+
async_modules_artifact: Arc::new(AtomicRefCell::new(AsyncModulesArtifact::default())),
390391
imported_by_defer_modules_artifact: Default::default(),
391392
dependencies_diagnostics_artifact: DerefOption::new(
392393
DependenciesDiagnosticsArtifact::default(),

crates/rspack_core/src/compiler/mod.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -325,17 +325,16 @@ impl Compiler {
325325
self.build_module_graph().await?;
326326
let mut dependencies_diagnostics_artifact =
327327
mem::take(&mut self.compilation.dependencies_diagnostics_artifact);
328-
let mut async_modules_artifact = mem::take(&mut self.compilation.async_modules_artifact);
328+
let async_modules_artifact = self.compilation.async_modules_artifact.clone();
329329
let diagnostics = self
330330
.compilation
331331
.collect_build_module_graph_effects(
332332
&mut dependencies_diagnostics_artifact,
333-
&mut async_modules_artifact,
333+
&mut async_modules_artifact.borrow_mut(),
334334
)
335335
.await?;
336336
self.compilation.extend_diagnostics(diagnostics);
337337
self.compilation.dependencies_diagnostics_artifact = dependencies_diagnostics_artifact;
338-
self.compilation.async_modules_artifact = async_modules_artifact;
339338
self.compilation.seal(self.plugin_driver.clone()).await?;
340339
logger.time_end(start);
341340

crates/rspack_core/src/module_graph/mod.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use std::{
22
collections::hash_map::Entry,
3-
mem,
43
ops::{Deref, DerefMut},
54
};
65

@@ -445,10 +444,10 @@ impl<'a> ModuleGraph<'a> {
445444
new_mgm.depth = assign_tuple.2;
446445
new_mgm.exports = assign_tuple.3;
447446

448-
let is_async = ModuleGraph::is_async(&compilation.async_modules_artifact, source_module);
449-
let mut async_modules_artifact = mem::take(&mut compilation.async_modules_artifact);
447+
let is_async =
448+
ModuleGraph::is_async(&compilation.async_modules_artifact.borrow(), source_module);
449+
let mut async_modules_artifact = compilation.async_modules_artifact.borrow_mut();
450450
ModuleGraph::set_async(&mut async_modules_artifact, *target_module, is_async);
451-
compilation.async_modules_artifact = async_modules_artifact;
452451
}
453452

454453
pub fn move_module_connections(

crates/rspack_core/src/runtime_template.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -930,7 +930,7 @@ impl RuntimeTemplate {
930930
}
931931
runtime_requirements.insert(RuntimeGlobals::CREATE_FAKE_NAMESPACE_OBJECT);
932932
if ModuleGraph::is_async(
933-
&compilation.async_modules_artifact,
933+
&compilation.async_modules_artifact.borrow(),
934934
compilation
935935
.get_module_graph()
936936
.module_identifier_by_dependency_id(dep_id)
@@ -1356,7 +1356,10 @@ fn get_outgoing_async_modules(
13561356
visited: &mut HashSet<ModuleIdentifier>,
13571357
) {
13581358
let module_identifier = module.identifier();
1359-
if !ModuleGraph::is_async(&compilation.async_modules_artifact, &module_identifier) {
1359+
if !ModuleGraph::is_async(
1360+
&compilation.async_modules_artifact.borrow(),
1361+
&module_identifier,
1362+
) {
13601363
return;
13611364
}
13621365
if !visited.insert(module_identifier) {

crates/rspack_plugin_esm_library/src/chunk_link.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,8 @@ impl ExternalInterop {
184184
let mut source = ConcatSource::default();
185185
let name = self.required_symbol.as_ref();
186186

187-
let is_async = ModuleGraph::is_async(&compilation.async_modules_artifact, &self.module);
187+
let is_async =
188+
ModuleGraph::is_async(&compilation.async_modules_artifact.borrow(), &self.module);
188189

189190
if let Some(name) = name {
190191
source.add(RawStringSource::from(format!(

crates/rspack_plugin_esm_library/src/dependency/dyn_import.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ fn then_expr(
6868
}
6969
runtime_requirements.insert(RuntimeGlobals::CREATE_FAKE_NAMESPACE_OBJECT);
7070
if ModuleGraph::is_async(
71-
&compilation.async_modules_artifact,
71+
&compilation.async_modules_artifact.borrow(),
7272
compilation
7373
.get_module_graph()
7474
.module_identifier_by_dependency_id(dep_id)

0 commit comments

Comments
 (0)