Future main()

in benchmark/benchmark.dart [8:46]


Future<void> main() async {
  // Create a large work request with 10,000 inputs.
  var workRequest = WorkRequest();
  for (var i = 0; i != 10000; ++i) {
    var path = 'blaze-bin/some/path/to/a/file/that/is/an/input/$i';
    workRequest
      ..arguments.add('--input=$path')
      ..inputs.add(Input()
        ..path = ''
        ..digest.addAll(List.filled(70, 0x11)));
  }

  // Serialize it.
  var requestBytes = workRequest.writeToBuffer();
  var length = requestBytes.length;
  print('Request has $length requestBytes.');

  // Add the length in front base 128 encoded as in the worker protocol.
  requestBytes =
      Uint8List.fromList(requestBytes.toList()..insertAll(0, _varInt(length)));

  // Split into 10000 byte chunks.
  var lists = <Uint8List>[];
  for (var i = 0; i < requestBytes.length; i += 10000) {
    lists.add(Uint8List.sublistView(
        requestBytes, i, min(i + 10000, requestBytes.length)));
  }

  // Time `AsyncMessageGrouper` and deserialization.
  for (var i = 0; i != 30; ++i) {
    var stopwatch = Stopwatch()..start();
    var asyncGrouper = AsyncMessageGrouper(Stream.fromIterable(lists));
    var message = (await asyncGrouper.next)!;
    print('Grouped in ${stopwatch.elapsedMilliseconds}ms');
    stopwatch.reset();
    WorkRequest.fromBuffer(message);
    print('Deserialized in ${stopwatch.elapsedMilliseconds}ms');
  }
}