@@ -100,6 +100,24 @@ public let benchmarks = [
100100 BenchmarkInfo ( name: " NSDictionary.bridged.enumerate " ,
101101 runFunction: run_BridgedNSDictionaryEnumerate, tags: t,
102102 setUpFunction: setup_bridgedDictionaries) ,
103+ BenchmarkInfo ( name: " NSString.bridged.byteCount.ascii.ascii " ,
104+ runFunction: run_BridgedNSStringLengthASCII_ASCII, tags: ts,
105+ setUpFunction: setup_bridgedStrings) ,
106+ BenchmarkInfo ( name: " NSString.bridged.byteCount.ascii.utf8 " ,
107+ runFunction: run_BridgedNSStringLengthASCII_UTF8, tags: ts,
108+ setUpFunction: setup_bridgedStrings) ,
109+ BenchmarkInfo ( name: " NSString.bridged.byteCount.ascii.utf16 " ,
110+ runFunction: run_BridgedNSStringLengthASCII_UTF16, tags: ts,
111+ setUpFunction: setup_bridgedStrings) ,
112+ BenchmarkInfo ( name: " NSString.bridged.byteCount.ascii.macroman " ,
113+ runFunction: run_BridgedNSStringLengthASCII_MacRoman, tags: ts,
114+ setUpFunction: setup_bridgedStrings) ,
115+ BenchmarkInfo ( name: " NSString.bridged.byteCount.utf8.utf8 " ,
116+ runFunction: run_BridgedNSStringLengthUTF8_UTF8, tags: ts,
117+ setUpFunction: setup_bridgedStrings) ,
118+ BenchmarkInfo ( name: " NSString.bridged.byteCount.utf8.utf16 " ,
119+ runFunction: run_BridgedNSStringLengthUTF8_UTF16, tags: ts,
120+ setUpFunction: setup_bridgedStrings) ,
103121]
104122
105123#if _runtime(_ObjC)
@@ -801,6 +819,8 @@ var bridgedDictionaryOfNumbersToNumbers:NSDictionary! = nil
801819var bridgedArrayMutableCopy : NSMutableArray ! = nil
802820var nsArray : NSArray ! = nil
803821var nsArrayMutableCopy : NSMutableArray ! = nil
822+ var bridgedASCIIString : NSString ! = nil
823+ var bridgedUTF8String : NSString ! = nil
804824#endif
805825
806826public func setup_bridgedArrays( ) {
@@ -822,6 +842,14 @@ public func setup_bridgedDictionaries() {
822842 bridgedDictionaryOfNumbersToNumbers = numDict as NSDictionary
823843}
824844
845+ public func setup_bridgedStrings( ) {
846+ #if _runtime(_ObjC)
847+ let str = Array ( repeating: " The quick brown fox jumps over the lazy dog. " , count: 100 ) . joined ( )
848+ bridgedASCIIString = str as NSString
849+ let str2 = Array ( repeating: " The quick brown fox jumps over the lazy dög. " , count: 100 ) . joined ( )
850+ bridgedUTF8String = str2 as NSString
851+ #endif
852+ }
825853
826854@inline ( never)
827855public func run_BridgedNSArrayObjectAtIndex( _ n: Int ) {
@@ -914,3 +942,40 @@ public func run_RealNSArrayMutableCopyObjectAtIndex(_ n: Int) {
914942 #endif
915943}
916944
945+ @inline ( __always)
946+ fileprivate func run_BridgedNSStringLength( _ asciiBase: Bool , _ enc: UInt , _ n: Int ) {
947+ let str = asciiBase ? bridgedASCIIString : bridgedUTF8String
948+ for _ in 0 ..< n * 100 {
949+ blackHole ( str!. lengthOfBytes ( using: enc) )
950+ }
951+ }
952+
953+ @inline ( never)
954+ public func run_BridgedNSStringLengthASCII_ASCII( _ n: Int ) {
955+ run_BridgedNSStringLength ( true , 1 /* NSASCIIStringEncoding */, n)
956+ }
957+
958+ @inline ( never)
959+ public func run_BridgedNSStringLengthASCII_UTF8( _ n: Int ) {
960+ run_BridgedNSStringLength ( true , 4 /* NSUTF8StringEncoding */, n)
961+ }
962+
963+ @inline ( never)
964+ public func run_BridgedNSStringLengthASCII_UTF16( _ n: Int ) {
965+ run_BridgedNSStringLength ( true , 10 /* NSUnicodeStringEncoding */, n)
966+ }
967+
968+ @inline ( never)
969+ public func run_BridgedNSStringLengthASCII_MacRoman( _ n: Int ) {
970+ run_BridgedNSStringLength ( true , 30 /* NSMacOSRomanStringEncoding */, n)
971+ }
972+
973+ @inline ( never)
974+ public func run_BridgedNSStringLengthUTF8_UTF8( _ n: Int ) {
975+ run_BridgedNSStringLength ( false , 4 /* NSUTF8StringEncoding */, n)
976+ }
977+
978+ @inline ( never)
979+ public func run_BridgedNSStringLengthUTF8_UTF16( _ n: Int ) {
980+ run_BridgedNSStringLength ( false , 10 /* NSUnicodeStringEncoding */, n)
981+ }
0 commit comments