Skip to content

Commit

Permalink
Add a dedicated benchmark for protos with long repeated fields.
Browse files Browse the repository at this point in the history
  • Loading branch information
ignatz committed Feb 21, 2024
1 parent 31452f2 commit d5001a9
Showing 1 changed file with 45 additions and 0 deletions.
45 changes: 45 additions & 0 deletions benchmarks/bin/repeated_field.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import 'dart:typed_data';

import 'package:fixnum/fixnum.dart';
import 'package:protobuf_benchmarks/benchmark_base.dart';
import 'package:protobuf_benchmarks/generated/f12.pb.dart' as f12;
import 'package:protobuf_benchmarks/generated/google_message2.pb.dart';

class RepeatedBenchmark extends BenchmarkBase {
final Uint8List _buffer;

RepeatedBenchmark(super.name, GoogleMessage2 message)
: _buffer = message.writeToBuffer();

@override
void run() => GoogleMessage2.fromBuffer(_buffer);
}

class RepeatedEnumBenchmark extends BenchmarkBase {
final Uint8List _buffer;

RepeatedEnumBenchmark(super.name, f12.A58 message)
: _buffer = message.writeToBuffer();

@override
void run() => f12.A58.fromBuffer(_buffer);
}

void main() {
const kSize = 500000;

RepeatedBenchmark(
'repeated_int64',
GoogleMessage2(field130: List<Int64>.generate(kSize, Int64.new)),
).report();

RepeatedBenchmark(
'repeated_string',
GoogleMessage2(field128: List<String>.generate(kSize, (i) => i.toString())),
).report();

RepeatedEnumBenchmark(
'repeated_enum',
f12.A58(a306: List<f12.A322>.generate(kSize, (_) => f12.A322.A324)),
).report();
}

0 comments on commit d5001a9

Please sign in to comment.