Skip to content

Commit b41cc30

Browse files
committed
Add a dedicated benchmark for protos with long repeated fields.
1 parent 2951812 commit b41cc30

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

benchmarks/bin/repeated_field.dart

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import 'dart:typed_data';
2+
3+
import 'package:fixnum/fixnum.dart';
4+
import 'package:protobuf_benchmarks/benchmark_base.dart';
5+
import 'package:protobuf_benchmarks/generated/f12.pb.dart' as f12;
6+
import 'package:protobuf_benchmarks/generated/google_message2.pb.dart';
7+
8+
class RepeatedBenchmark extends BenchmarkBase {
9+
final Uint8List _buffer;
10+
11+
RepeatedBenchmark(super.name, GoogleMessage2 message)
12+
: _buffer = message.writeToBuffer();
13+
14+
@override
15+
void run() => GoogleMessage2.fromBuffer(_buffer);
16+
}
17+
18+
class RepeatedEnumBenchmark extends BenchmarkBase {
19+
final Uint8List _buffer;
20+
21+
RepeatedEnumBenchmark(super.name, f12.A58 message)
22+
: _buffer = message.writeToBuffer();
23+
24+
@override
25+
void run() => f12.A58.fromBuffer(_buffer);
26+
}
27+
28+
void main() {
29+
const kSize = 500000;
30+
31+
RepeatedBenchmark(
32+
'repeated_in64',
33+
GoogleMessage2(field130: List<Int64>.generate(kSize, Int64.new)),
34+
).report();
35+
36+
RepeatedBenchmark(
37+
'repeated_string',
38+
GoogleMessage2(field128: List<String>.generate(kSize, (i) => i.toString())),
39+
).report();
40+
41+
RepeatedEnumBenchmark(
42+
'repeated_enum',
43+
f12.A58(a306: List<f12.A322>.generate(kSize, (_) => f12.A322.A324)),
44+
).report();
45+
}

0 commit comments

Comments
 (0)