Skip to content

Commit f47dce8

Browse files
authored
Merge branch 'master' into feature/python-obj-api-decode-strings
2 parents e6f3a6d + 609c72c commit f47dce8

30 files changed

+1470
-463
lines changed

benchmarks/swift/Benchmarks/FlatbuffersBenchmarks/FlatbuffersBenchmarks.swift

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
*/
1616

1717
import Benchmark
18-
import CoreFoundation
1918
import FlatBuffers
19+
import Foundation
2020

2121
@usableFromInline
2222
struct AA: NativeStruct {
@@ -29,6 +29,15 @@ struct AA: NativeStruct {
2929
}
3030

3131
let benchmarks = {
32+
let oneGB: Int32 = 1_024_000_000
33+
let data = {
34+
var array = [8888.88, 8888.88]
35+
var data = Data()
36+
array.withUnsafeBytes { ptr in
37+
data.append(contentsOf: ptr)
38+
}
39+
return data
40+
}()
3241
let ints: [Int] = Array(repeating: 42, count: 100)
3342
let bytes: [UInt8] = Array(repeating: 42, count: 100)
3443
let str10 = (0...9).map { _ -> String in "x" }.joined()
@@ -73,12 +82,25 @@ let benchmarks = {
7382

7483
Benchmark("Allocating 1GB", configuration: singleConfiguration) { benchmark in
7584
for _ in benchmark.scaledIterations {
76-
blackHole(FlatBufferBuilder(initialSize: 1_024_000_000))
85+
blackHole(FlatBufferBuilder(initialSize: oneGB))
86+
}
87+
}
88+
89+
Benchmark(
90+
"Allocating ByteBuffer 1GB",
91+
configuration: singleConfiguration)
92+
{ benchmark in
93+
let memory = UnsafeMutableRawPointer.allocate(
94+
byteCount: 1_024_000_000,
95+
alignment: 1)
96+
benchmark.startMeasurement()
97+
for _ in benchmark.scaledIterations {
98+
blackHole(ByteBuffer(assumingMemoryBound: memory, capacity: Int(oneGB)))
7799
}
78100
}
79101

80102
Benchmark("Clearing 1GB", configuration: singleConfiguration) { benchmark in
81-
var fb = FlatBufferBuilder(initialSize: 1_024_000_000)
103+
var fb = FlatBufferBuilder(initialSize: oneGB)
82104
benchmark.startMeasurement()
83105
for _ in benchmark.scaledIterations {
84106
blackHole(fb.clear())
@@ -158,6 +180,26 @@ let benchmarks = {
158180
}
159181
}
160182

183+
Benchmark(
184+
"FlatBufferBuilder Start table",
185+
configuration: kiloConfiguration)
186+
{ benchmark in
187+
var fb = FlatBufferBuilder(initialSize: 1024 * 1024 * 32)
188+
benchmark.startMeasurement()
189+
for _ in benchmark.scaledIterations {
190+
let s = fb.startTable(with: 4)
191+
blackHole(fb.endTable(at: s))
192+
}
193+
}
194+
195+
Benchmark("Struct") { benchmark in
196+
var fb = FlatBufferBuilder(initialSize: 1024 * 1024 * 32)
197+
benchmark.startMeasurement()
198+
for _ in benchmark.scaledIterations {
199+
blackHole(fb.create(struct: array.first!))
200+
}
201+
}
202+
161203
Benchmark("Structs") { benchmark in
162204
let rawSize = ((16 * 5) * benchmark.scaledIterations.count) / 1024
163205
var fb = FlatBufferBuilder(initialSize: Int32(rawSize * 1600))
@@ -176,7 +218,7 @@ let benchmarks = {
176218
let start = fb.startTable(with: 1)
177219
fb.add(offset: vector, at: 4)
178220
let root = Offset(offset: fb.endTable(at: start))
179-
fb.finish(offset: root)
221+
blackHole(fb.finish(offset: root))
180222
}
181223

182224
Benchmark("Vector of Offsets") { benchmark in
@@ -198,4 +240,11 @@ let benchmarks = {
198240
blackHole(fb.endTable(at: s))
199241
}
200242
}
243+
244+
Benchmark("Reading Doubles") { benchmark in
245+
let byteBuffer = ByteBuffer(data: data)
246+
for _ in benchmark.scaledIterations {
247+
blackHole(byteBuffer.read(def: Double.self, position: 0))
248+
}
249+
}
201250
}

docs/source/languages/swift.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ a data object from the server, which you can pass into the `GetRootAsMonster` fu
5757
let url = URL(fileURLWithPath: path, isDirectory: true).appendingPathComponent("monsterdata_test").appendingPathExtension("mon")
5858
guard let data = try? Data(contentsOf: url) else { return }
5959
60-
let monster = Monster.getRootAsMonster(bb: ByteBuffer(data: data))
60+
let monster: Monster = try! getCheckedRoot(byteBuffer: &byteBuffer)
6161
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6262

6363
Now you can access values like this:

docs/source/tutorial.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2011,6 +2011,8 @@ like so:
20112011
let buf = builder.sizedByteArray
20122012
// or you can use to get an object of type Data
20132013
let bufData = ByteBuffer(data: builder.data)
2014+
// or
2015+
let buf = builder.sizedBuffer
20142016
```
20152017

20162018
=== "TypeScript"

grpc/examples/swift/Greeter/Sources/Model/greeter.grpc.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ public extension GRPCFlatBufPayload {
1717
self.init(byteBuffer: FlatBuffers.ByteBuffer(contiguousBytes: serializedByteBuffer.readableBytesView, count: serializedByteBuffer.readableBytes))
1818
}
1919
func serialize(into buffer: inout NIO.ByteBuffer) throws {
20-
let buf = UnsafeRawBufferPointer(start: self.rawPointer, count: Int(self.size))
21-
buffer.writeBytes(buf)
20+
withUnsafeReadableBytes { buffer.writeBytes($0) }
2221
}
2322
}
2423
extension Message: GRPCFlatBufPayload {}

grpc/src/compiler/swift_generator.cc

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -428,10 +428,7 @@ grpc::string GenerateHeader() {
428428
code += " }\n";
429429

430430
code += " func serialize(into buffer: inout NIO.ByteBuffer) throws {\n";
431-
code +=
432-
" let buf = UnsafeRawBufferPointer(start: self.rawPointer, count: "
433-
"Int(self.size))\n";
434-
code += " buffer.writeBytes(buf)\n";
431+
code += " withUnsafeReadableBytes { buffer.writeBytes($0) }\n";
435432
code += " }\n";
436433
code += "}\n";
437434
code += "extension Message: GRPCFlatBufPayload {}\n";

0 commit comments

Comments
 (0)