Skip to content

Commit 96a3043

Browse files
author
David Ungar
committed
add deserialization performance test
1 parent 601a312 commit 96a3043

File tree

2 files changed

+29
-11
lines changed

2 files changed

+29
-11
lines changed

Sources/SwiftDriver/IncrementalCompilation/ModuleDependencyGraph.swift

+9-3
Original file line numberDiff line numberDiff line change
@@ -613,6 +613,14 @@ extension ModuleDependencyGraph {
613613
info: info) else {
614614
return nil
615615
}
616+
let graph = try deserialize(data, info: info)
617+
info.reporter?.report("Read dependency graph", path)
618+
return graph
619+
}
620+
621+
@_spi(Testing) public static func deserialize(_ data: ByteString,
622+
info: IncrementalCompilationState.IncrementalDependencyAndInputSetup
623+
) throws -> ModuleDependencyGraph {
616624

617625
struct Visitor: BitstreamVisitor {
618626
private let fileSystem: FileSystem
@@ -778,9 +786,7 @@ extension ModuleDependencyGraph {
778786
throw ReadError.mismatchedSerializedGraphVersion(
779787
expected: Self.serializedGraphVersion, read: readVersion)
780788
}
781-
let graph = visitor.finalizeGraph()
782-
info.reporter?.report("Read dependency graph", path)
783-
return graph
789+
return visitor.finalizeGraph()
784790
}
785791

786792
/// Ensure the saved path points to saved graph from the prior build, and read it.

Tests/SwiftDriverTests/CleanBuildPerformanceTests.swift renamed to Tests/SwiftDriverTests/IncrementalBuildPerformanceTests.swift

+20-8
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import XCTest
66
import TSCBasic
77
import TSCUtility
88

9-
class CleanBuildPerformanceTests: XCTestCase {
10-
enum WhatToMeasure { case reading, writing }
9+
class IncrementalBuildPerformanceTests: XCTestCase {
10+
enum WhatToMeasure { case readingSwiftDeps, writing, readingPriors }
1111

1212
/// Test the cost of reading `swiftdeps` files without doing a full build. Use the files in "TestInputs/SampleSwiftDeps"
1313
///
@@ -22,14 +22,17 @@ class CleanBuildPerformanceTests: XCTestCase {
2222
/// `cd` to the package directory, then:
2323
/// `rm TestInputs/SampleSwiftDeps/*; rm -rf .build; swift build; find .build -name \*.swiftdeps -a -exec cp \{\} TestInputs/SampleSwiftDeps \;`
2424
func testCleanBuildSwiftDepsPerformance() throws {
25-
try testCleanBuildPerformance(.reading)
25+
try testPerformance(.readingSwiftDeps)
2626
}
27-
func testCleanBuildSavingPriorsPerformance() throws {
28-
try testCleanBuildPerformance(.writing)
27+
func testSavingPriorsPerformance() throws {
28+
try testPerformance(.writing)
29+
}
30+
func testReadingPriorsPerformance() throws {
31+
try testPerformance(.readingPriors)
2932
}
3033

3134

32-
func testCleanBuildPerformance(_ whatToMeasure: WhatToMeasure) throws {
35+
func testPerformance(_ whatToMeasure: WhatToMeasure) throws {
3336

3437
#if !os(macOS)
3538
// rdar://81411914
@@ -67,16 +70,25 @@ class CleanBuildPerformanceTests: XCTestCase {
6770
.mock(options: [], outputFileMap: outputFileMap)
6871
let g = ModuleDependencyGraph(info, .updatingAfterCompilation)
6972
switch whatToMeasure {
70-
case .reading:
73+
case .readingSwiftDeps:
7174
measure {readSwiftDeps(for: inputs, into: g)}
7275
case .writing:
7376
readSwiftDeps(for: inputs, into: g)
7477
measure {
75-
ModuleDependencyGraph.Serializer.serialize(
78+
_ = ModuleDependencyGraph.Serializer.serialize(
7679
g,
7780
"mock compiler version",
7881
ModuleDependencyGraph.serializedGraphVersion)
7982
}
83+
case .readingPriors:
84+
readSwiftDeps(for: inputs, into: g)
85+
let data = ModuleDependencyGraph.Serializer.serialize(
86+
g,
87+
"mock compiler version",
88+
ModuleDependencyGraph.serializedGraphVersion)
89+
measure {
90+
try? XCTAssertNoThrow(ModuleDependencyGraph.deserialize(data, info: info))
91+
}
8092
}
8193
}
8294

0 commit comments

Comments
 (0)