Skip to content

Commit 37a788a

Browse files
committed
[benchmark] ObjectiveCBridging Legacy Factor
1 parent ba25afb commit 37a788a

File tree

1 file changed

+79
-39
lines changed

1 file changed

+79
-39
lines changed

benchmark/single-source/ObjectiveCBridging.swift

Lines changed: 79 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,66 @@
1313
import TestsUtils
1414
import Foundation
1515

16+
let t: [BenchmarkCategory] = [.validation, .bridging]
17+
let ts: [BenchmarkCategory] = [.validation, .bridging, .String]
18+
1619
public let ObjectiveCBridging = [
17-
BenchmarkInfo(name: "ObjectiveCBridgeFromNSString", runFunction: run_ObjectiveCBridgeFromNSString, tags: [.validation, .bridging]),
18-
BenchmarkInfo(name: "ObjectiveCBridgeFromNSStringForced", runFunction: run_ObjectiveCBridgeFromNSStringForced, tags: [.validation, .bridging]),
19-
BenchmarkInfo(name: "ObjectiveCBridgeToNSString", runFunction: run_ObjectiveCBridgeToNSString, tags: [.validation, .bridging]),
20-
BenchmarkInfo(name: "ObjectiveCBridgeFromNSArrayAnyObject", runFunction: run_ObjectiveCBridgeFromNSArrayAnyObject, tags: [.validation, .bridging]),
21-
BenchmarkInfo(name: "ObjectiveCBridgeFromNSArrayAnyObjectForced", runFunction: run_ObjectiveCBridgeFromNSArrayAnyObjectForced, tags: [.validation, .bridging]),
22-
BenchmarkInfo(name: "ObjectiveCBridgeToNSArray", runFunction: run_ObjectiveCBridgeToNSArray, tags: [.validation, .bridging]),
23-
BenchmarkInfo(name: "ObjectiveCBridgeFromNSArrayAnyObjectToString", runFunction: run_ObjectiveCBridgeFromNSArrayAnyObjectToString, tags: [.validation, .bridging, .String]),
24-
BenchmarkInfo(name: "ObjectiveCBridgeFromNSArrayAnyObjectToStringForced", runFunction: run_ObjectiveCBridgeFromNSArrayAnyObjectToStringForced, tags: [.validation, .bridging, .String]),
25-
BenchmarkInfo(name: "ObjectiveCBridgeFromNSDictionaryAnyObject", runFunction: run_ObjectiveCBridgeFromNSDictionaryAnyObject, tags: [.validation, .bridging]),
26-
BenchmarkInfo(name: "ObjectiveCBridgeFromNSDictionaryAnyObjectForced", runFunction: run_ObjectiveCBridgeFromNSDictionaryAnyObjectForced, tags: [.validation, .bridging, .unstable]),
27-
BenchmarkInfo(name: "ObjectiveCBridgeToNSDictionary", runFunction: run_ObjectiveCBridgeToNSDictionary, tags: [.validation, .bridging]),
28-
BenchmarkInfo(name: "ObjectiveCBridgeFromNSDictionaryAnyObjectToString", runFunction: run_ObjectiveCBridgeFromNSDictionaryAnyObjectToString, tags: [.validation, .bridging, .String, .unstable]),
29-
BenchmarkInfo(name: "ObjectiveCBridgeFromNSDictionaryAnyObjectToStringForced", runFunction: run_ObjectiveCBridgeFromNSDictionaryAnyObjectToStringForced, tags: [.validation, .bridging, .String, .unstable]),
30-
BenchmarkInfo(name: "ObjectiveCBridgeFromNSSetAnyObject", runFunction: run_ObjectiveCBridgeFromNSSetAnyObject, tags: [.validation, .bridging]),
31-
BenchmarkInfo(name: "ObjectiveCBridgeFromNSSetAnyObjectForced", runFunction: run_ObjectiveCBridgeFromNSSetAnyObjectForced, tags: [.validation, .bridging]),
32-
BenchmarkInfo(name: "ObjectiveCBridgeToNSSet", runFunction: run_ObjectiveCBridgeToNSSet, tags: [.validation, .bridging]),
33-
BenchmarkInfo(name: "ObjectiveCBridgeFromNSSetAnyObjectToString", runFunction: run_ObjectiveCBridgeFromNSSetAnyObjectToString, tags: [.validation, .bridging, .String]),
34-
BenchmarkInfo(name: "ObjectiveCBridgeFromNSSetAnyObjectToStringForced", runFunction: run_ObjectiveCBridgeFromNSSetAnyObjectToStringForced, tags: [.validation, .bridging, .String, .unstable]),
35-
BenchmarkInfo(name: "ObjectiveCBridgeFromNSDateComponents", runFunction: run_ObjectiveCBridgeFromNSDateComponents, tags: [.validation, .bridging], setUpFunction: setup_dateComponents)
20+
BenchmarkInfo(name: "ObjectiveCBridgeFromNSString",
21+
runFunction: run_ObjectiveCBridgeFromNSString, tags: t,
22+
legacyFactor: 5),
23+
BenchmarkInfo(name: "ObjectiveCBridgeFromNSStringForced",
24+
runFunction: run_ObjectiveCBridgeFromNSStringForced, tags: t,
25+
legacyFactor: 5),
26+
BenchmarkInfo(name: "ObjectiveCBridgeToNSString",
27+
runFunction: run_ObjectiveCBridgeToNSString, tags: t),
28+
BenchmarkInfo(name: "ObjectiveCBridgeFromNSArrayAnyObject",
29+
runFunction: run_ObjectiveCBridgeFromNSArrayAnyObject, tags: t,
30+
legacyFactor: 100),
31+
BenchmarkInfo(name: "ObjectiveCBridgeFromNSArrayAnyObjectForced",
32+
runFunction: run_ObjectiveCBridgeFromNSArrayAnyObjectForced, tags: t,
33+
legacyFactor: 20),
34+
BenchmarkInfo(name: "ObjectiveCBridgeToNSArray",
35+
runFunction: run_ObjectiveCBridgeToNSArray, tags: t,
36+
legacyFactor: 50),
37+
BenchmarkInfo(name: "ObjectiveCBridgeFromNSArrayAnyObjectToString",
38+
runFunction: run_ObjectiveCBridgeFromNSArrayAnyObjectToString, tags: ts,
39+
legacyFactor: 100),
40+
BenchmarkInfo(name: "ObjectiveCBridgeFromNSArrayAnyObjectToStringForced",
41+
runFunction: run_ObjectiveCBridgeFromNSArrayAnyObjectToStringForced,
42+
tags: ts, legacyFactor: 200),
43+
BenchmarkInfo(name: "ObjectiveCBridgeFromNSDictionaryAnyObject",
44+
runFunction: run_ObjectiveCBridgeFromNSDictionaryAnyObject, tags: t,
45+
legacyFactor: 100),
46+
BenchmarkInfo(name: "ObjectiveCBridgeFromNSDictionaryAnyObjectForced",
47+
runFunction: run_ObjectiveCBridgeFromNSDictionaryAnyObjectForced, tags: t,
48+
legacyFactor: 50),
49+
BenchmarkInfo(name: "ObjectiveCBridgeToNSDictionary",
50+
runFunction: run_ObjectiveCBridgeToNSDictionary, tags: t,
51+
legacyFactor: 50),
52+
BenchmarkInfo(name: "ObjectiveCBridgeFromNSDictionaryAnyObjectToString",
53+
runFunction: run_ObjectiveCBridgeFromNSDictionaryAnyObjectToString,
54+
tags: ts, legacyFactor: 500),
55+
BenchmarkInfo(name: "ObjectiveCBridgeFromNSDictionaryAnyObjectToStringForced",
56+
runFunction: run_ObjectiveCBridgeFromNSDictionaryAnyObjectToStringForced,
57+
tags: ts, legacyFactor: 500),
58+
BenchmarkInfo(name: "ObjectiveCBridgeFromNSSetAnyObject",
59+
runFunction: run_ObjectiveCBridgeFromNSSetAnyObject, tags: t,
60+
legacyFactor: 200),
61+
BenchmarkInfo(name: "ObjectiveCBridgeFromNSSetAnyObjectForced",
62+
runFunction: run_ObjectiveCBridgeFromNSSetAnyObjectForced, tags: t,
63+
legacyFactor: 20),
64+
BenchmarkInfo(name: "ObjectiveCBridgeToNSSet",
65+
runFunction: run_ObjectiveCBridgeToNSSet, tags: t,
66+
legacyFactor: 50),
67+
BenchmarkInfo(name: "ObjectiveCBridgeFromNSSetAnyObjectToString",
68+
runFunction: run_ObjectiveCBridgeFromNSSetAnyObjectToString, tags: ts,
69+
legacyFactor: 500),
70+
BenchmarkInfo(name: "ObjectiveCBridgeFromNSSetAnyObjectToStringForced",
71+
runFunction: run_ObjectiveCBridgeFromNSSetAnyObjectToStringForced, tags: ts,
72+
legacyFactor: 500),
73+
BenchmarkInfo(name: "ObjectiveCBridgeFromNSDateComponents",
74+
runFunction: run_ObjectiveCBridgeFromNSDateComponents, tags: t,
75+
setUpFunction: setup_dateComponents),
3676
]
3777

3878
#if _runtime(_ObjC)
@@ -60,7 +100,7 @@ func testObjectiveCBridgeFromNSString() {
60100
let nsString = createNSString()
61101

62102
var s: String?
63-
for _ in 0 ..< 10_000 {
103+
for _ in 0 ..< 2_000 {
64104
// Call _conditionallyBridgeFromObjectiveC.
65105
let n : String? = conditionalCast(nsString)
66106
if n != nil {
@@ -88,7 +128,7 @@ func testObjectiveCBridgeFromNSStringForced() {
88128
let nsString = createNSString()
89129

90130
var s: String?
91-
for _ in 0 ..< 10_000 {
131+
for _ in 0 ..< 2_000 {
92132
// Call _forceBridgeFromObjectiveC
93133
s = forcedCast(nsString)
94134
}
@@ -157,7 +197,7 @@ func testObjectiveCBridgeFromNSArrayAnyObject() {
157197
let nsArray = createNSArray()
158198

159199
var nativeString : String?
160-
for _ in 0 ..< 10_000 {
200+
for _ in 0 ..< 100 {
161201
if let nativeArray : [NSString] = conditionalCast(nsArray) {
162202
nativeString = forcedCast(nativeArray[0])
163203
}
@@ -183,7 +223,7 @@ func testObjectiveCBridgeFromNSArrayAnyObjectForced() {
183223
let nsArray = createNSArray()
184224

185225
var nativeString : String?
186-
for _ in 0 ..< 10_000 {
226+
for _ in 0 ..< 500 {
187227
let nativeArray : [NSString] = forcedCast(nsArray)
188228
nativeString = forcedCast(nativeArray[0])
189229
}
@@ -209,7 +249,7 @@ func testObjectiveCBridgeToNSArray() {
209249
"abcde", "abcde", "abcde", "abcde", "abcde"]
210250

211251
var nsString : Any?
212-
for _ in 0 ..< 10_000 {
252+
for _ in 0 ..< 200 {
213253
let nsArray = nativeArray as NSArray
214254
nsString = nsArray.object(at: 0)
215255
}
@@ -234,7 +274,7 @@ func testObjectiveCBridgeFromNSArrayAnyObjectToString() {
234274
let nsArray = createNSArray()
235275

236276
var nativeString : String?
237-
for _ in 0 ..< 10_000 {
277+
for _ in 0 ..< 100 {
238278
if let nativeArray : [String] = conditionalCast(nsArray) {
239279
nativeString = nativeArray[0]
240280
}
@@ -260,7 +300,7 @@ func testObjectiveCBridgeFromNSArrayAnyObjectToStringForced() {
260300
let nsArray = createNSArray()
261301

262302
var nativeString : String?
263-
for _ in 0 ..< 10_000 {
303+
for _ in 0 ..< 50 {
264304
let nativeArray : [String] = forcedCast(nsArray)
265305
nativeString = nativeArray[0]
266306
}
@@ -314,7 +354,7 @@ func testObjectiveCBridgeFromNSDictionaryAnyObject() {
314354
let nsString = NSString(cString: "NSString that does not fit in tagged pointer", encoding: String.Encoding.utf8.rawValue)!
315355

316356
var nativeInt : Int?
317-
for _ in 0 ..< 10_000 {
357+
for _ in 0 ..< 100 {
318358
if let nativeDictionary : [NSString : NSNumber] = conditionalCast(nsDictionary) {
319359
nativeInt = forcedCast(nativeDictionary[nsString])
320360
}
@@ -341,7 +381,7 @@ func testObjectiveCBridgeFromNSDictionaryAnyObjectForced() {
341381
let nsString = NSString(cString: "NSString that does not fit in tagged pointer", encoding: String.Encoding.utf8.rawValue)!
342382

343383
var nativeInt : Int?
344-
for _ in 0 ..< 10_000 {
384+
for _ in 0 ..< 200 {
345385
if let nativeDictionary : [NSString : NSNumber] = forcedCast(nsDictionary) {
346386
nativeInt = forcedCast(nativeDictionary[nsString])
347387
}
@@ -370,7 +410,7 @@ func testObjectiveCBridgeToNSDictionary() {
370410
let key = "abcde1" as NSString
371411

372412
var nsNumber : Any?
373-
for _ in 0 ..< 10_000 {
413+
for _ in 0 ..< 200 {
374414
let nsDict = nativeDictionary as NSDictionary
375415
nsNumber = nsDict.object(forKey: key)
376416
}
@@ -397,7 +437,7 @@ func testObjectiveCBridgeFromNSDictionaryAnyObjectToString() {
397437
let nativeString = nsString as String
398438

399439
var nativeInt : Int?
400-
for _ in 0 ..< 10_000 {
440+
for _ in 0 ..< 20 {
401441
if let nativeDictionary : [String : Int] = conditionalCast(nsDictionary) {
402442
nativeInt = nativeDictionary[nativeString]
403443
}
@@ -425,7 +465,7 @@ func testObjectiveCBridgeFromNSDictionaryAnyObjectToStringForced() {
425465
let nativeString = nsString as String
426466

427467
var nativeInt : Int?
428-
for _ in 0 ..< 10_000 {
468+
for _ in 0 ..< 20 {
429469
if let nativeDictionary : [String : Int] = forcedCast(nsDictionary) {
430470
nativeInt = nativeDictionary[nativeString]
431471
}
@@ -481,7 +521,7 @@ func testObjectiveCBridgeFromNSSetAnyObject() {
481521
let nsString = NSString(cString: "NSString that does not fit in tagged pointer", encoding: String.Encoding.utf8.rawValue)!
482522

483523
var result : Bool?
484-
for _ in 0 ..< 10_000 {
524+
for _ in 0 ..< 50 {
485525
if let nativeSet : Set<NSString> = conditionalCast(nsSet) {
486526
result = nativeSet.contains(nsString)
487527
}
@@ -508,7 +548,7 @@ func testObjectiveCBridgeFromNSSetAnyObjectForced() {
508548
let nsString = NSString(cString: "NSString that does not fit in tagged pointer", encoding: String.Encoding.utf8.rawValue)!
509549

510550
var result : Bool?
511-
for _ in 0 ..< 10_000 {
551+
for _ in 0 ..< 500 {
512552
if let nativeSet : Set<NSString> = forcedCast(nsSet) {
513553
result = nativeSet.contains(nsString)
514554
}
@@ -536,7 +576,7 @@ func testObjectiveCBridgeToNSSet() {
536576
let key = "abcde1" as NSString
537577

538578
var nsString : Any?
539-
for _ in 0 ..< 10_000 {
579+
for _ in 0 ..< 200 {
540580
let nsDict = nativeSet as NSSet
541581
nsString = nsDict.member(key)
542582
}
@@ -563,7 +603,7 @@ func testObjectiveCBridgeFromNSSetAnyObjectToString() {
563603
let nsSet = createNSSet()
564604

565605
var result : Bool?
566-
for _ in 0 ..< 10_000 {
606+
for _ in 0 ..< 20 {
567607
if let nativeSet : Set<String> = conditionalCast(nsSet) {
568608
result = nativeSet.contains(nativeString)
569609
}
@@ -591,7 +631,7 @@ func testObjectiveCBridgeFromNSSetAnyObjectToStringForced() {
591631
let nativeString = nsString as String
592632

593633
var result : Bool?
594-
for _ in 0 ..< 10_000 {
634+
for _ in 0 ..< 20 {
595635
if let nativeSet : Set<String> = forcedCast(nsSet) {
596636
result = nativeSet.contains(nativeString)
597637
}
@@ -616,15 +656,15 @@ public func run_ObjectiveCBridgeFromNSSetAnyObjectToStringForced(_ N: Int) {
616656
//translated directly from an objc part of the original testcase
617657
@objc class DictionaryContainer : NSObject {
618658
@objc var _dictionary:NSDictionary
619-
659+
620660
//simulate an objc property being imported via bridging
621661
@objc var dictionary:Dictionary<DateComponents, String> {
622662
@inline(never)
623663
get {
624664
return _dictionary as! Dictionary<DateComponents, String>
625665
}
626666
}
627-
667+
628668
override init() {
629669
_dictionary = NSDictionary()
630670
super.init()
@@ -653,7 +693,7 @@ public func setup_dateComponents() {
653693
guard let date = calendar.date(byAdding: .day, value: -day, to: now) else {
654694
return nil
655695
}
656-
696+
657697
return calendar.dateComponents([.year, .month, .day], from: date)
658698
}
659699
#endif

0 commit comments

Comments
 (0)