Skip to content

Commit 1388193

Browse files
committed
Improve performance of sourceFilesAndDirectories
`SourceFilesAndDirectoriesKey` contained all source files in the project and computing its hash value was pretty expensive. The key didn’t really provide any value here because the only way it changes is if the build targets change and if that’s the case, we already clear `cachedSourceFilesAndDirectories`, so we can just avoid the hash value computation.
1 parent 29619a6 commit 1388193

File tree

1 file changed

+7
-11
lines changed

1 file changed

+7
-11
lines changed

Sources/BuildSystemIntegration/BuildSystemManager.swift

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -327,10 +327,8 @@ package actor BuildSystemManager: QueueBasedMessageHandler {
327327

328328
private var cachedTargetSources = RequestCache<BuildTargetSourcesRequest>()
329329

330-
/// The parameters with which `SourceFilesAndDirectories` can be cached in `cachedSourceFilesAndDirectories`.
331330
private struct SourceFilesAndDirectoriesKey: Hashable {
332331
let includeNonBuildableFiles: Bool
333-
let sourcesItems: [SourcesItem]
334332
}
335333

336334
private struct SourceFilesAndDirectories {
@@ -1045,18 +1043,16 @@ package actor BuildSystemManager: QueueBasedMessageHandler {
10451043
///
10461044
/// `includeNonBuildableFiles` determines whether non-buildable files should be included.
10471045
private func sourceFilesAndDirectories(includeNonBuildableFiles: Bool) async throws -> SourceFilesAndDirectories {
1048-
let targets = try await self.buildTargets()
1049-
let sourcesItems = try await self.sourceFiles(in: Set(targets.keys))
1050-
1051-
let key = SourceFilesAndDirectoriesKey(
1052-
includeNonBuildableFiles: includeNonBuildableFiles,
1053-
sourcesItems: sourcesItems
1054-
)
1046+
return try await cachedSourceFilesAndDirectories.get(
1047+
SourceFilesAndDirectoriesKey(includeNonBuildableFiles: includeNonBuildableFiles),
1048+
isolation: self
1049+
) { key in
1050+
let targets = try await self.buildTargets()
1051+
let sourcesItems = try await self.sourceFiles(in: Set(targets.keys))
10551052

1056-
return try await cachedSourceFilesAndDirectories.get(key, isolation: self) { key in
10571053
var files: [DocumentURI: SourceFileInfo] = [:]
10581054
var directories: [DocumentURI: SourceFileInfo] = [:]
1059-
for sourcesItem in key.sourcesItems {
1055+
for sourcesItem in sourcesItems {
10601056
let target = targets[sourcesItem.target]?.target
10611057
let isPartOfRootProject = !(target?.tags.contains(.dependency) ?? false)
10621058
let mayContainTests = target?.tags.contains(.test) ?? true

0 commit comments

Comments
 (0)