Skip to content

Commit 19cdeaa

Browse files
committed
[CAS] For compilation tasks, add an unintrusive cache hit/miss indicator
This goes in the task's output, so in the Xcode build log the user would have to expand the task output to see such detail.
1 parent e9ff528 commit 19cdeaa

File tree

4 files changed

+14
-0
lines changed

4 files changed

+14
-0
lines changed

Sources/SWBTaskExecution/TaskActions/ClangCompileTaskAction.swift

+3
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,7 @@ public final class ClangCompileTaskAction: TaskAction, BuildValueValidatingTaskA
373373
}
374374
outputDelegate.incrementClangCacheMiss()
375375
outputDelegate.incrementTaskCounter(.cacheMisses)
376+
outputDelegate.emitOutput("Cache miss\n")
376377
return false
377378
}
378379

@@ -385,6 +386,7 @@ public final class ClangCompileTaskAction: TaskAction, BuildValueValidatingTaskA
385386
}
386387
outputDelegate.incrementClangCacheMiss()
387388
outputDelegate.incrementTaskCounter(.cacheMisses)
389+
outputDelegate.emitOutput("Cache miss\n")
388390
return false
389391
}
390392
}
@@ -397,6 +399,7 @@ public final class ClangCompileTaskAction: TaskAction, BuildValueValidatingTaskA
397399
}
398400
outputDelegate.incrementClangCacheHit()
399401
outputDelegate.incrementTaskCounter(.cacheHits)
402+
outputDelegate.emitOutput("Cache hit\n")
400403
outputDelegate.emitOutput(ByteString(encodingAsUTF8: diagnosticText))
401404
return true
402405
}

Sources/SWBTaskExecution/TaskActions/SwiftDriverJobTaskAction.swift

+2
Original file line numberDiff line numberDiff line change
@@ -647,9 +647,11 @@ public final class SwiftDriverJobTaskAction: TaskAction, BuildValueValidatingTas
647647
if result {
648648
outputDelegate.incrementSwiftCacheHit()
649649
outputDelegate.incrementTaskCounter(.cacheHits)
650+
outputDelegate.emitOutput("Cache hit\n")
650651
} else {
651652
outputDelegate.incrementSwiftCacheMiss()
652653
outputDelegate.incrementTaskCounter(.cacheMisses)
654+
outputDelegate.emitOutput("Cache miss\n")
653655
}
654656
return result
655657
}

Tests/SWBBuildSystemTests/ClangCompilationCachingTests.swift

+2
Original file line numberDiff line numberDiff line change
@@ -1842,6 +1842,7 @@ extension BuildOperationTester.BuildResults {
18421842
Issue.record("Unable to find cache miss diagnostic for task \(task)", sourceLocation: sourceLocation)
18431843
return
18441844
}
1845+
check(contains: .taskHadEvent(task, event: .hadOutput(contents: "Cache miss\n")), sourceLocation: sourceLocation)
18451846
}
18461847

18471848
fileprivate func checkCompileCacheHit(_ task: Task, sourceLocation: SourceLocation = #_sourceLocation) {
@@ -1851,5 +1852,6 @@ extension BuildOperationTester.BuildResults {
18511852
return
18521853
}
18531854
while getDiagnosticMessageForTask(.contains("using CAS output"), kind: .note, task: task) != nil {}
1855+
check(contains: .taskHadEvent(task, event: .hadOutput(contents: "Cache hit\n")), sourceLocation: sourceLocation)
18541856
}
18551857
}

Tests/SWBBuildSystemTests/SwiftCompilationCachingTests.swift

+7
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ fileprivate struct SwiftCompilationCachingTests: CoreBasedTests {
9696
results.checkTask(.matchTargetName("Application"), .matchRule(["SwiftCompile", "normal", "arm64", "Compiling App.swift", "\(tmpDirPath.str)/Test/aProject/App.swift"])) { task in
9797
task.checkCommandLineMatches([.suffix("swift-frontend"), .anySequence, "-cache-compile-job", .anySequence])
9898
numCompile += 1
99+
results.checkKeyQueryCacheMiss(task)
99100
}
100101
results.checkTask(.matchTargetName("Application"), .matchRule(["SwiftEmitModule", "normal", "arm64", "Emitting module for Application"])) { _ in }
101102

@@ -121,6 +122,10 @@ fileprivate struct SwiftCompilationCachingTests: CoreBasedTests {
121122

122123
tester.userInfo = rawUserInfo.withAdditionalEnvironment(environment: metricsEnv("two"))
123124
try await tester.checkBuild(runDestination: .anyiOSDevice, persistent: true) { results in
125+
results.checkTask(.matchRule(["SwiftCompile", "normal", "arm64", "Compiling App.swift", "\(tmpDirPath.str)/Test/aProject/App.swift"])) { task in
126+
results.checkKeyQueryCacheHit(task)
127+
}
128+
124129
results.checkNote("4 hits (100%), 0 misses")
125130
}
126131
#expect(try readMetrics("two").contains("\"swiftCacheHits\":\(numCompile),\"swiftCacheMisses\":0"))
@@ -206,6 +211,7 @@ extension BuildOperationTester.BuildResults {
206211
Issue.record("Unable to find cache miss diagnostic for task \(task)", sourceLocation: sourceLocation)
207212
return
208213
}
214+
check(contains: .taskHadEvent(task, event: .hadOutput(contents: "Cache miss\n")), sourceLocation: sourceLocation)
209215
}
210216

211217
fileprivate func checkKeyQueryCacheHit(_ task: Task, sourceLocation: SourceLocation = #_sourceLocation) {
@@ -214,5 +220,6 @@ extension BuildOperationTester.BuildResults {
214220
Issue.record("Unable to find cache hit diagnostic for task \(task)", sourceLocation: sourceLocation)
215221
return
216222
}
223+
check(contains: .taskHadEvent(task, event: .hadOutput(contents: "Cache hit\n")), sourceLocation: sourceLocation)
217224
}
218225
}

0 commit comments

Comments
 (0)