@@ -97,6 +97,24 @@ public let benchmarks = [
9797 BenchmarkInfo ( name: " NSArray.bridged.repeatedBufferAccess " ,
9898 runFunction: run_BridgedNSArrayRepeatedBufferAccess, tags: t,
9999 setUpFunction: setup_bridgedArrays) ,
100+ BenchmarkInfo ( name: " NSString.bridged.byteCount.ascii.ascii " ,
101+ runFunction: run_BridgedNSStringLengthASCII_ASCII, tags: ts,
102+ setUpFunction: setup_bridgedStrings) ,
103+ BenchmarkInfo ( name: " NSString.bridged.byteCount.ascii.utf8 " ,
104+ runFunction: run_BridgedNSStringLengthASCII_UTF8, tags: ts,
105+ setUpFunction: setup_bridgedStrings) ,
106+ BenchmarkInfo ( name: " NSString.bridged.byteCount.ascii.utf16 " ,
107+ runFunction: run_BridgedNSStringLengthASCII_UTF16, tags: ts,
108+ setUpFunction: setup_bridgedStrings) ,
109+ BenchmarkInfo ( name: " NSString.bridged.byteCount.ascii.macroman " ,
110+ runFunction: run_BridgedNSStringLengthASCII_MacRoman, tags: ts,
111+ setUpFunction: setup_bridgedStrings) ,
112+ BenchmarkInfo ( name: " NSString.bridged.byteCount.utf8.utf8 " ,
113+ runFunction: run_BridgedNSStringLengthUTF8_UTF8, tags: ts,
114+ setUpFunction: setup_bridgedStrings) ,
115+ BenchmarkInfo ( name: " NSString.bridged.byteCount.utf8.utf16 " ,
116+ runFunction: run_BridgedNSStringLengthUTF8_UTF16, tags: ts,
117+ setUpFunction: setup_bridgedStrings) ,
100118]
101119
102120#if _runtime(_ObjC)
@@ -797,6 +815,8 @@ var bridgedArray:NSArray! = nil
797815var bridgedArrayMutableCopy : NSMutableArray ! = nil
798816var nsArray : NSArray ! = nil
799817var nsArrayMutableCopy : NSMutableArray ! = nil
818+ var bridgedASCIIString : NSString ! = nil
819+ var bridgedUTF8String : NSString ! = nil
800820#endif
801821
802822public func setup_bridgedArrays( ) {
@@ -809,6 +829,15 @@ public func setup_bridgedArrays() {
809829 #endif
810830}
811831
832+ public func setup_bridgedStrings( ) {
833+ #if _runtime(_ObjC)
834+ let str = Array ( repeating: " The quick brown fox jumps over the lazy dog. " , count: 100 ) . joined ( )
835+ bridgedASCIIString = str as NSString
836+ let str2 = Array ( repeating: " The quick brown fox jumps over the lazy dög. " , count: 100 ) . joined ( )
837+ bridgedUTF8String = str2 as NSString
838+ #endif
839+ }
840+
812841@inline ( never)
813842public func run_BridgedNSArrayObjectAtIndex( _ n: Int ) {
814843 #if _runtime(_ObjC)
@@ -883,3 +912,40 @@ public func run_RealNSArrayMutableCopyObjectAtIndex(_ n: Int) {
883912 #endif
884913}
885914
915+ @inline ( __always)
916+ fileprivate func run_BridgedNSStringLength( _ asciiBase: Bool , _ enc: UInt , _ n: Int ) {
917+ let str = asciiBase ? bridgedASCIIString : bridgedUTF8String
918+ for _ in 0 ..< n * 100 {
919+ blackHole ( str!. lengthOfBytes ( using: enc) )
920+ }
921+ }
922+
923+ @inline ( never)
924+ public func run_BridgedNSStringLengthASCII_ASCII( _ n: Int ) {
925+ run_BridgedNSStringLength ( true , 1 /* NSASCIIStringEncoding */, n)
926+ }
927+
928+ @inline ( never)
929+ public func run_BridgedNSStringLengthASCII_UTF8( _ n: Int ) {
930+ run_BridgedNSStringLength ( true , 4 /* NSUTF8StringEncoding */, n)
931+ }
932+
933+ @inline ( never)
934+ public func run_BridgedNSStringLengthASCII_UTF16( _ n: Int ) {
935+ run_BridgedNSStringLength ( true , 10 /* NSUnicodeStringEncoding */, n)
936+ }
937+
938+ @inline ( never)
939+ public func run_BridgedNSStringLengthASCII_MacRoman( _ n: Int ) {
940+ run_BridgedNSStringLength ( true , 30 /* NSMacOSRomanStringEncoding */, n)
941+ }
942+
943+ @inline ( never)
944+ public func run_BridgedNSStringLengthUTF8_UTF8( _ n: Int ) {
945+ run_BridgedNSStringLength ( false , 4 /* NSUTF8StringEncoding */, n)
946+ }
947+
948+ @inline ( never)
949+ public func run_BridgedNSStringLengthUTF8_UTF16( _ n: Int ) {
950+ run_BridgedNSStringLength ( false , 10 /* NSUnicodeStringEncoding */, n)
951+ }
0 commit comments