Skip to content

Commit 788467e

Browse files
committed
Fix parsing new BuildOperationMetrics
Signed-off-by: fortmarek <marekfort@me.com>
1 parent 49854bb commit 788467e

File tree

3 files changed

+46
-3
lines changed

3 files changed

+46
-3
lines changed

Sources/XCLogParser/activityparser/ActivityParser.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,15 +389,28 @@ public class ActivityParser {
389389
minorVersion: try parseAsInt(token: iterator.next()),
390390
metrics: try parseAsJson(token: iterator.next(),
391391
type: jsonType),
392+
buildOperationMetrics: nil,
392393
backtrace: nil)
393394
case .some("TaskBacktrace"):
394395
let jsonType = IDEActivityLogSectionAttachment.BuildOperationTaskBacktrace.self
395396
return try IDEActivityLogSectionAttachment(identifier: identifier,
396397
majorVersion: try parseAsInt(token: iterator.next()),
397398
minorVersion: try parseAsInt(token: iterator.next()),
398399
metrics: nil,
400+
buildOperationMetrics: nil,
399401
backtrace: try parseAsJson(token: iterator.next(),
400402
type: jsonType))
403+
case .some("BuildOperationMetrics"):
404+
let jsonType = IDEActivityLogSectionAttachment.BuildOperationMetrics.self
405+
return try IDEActivityLogSectionAttachment(identifier: identifier,
406+
majorVersion: try parseAsInt(token: iterator.next()),
407+
minorVersion: try parseAsInt(token: iterator.next()),
408+
metrics: nil,
409+
buildOperationMetrics: try parseAsJson(
410+
token: iterator.next(),
411+
type: jsonType
412+
),
413+
backtrace: nil)
401414
default:
402415
throw XCLogParserError.parseError("Unexpected attachment identifier \(identifier)")
403416
}

Sources/XCLogParser/activityparser/IDEActivityModel.swift

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -658,19 +658,22 @@ public class IDEActivityLogSectionAttachment: Encodable {
658658
public let majorVersion: UInt64
659659
public let minorVersion: UInt64
660660
public let metrics: BuildOperationTaskMetrics?
661+
public let buildOperationMetrics: BuildOperationMetrics?
661662
public let backtrace: BuildOperationTaskBacktrace?
662663

663664
public init(
664665
identifier: String,
665666
majorVersion: UInt64,
666667
minorVersion: UInt64,
667668
metrics: BuildOperationTaskMetrics?,
669+
buildOperationMetrics: BuildOperationMetrics?,
668670
backtrace: BuildOperationTaskBacktrace?
669671
) throws {
670672
self.identifier = identifier
671673
self.majorVersion = majorVersion
672674
self.minorVersion = minorVersion
673675
self.metrics = metrics
676+
self.buildOperationMetrics = buildOperationMetrics
674677
self.backtrace = backtrace
675678
}
676679

@@ -769,4 +772,23 @@ public class IDEActivityLogSectionAttachment: Encodable {
769772
private struct EmptyObject: Codable {
770773
// Empty struct for objects with no properties
771774
}
775+
776+
public struct BuildOperationMetrics: Codable {
777+
public let clangCacheHits: Int
778+
public let clangCacheMisses: Int
779+
public let swiftCacheHits: Int
780+
public let swiftCacheMisses: Int
781+
782+
public init(
783+
clangCacheHits: Int,
784+
clangCacheMisses: Int,
785+
swiftCacheHits: Int,
786+
swiftCacheMisses: Int
787+
) {
788+
self.clangCacheHits = clangCacheHits
789+
self.clangCacheMisses = clangCacheMisses
790+
self.swiftCacheHits = swiftCacheHits
791+
self.swiftCacheMisses = swiftCacheMisses
792+
}
793+
}
772794
}

Tests/XCLogParserTests/ActivityParserTests.swift

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,14 +97,20 @@ class ActivityParserTests: XCTestCase {
9797
Token.string("501796C4-6BE4-4F80-9F9D-3269617ECC17"),
9898
Token.string("localizedResultString"),
9999
Token.string("xcbuildSignature"),
100-
Token.list(2),
100+
Token.list(3),
101101
Token.classNameRef("IDEFoundation.IDEActivityLogSectionAttachment"),
102102
Token.string("com.apple.dt.ActivityLogSectionAttachment.TaskBacktrace"),
103103
Token.int(1),
104104
Token.int(0),
105105
// swiftlint:disable:next line_length
106106
Token.json(#"[{"description":"'Planning Swift module ConcurrencyExtras (arm64)' had never run","category":{"ruleNeverBuilt":{}},"identifier":{"storage":{"task":{"_0":[0,80,50,58,116,97,114,103,101,116,45,67,111,110,99,117,114,114,101,110,99,121,69,120,116,114,97,115,45,101,102,52,50,51,48,52,53,57,52,98,102,56,53,50,102,52,51,56,101,102,55,99,51,97,49,51,54,98,50,99,57,48,100,102,56,55,49,56,97,102,50,98,57,100,51,97,97,99,48,100,48,100,99,97,50,50,98,52,99,50,57,99,50,45,58,66,101,116,97,32,68,101,98,117,103,58,51,99,57,97,99,57,53,50,98,52,99,56,49,100,57,99,99,49,55,100,49,97,102,52,55,49,97,48,52,53,101,56]}}},"frameKind":{"genericTask":{}}}]"#),
107107
Token.classNameRef("IDEFoundation.IDEActivityLogSectionAttachment"),
108+
Token.string("com.apple.dt.ActivityLogSectionAttachment.BuildOperationMetrics"),
109+
Token.int(1),
110+
Token.int(0),
111+
// swiftlint:disable:next line_length
112+
Token.json(#"{"clangCacheHits":0,"clangCacheMisses":2,"swiftCacheHits":0,"swiftCacheMisses":8}"#),
113+
Token.classNameRef("IDEFoundation.IDEActivityLogSectionAttachment"),
108114
Token.string("com.apple.dt.ActivityLogSectionAttachment.TaskMetrics"),
109115
Token.int(1),
110116
Token.int(0),
@@ -345,9 +351,11 @@ class ActivityParserTests: XCTestCase {
345351
XCTAssertEqual("501796C4-6BE4-4F80-9F9D-3269617ECC17", logSection.uniqueIdentifier)
346352
XCTAssertEqual("localizedResultString", logSection.localizedResultString)
347353
XCTAssertEqual("xcbuildSignature", logSection.xcbuildSignature)
348-
XCTAssertEqual(2, logSection.attachments.count)
354+
XCTAssertEqual(3, logSection.attachments.count)
349355
XCTAssertEqual(logSection.attachments[0].backtrace?.frames.first?.category, .ruleNeverBuilt)
350-
XCTAssertEqual(logSection.attachments[1].metrics?.wcDuration, 1)
356+
print(logSection.attachments)
357+
XCTAssertEqual(logSection.attachments[1].buildOperationMetrics?.clangCacheMisses, 2)
358+
XCTAssertEqual(logSection.attachments[2].metrics?.wcDuration, 1)
351359
XCTAssertEqual(0, logSection.unknown)
352360
}
353361

0 commit comments

Comments
 (0)