Skip to content

Commit 4a49fc0

Browse files
authored
refactor: file counter save the resource id which used the file (#11757)
* feat: file counter save the resource id which used the file * refactor: remove module.depends_on & factorizeinfo.depends_on * fix: comment * fix: ci
1 parent 99d2a36 commit 4a49fc0

File tree

13 files changed

+197
-178
lines changed

13 files changed

+197
-178
lines changed

crates/rspack_core/src/cache/persistent/occasion/make/alternatives/module.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ use rspack_cacheable::{cacheable, cacheable_dyn, utils::OwnedOrRef};
44
use rspack_collections::Identifiable;
55
use rspack_error::{Result, impl_empty_diagnosable_trait};
66
use rspack_hash::RspackHashDigest;
7-
use rspack_paths::ArcPathSet;
87
use rspack_sources::BoxSource;
98
use rspack_util::source_map::{ModuleSourceMapConfig, SourceMapKind};
109

@@ -102,11 +101,6 @@ impl Module for TempModule {
102101
true
103102
}
104103

105-
fn depends_on(&self, _modified_file: &ArcPathSet) -> bool {
106-
// return true to make sure this module always rebuild
107-
true
108-
}
109-
110104
async fn code_generation(
111105
&self,
112106
_compilation: &Compilation,

crates/rspack_core/src/cache/persistent/occasion/make/mod.rs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ use rustc_hash::FxHashSet as HashSet;
99

1010
use super::super::{Storage, cacheable_context::CacheableContext};
1111
use crate::{
12-
FactorizeInfo, FileCounter, ModuleGraph,
12+
FactorizeInfo, ModuleGraph,
1313
compilation::make::{MakeArtifact, MakeArtifactState},
14+
utils::{FileCounter, ResourceId},
1415
};
1516

1617
/// Make Occasion is used to save MakeArtifact
@@ -75,10 +76,11 @@ impl MakeOccasion {
7576
let mut build_dep = FileCounter::default();
7677
for (mid, module) in mg.modules() {
7778
let build_info = module.build_info();
78-
file_dep.add_batch_file(&build_info.file_dependencies);
79-
context_dep.add_batch_file(&build_info.context_dependencies);
80-
missing_dep.add_batch_file(&build_info.missing_dependencies);
81-
build_dep.add_batch_file(&build_info.build_dependencies);
79+
let resource_id = ResourceId::from(mid);
80+
file_dep.add_files(&resource_id, &build_info.file_dependencies);
81+
context_dep.add_files(&resource_id, &build_info.context_dependencies);
82+
missing_dep.add_files(&resource_id, &build_info.missing_dependencies);
83+
build_dep.add_files(&resource_id, &build_info.build_dependencies);
8284
if !module.diagnostics().is_empty() {
8385
make_failed_module.insert(mid);
8486
}
@@ -90,9 +92,10 @@ impl MakeOccasion {
9092
&& !info.is_success()
9193
{
9294
make_failed_dependencies.insert(dep_id);
93-
file_dep.add_batch_file(&info.file_dependencies());
94-
context_dep.add_batch_file(&info.context_dependencies());
95-
missing_dep.add_batch_file(&info.missing_dependencies());
95+
let resource = dep_id.into();
96+
file_dep.add_files(&resource, &info.file_dependencies());
97+
context_dep.add_files(&resource, &info.context_dependencies());
98+
missing_dep.add_files(&resource, &info.missing_dependencies());
9699
}
97100
}
98101

crates/rspack_core/src/compilation/make/artifact.rs

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ use rustc_hash::FxHashSet as HashSet;
44

55
use crate::{
66
BuildDependency, DependencyId, FactorizeInfo, ModuleGraph, ModuleGraphPartial, ModuleIdentifier,
7-
compilation::make::ModuleToLazyMake, utils::FileCounter,
7+
compilation::make::ModuleToLazyMake,
8+
utils::{FileCounter, ResourceId},
89
};
910

1011
/// Enum used to mark whether module graph has been built.
@@ -91,18 +92,19 @@ impl MakeArtifact {
9192
.expect("should have module");
9293
// clean module build info
9394
let build_info = module.build_info();
95+
let resource_id = ResourceId::from(module_identifier);
9496
self
9597
.file_dependencies
96-
.remove_batch_file(&build_info.file_dependencies);
98+
.remove_files(&resource_id, &build_info.file_dependencies);
9799
self
98100
.context_dependencies
99-
.remove_batch_file(&build_info.context_dependencies);
101+
.remove_files(&resource_id, &build_info.context_dependencies);
100102
self
101103
.missing_dependencies
102-
.remove_batch_file(&build_info.missing_dependencies);
104+
.remove_files(&resource_id, &build_info.missing_dependencies);
103105
self
104106
.build_dependencies
105-
.remove_batch_file(&build_info.build_dependencies);
107+
.remove_files(&resource_id, &build_info.build_dependencies);
106108
self.make_failed_module.remove(module_identifier);
107109

108110
// clean incoming & all_dependencies(outgoing) factorize info
@@ -120,15 +122,16 @@ impl MakeArtifact {
120122
// make failed dependencies clean it.
121123
let dep = mg.dependency_by_id(dep_id).expect("should have dependency");
122124
let info = FactorizeInfo::get_from(dep).expect("should have factorize info");
125+
let resource_id = ResourceId::from(dep_id);
123126
self
124127
.file_dependencies
125-
.remove_batch_file(&info.file_dependencies());
128+
.remove_files(&resource_id, &info.file_dependencies());
126129
self
127130
.context_dependencies
128-
.remove_batch_file(&info.context_dependencies());
131+
.remove_files(&resource_id, &info.context_dependencies());
129132
self
130133
.missing_dependencies
131-
.remove_batch_file(&info.missing_dependencies());
134+
.remove_files(&resource_id, &info.missing_dependencies());
132135
}
133136

134137
self.revoked_modules.insert(*module_identifier);
@@ -148,15 +151,16 @@ impl MakeArtifact {
148151
// make failed dependencies clean it.
149152
let dep = mg.dependency_by_id(dep_id).expect("should have dependency");
150153
let info = FactorizeInfo::get_from(dep).expect("should have factorize info");
154+
let resource_id = ResourceId::from(dep_id);
151155
self
152156
.file_dependencies
153-
.remove_batch_file(&info.file_dependencies());
157+
.remove_files(&resource_id, &info.file_dependencies());
154158
self
155159
.context_dependencies
156-
.remove_batch_file(&info.context_dependencies());
160+
.remove_files(&resource_id, &info.context_dependencies());
157161
self
158162
.missing_dependencies
159-
.remove_batch_file(&info.missing_dependencies());
163+
.remove_files(&resource_id, &info.missing_dependencies());
160164
// related_dep_ids will contain dep_id it self
161165
info.related_dep_ids().into_owned()
162166
} else {

crates/rspack_core/src/compilation/make/graph_updater/cutout/mod.rs

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use rustc_hash::FxHashSet as HashSet;
66

77
use self::{fix_build_meta::FixBuildMeta, fix_issuers::FixIssuers};
88
use super::{MakeArtifact, UpdateParam};
9-
use crate::{BuildDependency, Compilation, FactorizeInfo};
9+
use crate::{BuildDependency, Compilation, ResourceId};
1010

1111
/// Cutout module graph.
1212
///
@@ -59,21 +59,25 @@ impl Cutout {
5959
}));
6060
}
6161
UpdateParam::ModifiedFiles(files) | UpdateParam::RemovedFiles(files) => {
62-
for module in module_graph.modules().values() {
63-
// check has dependencies modified
64-
if module.depends_on(&files) {
65-
// add module id
66-
force_build_modules.insert(module.identifier());
67-
}
68-
}
69-
// only failed dependencies need to check
70-
for dep_id in &artifact.make_failed_dependencies {
71-
let dep = module_graph
72-
.dependency_by_id(dep_id)
73-
.expect("should have dependency");
74-
let info = FactorizeInfo::get_from(dep).expect("should have factorize info");
75-
if info.depends_on(&files) {
76-
force_build_deps.insert(*dep_id);
62+
for file in files {
63+
for resource_ids in [
64+
artifact.file_dependencies.related_resource_ids(&file),
65+
artifact.context_dependencies.related_resource_ids(&file),
66+
artifact.missing_dependencies.related_resource_ids(&file),
67+
]
68+
.into_iter()
69+
.flatten()
70+
{
71+
for resource_id in resource_ids {
72+
match resource_id {
73+
ResourceId::Module(mid) => {
74+
force_build_modules.insert(*mid);
75+
}
76+
ResourceId::Dependency(dep_id) => {
77+
force_build_deps.insert(*dep_id);
78+
}
79+
}
80+
}
7781
}
7882
}
7983
}

crates/rspack_core/src/compilation/make/graph_updater/repair/build.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ use crate::{
1010
AsyncDependenciesBlock, BoxDependency, BuildContext, BuildResult, CompilationId, CompilerId,
1111
CompilerOptions, DependencyParents, Module, ModuleProfile, ResolverFactory, SharedPluginDriver,
1212
compilation::make::{ForwardedIdSet, HasLazyDependencies, LazyDependencies},
13-
utils::task_loop::{Task, TaskResult, TaskType},
13+
utils::{
14+
ResourceId,
15+
task_loop::{Task, TaskResult, TaskType},
16+
},
1417
};
1518

1619
#[derive(Debug)]
@@ -125,18 +128,19 @@ impl Task<TaskContext> for BuildResultTask {
125128
module_graph
126129
.get_optimization_bailout_mut(&module.identifier())
127130
.extend(build_result.optimization_bailouts);
131+
let resource_id = ResourceId::from(module.identifier());
128132
artifact
129133
.file_dependencies
130-
.add_batch_file(&build_info.file_dependencies);
134+
.add_files(&resource_id, &build_info.file_dependencies);
131135
artifact
132136
.context_dependencies
133-
.add_batch_file(&build_info.context_dependencies);
137+
.add_files(&resource_id, &build_info.context_dependencies);
134138
artifact
135139
.missing_dependencies
136-
.add_batch_file(&build_info.missing_dependencies);
140+
.add_files(&resource_id, &build_info.missing_dependencies);
137141
artifact
138142
.build_dependencies
139-
.add_batch_file(&build_info.build_dependencies);
143+
.add_files(&resource_id, &build_info.build_dependencies);
140144

141145
let mut lazy_dependencies = LazyDependencies::default();
142146
let mut queue = VecDeque::new();

crates/rspack_core/src/compilation/make/graph_updater/repair/factorize.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ use crate::{
99
FactorizeInfo, ModuleFactory, ModuleFactoryCreateData, ModuleFactoryResult, ModuleIdentifier,
1010
ModuleLayer, ModuleProfile, Resolve, ResolverFactory,
1111
module_graph::ModuleGraphModule,
12-
utils::task_loop::{Task, TaskResult, TaskType},
12+
utils::{
13+
ResourceId,
14+
task_loop::{Task, TaskResult, TaskType},
15+
},
1316
};
1417

1518
#[derive(Debug)]
@@ -169,15 +172,16 @@ impl Task<TaskContext> for FactorizeResultTask {
169172

170173
let artifact = &mut context.artifact;
171174
if !factorize_info.diagnostics().is_empty() {
175+
let resource_id = ResourceId::from(*dependencies[0].id());
172176
artifact
173177
.file_dependencies
174-
.add_batch_file(&factorize_info.file_dependencies());
178+
.add_files(&resource_id, &factorize_info.file_dependencies());
175179
artifact
176180
.context_dependencies
177-
.add_batch_file(&factorize_info.context_dependencies());
181+
.add_files(&resource_id, &factorize_info.context_dependencies());
178182
artifact
179183
.missing_dependencies
180-
.add_batch_file(&factorize_info.missing_dependencies());
184+
.add_files(&resource_id, &factorize_info.missing_dependencies());
181185
artifact
182186
.make_failed_dependencies
183187
.insert(*dependencies[0].id());

crates/rspack_core/src/dependency/factorize_info.rs

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -55,27 +55,6 @@ impl FactorizeInfo {
5555
matches!(self, FactorizeInfo::Success)
5656
}
5757

58-
pub fn depends_on(&self, modified_file: &ArcPathSet) -> bool {
59-
if let FactorizeInfo::Failed {
60-
file_dependencies,
61-
context_dependencies,
62-
missing_dependencies,
63-
..
64-
} = self
65-
{
66-
for item in modified_file {
67-
if file_dependencies.contains(item)
68-
|| context_dependencies.contains(item)
69-
|| missing_dependencies.contains(item)
70-
{
71-
return true;
72-
}
73-
}
74-
}
75-
76-
false
77-
}
78-
7958
pub fn related_dep_ids(&self) -> Cow<'_, [DependencyId]> {
8059
match &self {
8160
Self::Success => Cow::Owned(vec![]),

crates/rspack_core/src/module.rs

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -396,21 +396,6 @@ pub trait Module:
396396
|| self.diagnostics().iter().any(|item| item.is_error())
397397
}
398398

399-
fn depends_on(&self, modified_file: &ArcPathSet) -> bool {
400-
let build_info = self.build_info();
401-
for item in modified_file {
402-
if build_info.file_dependencies.contains(item)
403-
|| build_info.build_dependencies.contains(item)
404-
|| build_info.context_dependencies.contains(item)
405-
|| build_info.missing_dependencies.contains(item)
406-
{
407-
return true;
408-
}
409-
}
410-
411-
false
412-
}
413-
414399
fn need_id(&self) -> bool {
415400
true
416401
}

0 commit comments

Comments
 (0)