Skip to content

Commit d2a59e0

Browse files
committed
Add new benchmarks for NSString bridging to cover non-tagged cases
1 parent 892c406 commit d2a59e0

File tree

2 files changed

+55
-6
lines changed

2 files changed

+55
-6
lines changed

benchmark/single-source/NSStringConversion.swift

Lines changed: 51 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,64 @@
1111
//===----------------------------------------------------------------------===//
1212

1313
// <rdar://problem/19003201>
14+
#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS)
15+
1416
import TestsUtils
1517
import Foundation
1618

17-
public let NSStringConversion = BenchmarkInfo(
18-
name: "NSStringConversion",
19-
runFunction: run_NSStringConversion,
20-
tags: [.validation, .api, .String, .bridging])
19+
fileprivate var test:NSString = ""
20+
21+
public let NSStringConversion = [
22+
BenchmarkInfo(name: "NSStringConversion",
23+
runFunction: run_NSStringConversion,
24+
tags: [.validation, .api, .String, .bridging]),
25+
BenchmarkInfo(name: "NSStringConversion.UTF8",
26+
runFunction: run_NSStringConversion_nonASCII,
27+
tags: [.validation, .api, .String, .bridging],
28+
setUpFunction: { test = NSString(cString: "tëst", encoding: String.Encoding.utf8.rawValue)! }),
29+
BenchmarkInfo(name: "NSStringConversion.Mutable",
30+
runFunction: run_NSMutableStringConversion,
31+
tags: [.validation, .api, .String, .bridging],
32+
setUpFunction: { test = NSMutableString(cString: "test", encoding: String.Encoding.ascii.rawValue)! }),
33+
BenchmarkInfo(name: "NSStringConversion.Long",
34+
runFunction: run_NSStringConversion_long,
35+
tags: [.validation, .api, .String, .bridging],
36+
setUpFunction: { test = NSString(cString: "The quick brown fox jumps over the lazy dog", encoding: String.Encoding.ascii.rawValue)! } ),
37+
BenchmarkInfo(name: "NSStringConversion.LongUTF8",
38+
runFunction: run_NSStringConversion_longNonASCII,
39+
tags: [.validation, .api, .String, .bridging],
40+
setUpFunction: { test = NSString(cString: "Thë qüick bröwn föx jumps over the lazy dög", encoding: String.Encoding.utf8.rawValue)! })]
2141

2242
public func run_NSStringConversion(_ N: Int) {
23-
#if _runtime(_ObjC)
2443
let test:NSString = NSString(cString: "test", encoding: String.Encoding.ascii.rawValue)!
2544
for _ in 1...N * 10000 {
45+
//Doesn't test accessing the String contents to avoid changing historical benchmark numbers
2646
blackHole(identity(test) as String)
2747
}
28-
#endif
2948
}
49+
50+
fileprivate func innerLoop(_ str: NSString, _ N: Int, _ scale: Int = 5000) {
51+
for _ in 1...N * scale {
52+
for char in (identity(str) as String).utf8 {
53+
blackHole(char)
54+
}
55+
}
56+
}
57+
58+
public func run_NSStringConversion_nonASCII(_ N: Int) {
59+
innerLoop(test, N, 2500)
60+
}
61+
62+
public func run_NSMutableStringConversion(_ N: Int) {
63+
innerLoop(test, N)
64+
}
65+
66+
public func run_NSStringConversion_long(_ N: Int) {
67+
innerLoop(test, N, 1000)
68+
}
69+
70+
public func run_NSStringConversion_longNonASCII(_ N: Int) {
71+
innerLoop(test, N, 300)
72+
}
73+
74+
#endif

benchmark/utils/main.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,9 @@ import MonteCarloPi
9292
import NibbleSort
9393
import NSDictionaryCastToSwift
9494
import NSError
95+
#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS)
9596
import NSStringConversion
97+
#endif
9698
import NopDeinit
9799
import ObjectAllocation
98100
#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS)
@@ -262,7 +264,9 @@ registerBenchmark(MonteCarloE)
262264
registerBenchmark(MonteCarloPi)
263265
registerBenchmark(NSDictionaryCastToSwift)
264266
registerBenchmark(NSErrorTest)
267+
#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS)
265268
registerBenchmark(NSStringConversion)
269+
#endif
266270
registerBenchmark(NibbleSort)
267271
registerBenchmark(NopDeinit)
268272
registerBenchmark(ObjectAllocation)

0 commit comments

Comments
 (0)