Skip to content

Commit e84ef2c

Browse files
Metrics: Generalize counters, ensure task counters are propagated to clients observing messages
1 parent de0261d commit e84ef2c

File tree

12 files changed

+28
-98
lines changed

12 files changed

+28
-98
lines changed

Sources/SWBBuildService/BuildOperationMessages.swift

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -705,20 +705,8 @@ private final class TaskOutputHandler: TaskOutputDelegate {
705705
}
706706
}
707707

708-
func incrementClangCacheHit() {
709-
self.counters[.clangCacheHits, default: 0] += 1
710-
}
711-
712-
func incrementClangCacheMiss() {
713-
self.counters[.clangCacheMisses, default: 0] += 1
714-
}
715-
716-
func incrementSwiftCacheHit() {
717-
self.counters[.swiftCacheHits, default: 0] += 1
718-
}
719-
720-
func incrementSwiftCacheMiss() {
721-
self.counters[.swiftCacheMisses, default: 0] += 1
708+
func incrementCounter(_ counter: BuildOperationMetrics.Counter) {
709+
self.counters[counter, default: 0] += 1
722710
}
723711

724712
func incrementTaskCounter(_ counter: BuildOperationMetrics.TaskCounter) {
@@ -944,10 +932,7 @@ private final class DiscardingTaskOutputHandler: TaskOutputDelegate {
944932
func subtaskUpToDate(_ subtask: any ExecutableTask) {}
945933
func previouslyBatchedSubtaskUpToDate(signature: ByteString, target: ConfiguredTarget) {}
946934
func updateResult(_ result: TaskResult) {}
947-
func incrementClangCacheHit() {}
948-
func incrementClangCacheMiss() {}
949-
func incrementSwiftCacheHit() {}
950-
func incrementSwiftCacheMiss() {}
935+
func incrementCounter(_ counter: BuildOperationMetrics.Counter) {}
951936
func incrementTaskCounter(_ counter: BuildOperationMetrics.TaskCounter) {}
952937
}
953938

Sources/SWBBuildSystem/BuildOperation.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -806,7 +806,7 @@ package final class BuildOperation: BuildSystemOperation {
806806
}
807807

808808
// `buildComplete()` should not run within `queue`, otherwise there can be a deadlock during cancelling.
809-
return delegate.buildComplete(self, status: effectiveStatus, delegate: buildOutputDelegate, metrics: .init(counters: aggregatedCounters))
809+
return delegate.buildComplete(self, status: effectiveStatus, delegate: buildOutputDelegate, metrics: .init(counters: aggregatedCounters, taskCounters: aggregatedTaskCounters))
810810
}
811811

812812
func prepareForBuilding() async -> ([String], [String])? {

Sources/SWBProtocol/BuildOperationMessages.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -500,8 +500,12 @@ public struct BuildOperationMetrics: Equatable, Codable, Sendable {
500500

501501
public let counters: [Counter: Int]
502502

503-
public init(counters: [Counter : Int]) {
503+
/// The key is the first component of task rule info, a.k.a. the rule info type
504+
public let taskCounters: [String: [TaskCounter: Int]]
505+
506+
public init(counters: [Counter : Int], taskCounters: [String: [TaskCounter: Int]]) {
504507
self.counters = counters
508+
self.taskCounters = taskCounters
505509
}
506510
}
507511

Sources/SWBTaskExecution/Task.swift

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -608,14 +608,7 @@ public protocol TaskOutputDelegate: DiagnosticProducingDelegate
608608
/// Report a task which was previously batched as up-to-date.
609609
func previouslyBatchedSubtaskUpToDate(signature: ByteString, target: ConfiguredTarget)
610610

611-
func incrementClangCacheHit()
612-
613-
func incrementClangCacheMiss()
614-
615-
func incrementSwiftCacheHit()
616-
617-
func incrementSwiftCacheMiss()
618-
611+
func incrementCounter(_ counter: BuildOperationMetrics.Counter)
619612
func incrementTaskCounter(_ counter: BuildOperationMetrics.TaskCounter)
620613

621614
var counters: [BuildOperationMetrics.Counter: Int] { get }

Sources/SWBTaskExecution/TaskActions/ClangCompileTaskAction.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ public final class ClangCompileTaskAction: TaskAction, BuildValueValidatingTaskA
414414
if enableDiagnosticRemarks {
415415
outputDelegate.note("cache miss: \(cacheKey)")
416416
}
417-
outputDelegate.incrementClangCacheMiss()
417+
outputDelegate.incrementCounter(.clangCacheMisses)
418418
outputDelegate.incrementTaskCounter(.cacheMisses)
419419
outputDelegate.emitOutput("Cache miss\n")
420420
return false
@@ -427,7 +427,7 @@ public final class ClangCompileTaskAction: TaskAction, BuildValueValidatingTaskA
427427
outputDelegate.note("missing CAS output \(output.name): \(output.casID)")
428428
outputDelegate.note("cache miss: \(cacheKey)")
429429
}
430-
outputDelegate.incrementClangCacheMiss()
430+
outputDelegate.incrementCounter(.clangCacheMisses)
431431
outputDelegate.incrementTaskCounter(.cacheMisses)
432432
outputDelegate.emitOutput("Cache miss\n")
433433
return false
@@ -440,7 +440,7 @@ public final class ClangCompileTaskAction: TaskAction, BuildValueValidatingTaskA
440440
outputDelegate.note("using CAS output \(output.name): \(output.casID)")
441441
}
442442
}
443-
outputDelegate.incrementClangCacheHit()
443+
outputDelegate.incrementCounter(.clangCacheHits)
444444
outputDelegate.incrementTaskCounter(.cacheHits)
445445
outputDelegate.emitOutput("Cache hit\n")
446446
outputDelegate.emitOutput(ByteString(encodingAsUTF8: diagnosticText))

Sources/SWBTaskExecution/TaskActions/EmbedSwiftStdLibTaskAction.swift

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -472,15 +472,7 @@ public final class EmbedSwiftStdLibTaskAction: TaskAction {
472472
logV(args.joined(separator: " "))
473473

474474
final class CapturingOutputDelegate: TaskOutputDelegate {
475-
func incrementClangCacheHit() {
476-
// TBD
477-
}
478-
479-
func incrementClangCacheMiss() {
480-
// TBD
481-
}
482-
func incrementSwiftCacheHit() {}
483-
func incrementSwiftCacheMiss() {}
475+
func incrementCounter(_ counter: BuildOperationMetrics.Counter) {}
484476
func incrementTaskCounter(_ counter: BuildOperationMetrics.TaskCounter) {}
485477

486478
var counters: [BuildOperationMetrics.Counter : Int] = [:]

Sources/SWBTaskExecution/TaskActions/GenericCachingTaskAction.swift

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -404,20 +404,8 @@ fileprivate final class CapturingTaskOutputDelegate: TaskOutputDelegate {
404404
underlyingTaskOutputDelegate.previouslyBatchedSubtaskUpToDate(signature: signature, target: target)
405405
}
406406

407-
func incrementClangCacheHit() {
408-
underlyingTaskOutputDelegate.incrementClangCacheHit()
409-
}
410-
411-
func incrementClangCacheMiss() {
412-
underlyingTaskOutputDelegate.incrementClangCacheMiss()
413-
}
414-
415-
func incrementSwiftCacheHit() {
416-
underlyingTaskOutputDelegate.incrementSwiftCacheHit()
417-
}
418-
419-
func incrementSwiftCacheMiss() {
420-
underlyingTaskOutputDelegate.incrementSwiftCacheMiss()
407+
func incrementCounter(_ counter: BuildOperationMetrics.Counter) {
408+
underlyingTaskOutputDelegate.incrementCounter(counter)
421409
}
422410

423411
func incrementTaskCounter(_ counter: BuildOperationMetrics.TaskCounter) {

Sources/SWBTaskExecution/TaskActions/SwiftDriverJobTaskAction.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -670,11 +670,11 @@ public final class SwiftDriverJobTaskAction: TaskAction, BuildValueValidatingTas
670670
outputDelegate.note("replay cache \(result ? "hit" : "miss")")
671671
}
672672
if result {
673-
outputDelegate.incrementSwiftCacheHit()
673+
outputDelegate.incrementCounter(.swiftCacheHits)
674674
outputDelegate.incrementTaskCounter(.cacheHits)
675675
outputDelegate.emitOutput("Cache hit\n")
676676
} else {
677-
outputDelegate.incrementSwiftCacheMiss()
677+
outputDelegate.incrementCounter(.swiftCacheMisses)
678678
outputDelegate.incrementTaskCounter(.cacheMisses)
679679
outputDelegate.emitOutput("Cache miss\n")
680680
}

Sources/SWBTestSupport/BuildOperationTester.swift

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1783,20 +1783,8 @@ private final class BuildOperationTesterDelegate: BuildOperationDelegate {
17831783
}
17841784

17851785
private class TesterTaskOutputDelegate: TaskOutputDelegate {
1786-
func incrementClangCacheHit() {
1787-
self.counters[.clangCacheHits, default: 0] += 1
1788-
}
1789-
1790-
func incrementClangCacheMiss() {
1791-
self.counters[.clangCacheMisses, default: 0] += 1
1792-
}
1793-
1794-
func incrementSwiftCacheHit() {
1795-
self.counters[.swiftCacheHits, default: 0] += 1
1796-
}
1797-
1798-
func incrementSwiftCacheMiss() {
1799-
self.counters[.swiftCacheMisses, default: 0] += 1
1786+
func incrementCounter(_ counter: BuildOperationMetrics.Counter) {
1787+
self.counters[counter, default: 0] += 1
18001788
}
18011789

18021790
func incrementTaskCounter(_ counter: BuildOperationMetrics.TaskCounter) {

Sources/SwiftBuild/ConsoleCommands/SWBServiceConsoleBuildCommandProtocol.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
public import Foundation
1616
public import SWBProjectModel
17+
public import SWBProtocol
1718

1819
import SWBUtil
1920

@@ -168,10 +169,10 @@ public enum SwiftBuildMessage {
168169
}
169170

170171
public struct BuildOperationMetrics {
171-
let clangCacheHits: Int
172-
let clangCacheMisses: Int
173-
let swiftCacheHits: Int
174-
let swiftCacheMisses: Int
172+
let counters: [SWBProtocol.BuildOperationMetrics.Counter: Int]
173+
174+
/// The key is the first component of task rule info, a.k.a. the rule info type
175+
let taskCounters: [String: [SWBProtocol.BuildOperationMetrics.TaskCounter: Int]]
175176
}
176177

177178
public struct BuildCompletedInfo {

0 commit comments

Comments
 (0)