mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Native implementation of -lengthOfBytesUsingEncoding, plus handling ASCII-subset MacRoman in a few places (#81791)
Fixes rdar://154341146
This commit is contained in:
@@ -100,6 +100,24 @@ public let benchmarks = [
|
||||
BenchmarkInfo(name: "NSDictionary.bridged.enumerate",
|
||||
runFunction: run_BridgedNSDictionaryEnumerate, tags: t,
|
||||
setUpFunction: setup_bridgedDictionaries),
|
||||
BenchmarkInfo(name: "NSString.bridged.byteCount.ascii.ascii",
|
||||
runFunction: run_BridgedNSStringLengthASCII_ASCII, tags: ts,
|
||||
setUpFunction: setup_bridgedStrings),
|
||||
BenchmarkInfo(name: "NSString.bridged.byteCount.ascii.utf8",
|
||||
runFunction: run_BridgedNSStringLengthASCII_UTF8, tags: ts,
|
||||
setUpFunction: setup_bridgedStrings),
|
||||
BenchmarkInfo(name: "NSString.bridged.byteCount.ascii.utf16",
|
||||
runFunction: run_BridgedNSStringLengthASCII_UTF16, tags: ts,
|
||||
setUpFunction: setup_bridgedStrings),
|
||||
BenchmarkInfo(name: "NSString.bridged.byteCount.ascii.macroman",
|
||||
runFunction: run_BridgedNSStringLengthASCII_MacRoman, tags: ts,
|
||||
setUpFunction: setup_bridgedStrings),
|
||||
BenchmarkInfo(name: "NSString.bridged.byteCount.utf8.utf8",
|
||||
runFunction: run_BridgedNSStringLengthUTF8_UTF8, tags: ts,
|
||||
setUpFunction: setup_bridgedStrings),
|
||||
BenchmarkInfo(name: "NSString.bridged.byteCount.utf8.utf16",
|
||||
runFunction: run_BridgedNSStringLengthUTF8_UTF16, tags: ts,
|
||||
setUpFunction: setup_bridgedStrings),
|
||||
]
|
||||
|
||||
#if _runtime(_ObjC)
|
||||
@@ -801,6 +819,8 @@ var bridgedDictionaryOfNumbersToNumbers:NSDictionary! = nil
|
||||
var bridgedArrayMutableCopy:NSMutableArray! = nil
|
||||
var nsArray:NSArray! = nil
|
||||
var nsArrayMutableCopy:NSMutableArray! = nil
|
||||
var bridgedASCIIString:NSString! = nil
|
||||
var bridgedUTF8String:NSString! = nil
|
||||
#endif
|
||||
|
||||
public func setup_bridgedArrays() {
|
||||
@@ -822,6 +842,14 @@ public func setup_bridgedDictionaries() {
|
||||
bridgedDictionaryOfNumbersToNumbers = numDict as NSDictionary
|
||||
}
|
||||
|
||||
public func setup_bridgedStrings() {
|
||||
#if _runtime(_ObjC)
|
||||
let str = Array(repeating: "The quick brown fox jumps over the lazy dog.", count: 100).joined()
|
||||
bridgedASCIIString = str as NSString
|
||||
let str2 = Array(repeating: "The quick brown fox jumps over the lazy dög.", count: 100).joined()
|
||||
bridgedUTF8String = str2 as NSString
|
||||
#endif
|
||||
}
|
||||
|
||||
@inline(never)
|
||||
public func run_BridgedNSArrayObjectAtIndex(_ n: Int) {
|
||||
@@ -914,3 +942,40 @@ public func run_RealNSArrayMutableCopyObjectAtIndex(_ n: Int) {
|
||||
#endif
|
||||
}
|
||||
|
||||
@inline(__always)
|
||||
fileprivate func run_BridgedNSStringLength(_ asciiBase: Bool, _ enc: UInt, _ n: Int) {
|
||||
let str = asciiBase ? bridgedASCIIString : bridgedUTF8String
|
||||
for _ in 0 ..< n * 100 {
|
||||
blackHole(str!.lengthOfBytes(using: enc))
|
||||
}
|
||||
}
|
||||
|
||||
@inline(never)
|
||||
public func run_BridgedNSStringLengthASCII_ASCII(_ n: Int) {
|
||||
run_BridgedNSStringLength(true, 1 /* NSASCIIStringEncoding */, n)
|
||||
}
|
||||
|
||||
@inline(never)
|
||||
public func run_BridgedNSStringLengthASCII_UTF8(_ n: Int) {
|
||||
run_BridgedNSStringLength(true, 4 /* NSUTF8StringEncoding */, n)
|
||||
}
|
||||
|
||||
@inline(never)
|
||||
public func run_BridgedNSStringLengthASCII_UTF16(_ n: Int) {
|
||||
run_BridgedNSStringLength(true, 10 /* NSUnicodeStringEncoding */, n)
|
||||
}
|
||||
|
||||
@inline(never)
|
||||
public func run_BridgedNSStringLengthASCII_MacRoman(_ n: Int) {
|
||||
run_BridgedNSStringLength(true, 30 /* NSMacOSRomanStringEncoding */, n)
|
||||
}
|
||||
|
||||
@inline(never)
|
||||
public func run_BridgedNSStringLengthUTF8_UTF8(_ n: Int) {
|
||||
run_BridgedNSStringLength(false, 4 /* NSUTF8StringEncoding */, n)
|
||||
}
|
||||
|
||||
@inline(never)
|
||||
public func run_BridgedNSStringLengthUTF8_UTF16(_ n: Int) {
|
||||
run_BridgedNSStringLength(false, 10 /* NSUnicodeStringEncoding */, n)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user