Skip to content

[benchmark] Janitor Duty, Legacy Factor: Return of the String #21413

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Dec 19, 2018
26 changes: 13 additions & 13 deletions benchmark/single-source/DataBenchmarks.swift
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,12 @@ public let DataBenchmarks = [
BenchmarkInfo(name: "DataAppendDataLargeToSmall", runFunction: run_AppendDataLargeToSmall, tags: [.validation, .api, .Data]),
BenchmarkInfo(name: "DataAppendDataLargeToMedium", runFunction: run_AppendDataLargeToMedium, tags: [.validation, .api, .Data]),
BenchmarkInfo(name: "DataAppendDataLargeToLarge", runFunction: run_AppendDataLargeToLarge, tags: [.validation, .api, .Data, .skip]),
BenchmarkInfo(name: "DataToStringEmpty", runFunction: run_DataToStringEmpty, tags: [.validation, .api, .Data]),
BenchmarkInfo(name: "DataToStringSmall", runFunction: run_DataToStringSmall, tags: [.validation, .api, .Data]),
BenchmarkInfo(name: "DataToStringMedium", runFunction: run_DataToStringMedium, tags: [.validation, .api, .Data]),
BenchmarkInfo(name: "StringToDataEmpty", runFunction: run_StringToDataEmpty, tags: [.validation, .api, .Data]),
BenchmarkInfo(name: "StringToDataSmall", runFunction: run_StringToDataSmall, tags: [.validation, .api, .Data]),
BenchmarkInfo(name: "StringToDataMedium", runFunction: run_StringToDataMedium, tags: [.validation, .api, .Data]),
BenchmarkInfo(name: "DataToStringEmpty", runFunction: run_DataToStringEmpty, tags: [.validation, .api, .Data], legacyFactor: 50),
BenchmarkInfo(name: "DataToStringSmall", runFunction: run_DataToStringSmall, tags: [.validation, .api, .Data], legacyFactor: 50),
BenchmarkInfo(name: "DataToStringMedium", runFunction: run_DataToStringMedium, tags: [.validation, .api, .Data], legacyFactor: 50),
BenchmarkInfo(name: "StringToDataEmpty", runFunction: run_StringToDataEmpty, tags: [.validation, .api, .Data], legacyFactor: 50),
BenchmarkInfo(name: "StringToDataSmall", runFunction: run_StringToDataSmall, tags: [.validation, .api, .Data], legacyFactor: 50),
BenchmarkInfo(name: "StringToDataMedium", runFunction: run_StringToDataMedium, tags: [.validation, .api, .Data], legacyFactor: 50),
]

enum SampleKind {
Expand Down Expand Up @@ -165,7 +165,7 @@ func sampleData(_ type: SampleKind) -> Data {
case .string: return sampleString()
case .immutableBacking: return sampleBridgedNSData()
}

}

func benchmark_AccessBytes(_ N: Int, _ data: Data) {
Expand Down Expand Up @@ -598,7 +598,7 @@ public func run_createMediumArray(_ N: Int) {
@inline(never)
public func run_DataToStringEmpty(_ N: Int) {
let d = Data()
for _ in 0..<10000 * N {
for _ in 0..<200 * N {
let s = String(decoding: d, as: UTF8.self)
blackHole(s)
}
Expand All @@ -607,7 +607,7 @@ public func run_DataToStringEmpty(_ N: Int) {
@inline(never)
public func run_DataToStringSmall(_ N: Int) {
let d = Data([0x0D, 0x0A])
for _ in 0..<10000 * N {
for _ in 0..<200 * N {
let s = String(decoding: d, as: UTF8.self)
blackHole(s)
}
Expand All @@ -616,7 +616,7 @@ public func run_DataToStringSmall(_ N: Int) {
@inline(never)
public func run_DataToStringMedium(_ N: Int) {
let d = Data([0x0D, 0x0A, 0x0D, 0x0A, 0x0D, 0x0A, 0x0D, 0x0A, 0x0D, 0x0A, 0x0D, 0x0A, 0x0D, 0x0A, 0x0D, 0x0A, 0x0D, 0x0A])
for _ in 0..<10000 * N {
for _ in 0..<200 * N {
let s = String(decoding: d, as: UTF8.self)
blackHole(s)
}
Expand All @@ -625,7 +625,7 @@ public func run_DataToStringMedium(_ N: Int) {
@inline(never)
public func run_StringToDataEmpty(_ N: Int) {
let s = ""
for _ in 0..<10000 * N {
for _ in 0..<200 * N {
let d = Data(s.utf8)
blackHole(d)
}
Expand All @@ -634,7 +634,7 @@ public func run_StringToDataEmpty(_ N: Int) {
@inline(never)
public func run_StringToDataSmall(_ N: Int) {
let s = "\r\n"
for _ in 0..<10000 * N {
for _ in 0..<200 * N {
let d = Data(s.utf8)
blackHole(d)
}
Expand All @@ -643,7 +643,7 @@ public func run_StringToDataSmall(_ N: Int) {
@inline(never)
public func run_StringToDataMedium(_ N: Int) {
let s = "\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n"
for _ in 0..<10000 * N {
for _ in 0..<200 * N {
let d = Data(s.utf8)
blackHole(d)
}
Expand Down
6 changes: 3 additions & 3 deletions benchmark/single-source/StrComplexWalk.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,18 @@ import TestsUtils
public let StrComplexWalk = BenchmarkInfo(
name: "StrComplexWalk",
runFunction: run_StrComplexWalk,
tags: [.validation, .api, .String])
tags: [.validation, .api, .String],
legacyFactor: 10)

@inline(never)
public func run_StrComplexWalk(_ N: Int) {
var s = "निरन्तरान्धकारिता-दिगन्तर-कन्दलदमन्द-सुधारस-बिन्दु-सान्द्रतर-घनाघन-वृन्द-सन्देहकर-स्यन्दमान-मकरन्द-बिन्दु-बन्धुरतर-माकन्द-तरु-कुल-तल्प-कल्प-मृदुल-सिकता-जाल-जटिल-मूल-तल-मरुवक-मिलदलघु-लघु-लय-कलित-रमणीय-पानीय-शालिका-बालिका-करार-विन्द-गलन्तिका-गलदेला-लवङ्ग-पाटल-घनसार-कस्तूरिकातिसौरभ-मेदुर-लघुतर-मधुर-शीतलतर-सलिलधारा-निराकरिष्णु-तदीय-विमल-विलोचन-मयूख-रेखापसारित-पिपासायास-पथिक-लोकान्"
let ref_result = 379
for _ in 1...2000*N {
for _ in 1...200*N {
var count = 0
for _ in s.unicodeScalars {
count += 1
}
CheckResults(count == ref_result)
}
}

5 changes: 3 additions & 2 deletions benchmark/single-source/StrToInt.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ import TestsUtils
public let StrToInt = BenchmarkInfo(
name: "StrToInt",
runFunction: run_StrToInt,
tags: [.validation, .api, .String])
tags: [.validation, .api, .String],
legacyFactor: 10)

@inline(never)
public func run_StrToInt(_ N: Int) {
Expand Down Expand Up @@ -45,7 +46,7 @@ public func run_StrToInt(_ N: Int) {
return r
}
var res = Int.max
for _ in 1...1000*N {
for _ in 1...100*N {
res = res & DoOneIter(input)
}
CheckResults(res == ref_result)
Expand Down
39 changes: 24 additions & 15 deletions benchmark/single-source/StringBuilder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,27 +28,33 @@ public let StringBuilder = [
BenchmarkInfo(
name: "StringUTF16Builder",
runFunction: run_StringUTF16Builder,
tags: [.validation, .api, .String]),
tags: [.validation, .api, .String],
legacyFactor: 10),
BenchmarkInfo(
name: "StringUTF16SubstringBuilder",
runFunction: run_StringUTF16SubstringBuilder,
tags: [.validation, .api, .String]),
tags: [.validation, .api, .String],
legacyFactor: 10),
BenchmarkInfo(
name: "StringBuilderLong",
runFunction: run_StringBuilderLong,
tags: [.validation, .api, .String]),
tags: [.validation, .api, .String],
legacyFactor: 10),
BenchmarkInfo(
name: "StringBuilderWithLongSubstring",
runFunction: run_StringBuilderWithLongSubstring,
tags: [.validation, .api, .String]),
tags: [.validation, .api, .String],
legacyFactor: 10),
BenchmarkInfo(
name: "StringWordBuilder",
runFunction: run_StringWordBuilder,
tags: [.validation, .api, .String]),
tags: [.validation, .api, .String],
legacyFactor: 10),
BenchmarkInfo(
name: "StringWordBuilderReservingCapacity",
runFunction: run_StringWordBuilderReservingCapacity,
tags: [.validation, .api, .String]),
tags: [.validation, .api, .String],
legacyFactor: 10),
]

@inline(never)
Expand Down Expand Up @@ -110,14 +116,14 @@ func buildStringFromSmallSubstrings(_ i: String) -> String {

@inline(never)
public func run_StringUTF16Builder(_ N: Int) {
for _ in 1...5000*N {
for _ in 1...500*N {
blackHole(buildStringUTF16("a"))
}
}

@inline(never)
public func run_StringUTF16SubstringBuilder(_ N: Int) {
for _ in 1...5000*N {
for _ in 1...500*N {
blackHole(buildStringFromSmallSubstrings("a"))
}
}
Expand Down Expand Up @@ -153,14 +159,14 @@ func buildStringWithLongSubstring(_ i: String) -> String {

@inline(never)
public func run_StringBuilderLong(_ N: Int) {
for _ in 1...5000*N {
for _ in 1...500*N {
blackHole(buildStringLong("👻"))
}
}

@inline(never)
public func run_StringBuilderWithLongSubstring(_ N: Int) {
for _ in 1...5000*N {
for _ in 1...500*N {
blackHole(buildStringWithLongSubstring("👻"))
}
}
Expand All @@ -184,13 +190,16 @@ func buildString(

@inline(never)
public func run_StringWordBuilder(_ N: Int) {
blackHole(buildString(
word: "bumfuzzle", count: 50_000 * N, reservingCapacity: false))
for _ in 1...N {
blackHole(buildString(
word: "bumfuzzle", count: 5_000, reservingCapacity: false))
}
}

@inline(never)
public func run_StringWordBuilderReservingCapacity(_ N: Int) {
blackHole(buildString(
word: "bumfuzzle", count: 50_000 * N, reservingCapacity: true))
for _ in 1...N {
blackHole(buildString(
word: "bumfuzzle", count: 5_000, reservingCapacity: true))
}
}

Loading