Skip to content

Commit b7073d2

Browse files
authored
Reduce SourceGraph queue synchronization contention. (#307)
1 parent b9de9fa commit b7073d2

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

Sources/PeripheryKit/Indexer/SourceGraph.swift

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,14 +127,18 @@ public final class SourceGraph {
127127

128128
func add(_ reference: Reference) {
129129
mutationQueue.sync {
130-
_ = allReferences.insert(reference)
130+
addUnsafe(reference)
131+
}
132+
}
131133

132-
if allReferencesByUsr[reference.usr] == nil {
133-
allReferencesByUsr[reference.usr] = []
134-
}
134+
func addUnsafe(_ reference: Reference) {
135+
_ = allReferences.insert(reference)
135136

136-
allReferencesByUsr[reference.usr]?.insert(reference)
137+
if allReferencesByUsr[reference.usr] == nil {
138+
allReferencesByUsr[reference.usr] = []
137139
}
140+
141+
allReferencesByUsr[reference.usr]?.insert(reference)
138142
}
139143

140144
func add(_ reference: Reference, from declaration: Declaration) {

Sources/PeripheryKit/Indexer/SwiftIndexer.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -622,7 +622,6 @@ public final class SwiftIndexer {
622622
reference.name = baseFunc.name
623623
reference.isRelated = true
624624

625-
graph.add(reference)
626625
self.referencedDeclsByUsr[occurrenceUsr, default: []].insert(reference)
627626
refs.append(reference)
628627
}
@@ -631,7 +630,9 @@ public final class SwiftIndexer {
631630
return true
632631
}
633632

634-
refs.forEach { graph.add($0) }
633+
graph.mutating {
634+
refs.forEach { graph.addUnsafe($0) }
635+
}
635636
}
636637

637638
private func parseReference(
@@ -679,7 +680,9 @@ public final class SwiftIndexer {
679680
danglingReferences.append(ref)
680681
}
681682

682-
refs.forEach { graph.add($0) }
683+
graph.mutating {
684+
refs.forEach { graph.addUnsafe($0) }
685+
}
683686
}
684687

685688
private func transformLocation(_ input: IndexStoreOccurrence.Location) -> SourceLocation? {

0 commit comments

Comments
 (0)