Skip to content

Commit 2f572bf

Browse files
committed
add String(decoding:as:) benchmarks for Unsafe(Mutable)(Raw)BufferPointers
1 parent fc50e81 commit 2f572bf

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed

benchmark/single-source/UTF8Decode.swift

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,38 @@ public let UTF8Decode = [
2626
name: "UTF8Decode_InitDecoding",
2727
runFunction: run_UTF8Decode_InitDecoding,
2828
tags: [.validation, .api, .String]),
29+
BenchmarkInfo(
30+
name: "String.init.decodingUTF8.UMRBP",
31+
runFunction: run_UTF8Decode_InitDecodingUMRBP,
32+
tags: [.validation, .api, .String]),
33+
BenchmarkInfo(
34+
name: "String.init.decodingUTF8.UMRBPSlice",
35+
runFunction: run_UTF8Decode_InitDecodingUMRBPSlice,
36+
tags: [.validation, .api, .String]),
37+
BenchmarkInfo(
38+
name: "String.init.decodingUTF8.URBP",
39+
runFunction: run_UTF8Decode_InitDecodingURBP,
40+
tags: [.validation, .api, .String]),
41+
BenchmarkInfo(
42+
name: "String.init.decodingUTF8.URBPSlice",
43+
runFunction: run_UTF8Decode_InitDecodingURBPSlice,
44+
tags: [.validation, .api, .String]),
45+
BenchmarkInfo(
46+
name: "String.init.decodingUTF8.UMBP",
47+
runFunction: run_UTF8Decode_InitDecodingUMBP,
48+
tags: [.validation, .api, .String]),
49+
BenchmarkInfo(
50+
name: "String.init.decodingUTF8.UMBPSlice",
51+
runFunction: run_UTF8Decode_InitDecodingUMBPSlice,
52+
tags: [.validation, .api, .String]),
53+
BenchmarkInfo(
54+
name: "String.init.decodingUTF8.UBP",
55+
runFunction: run_UTF8Decode_InitDecodingUBP,
56+
tags: [.validation, .api, .String]),
57+
BenchmarkInfo(
58+
name: "String.init.decodingUTF8.UBPSlice",
59+
runFunction: run_UTF8Decode_InitDecodingUBPSlice,
60+
tags: [.validation, .api, .String]),
2961
BenchmarkInfo(
3062
name: "UTF8Decode_InitFromBytes",
3163
runFunction: run_UTF8Decode_InitFromBytes,
@@ -62,6 +94,20 @@ let allStrings = [ascii, russian, japanese, emoji].map { Array($0.utf8) }
6294
let allStringsBytes: [UInt8] = Array(allStrings.joined())
6395
let allStringsData: Data = Data(allStringsBytes)
6496

97+
func withAllStringsUMRBP(_ body: (UnsafeMutableRawBufferPointer) -> Void) -> Void {
98+
var all = allStringsBytes
99+
all.withUnsafeMutableBytes(body)
100+
}
101+
func withAllStringsURBP(_ body: (UnsafeRawBufferPointer) -> Void) -> Void {
102+
allStringsBytes.withUnsafeBytes(body)
103+
}
104+
func withAllStringsUMBP(_ body: (inout UnsafeMutableBufferPointer<UInt8>) -> Void) -> Void {
105+
var all = allStringsBytes
106+
all.withUnsafeMutableBufferPointer(body)
107+
}
108+
func withAllStringsUBP(_ body: (UnsafeBufferPointer<UInt8>) -> Void) -> Void {
109+
allStringsBytes.withUnsafeBufferPointer(body)
110+
}
65111

66112
@inline(never)
67113
public func run_UTF8Decode(_ N: Int) {
@@ -107,6 +153,72 @@ public func run_UTF8Decode_InitFromBytes(_ N: Int) {
107153
}
108154
}
109155

156+
@inline(never)
157+
public func run_UTF8Decode_InitDecodingUMRBP(_ N: Int) {
158+
withAllStringsUMRBP { (input: UnsafeMutableRawBufferPointer) in
159+
for _ in 0..<500*N {
160+
blackHole(String(decoding: input, as: UTF8.self))
161+
}
162+
}
163+
}
164+
@inline(never)
165+
public func run_UTF8Decode_InitDecodingUMRBPSlice(_ N: Int) {
166+
withAllStringsUMRBP { (input: UnsafeMutableRawBufferPointer) in
167+
for _ in 0..<N {
168+
blackHole(String(decoding: input[...], as: UTF8.self))
169+
}
170+
}
171+
}
172+
@inline(never)
173+
public func run_UTF8Decode_InitDecodingURBP(_ N: Int) {
174+
withAllStringsURBP { (input: UnsafeRawBufferPointer) in
175+
for _ in 0..<500*N {
176+
blackHole(String(decoding: input, as: UTF8.self))
177+
}
178+
}
179+
}
180+
@inline(never)
181+
public func run_UTF8Decode_InitDecodingURBPSlice(_ N: Int) {
182+
withAllStringsURBP { (input: UnsafeRawBufferPointer) in
183+
for _ in 0..<N {
184+
blackHole(String(decoding: input[...], as: UTF8.self))
185+
}
186+
}
187+
}
188+
189+
@inline(never)
190+
public func run_UTF8Decode_InitDecodingUMBP(_ N: Int) {
191+
withAllStringsUMBP { (input: inout UnsafeMutableBufferPointer<UInt8>) in
192+
for _ in 0..<500*N {
193+
blackHole(String(decoding: input, as: UTF8.self))
194+
}
195+
}
196+
}
197+
@inline(never)
198+
public func run_UTF8Decode_InitDecodingUMBPSlice(_ N: Int) {
199+
withAllStringsUMBP { (input: inout UnsafeMutableBufferPointer<UInt8>) in
200+
for _ in 0..<N {
201+
blackHole(String(decoding: input[...], as: UTF8.self))
202+
}
203+
}
204+
}
205+
@inline(never)
206+
public func run_UTF8Decode_InitDecodingUBP(_ N: Int) {
207+
withAllStringsUBP { (input: UnsafeBufferPointer<UInt8>) in
208+
for _ in 0..<500*N {
209+
blackHole(String(decoding: input, as: UTF8.self))
210+
}
211+
}
212+
}
213+
@inline(never)
214+
public func run_UTF8Decode_InitDecodingUBPSlice(_ N: Int) {
215+
withAllStringsUBP { (input: UnsafeBufferPointer<UInt8>) in
216+
for _ in 0..<N {
217+
blackHole(String(decoding: input[...], as: UTF8.self))
218+
}
219+
}
220+
}
221+
110222
@inline(never)
111223
public func run_UTF8Decode_InitFromData_ascii(_ N: Int) {
112224
let input = asciiData

0 commit comments

Comments
 (0)