// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:kernel/kernel.dart';
import 'dart:io';

final String usage = '''
Usage: serialize_bench INPUT.dill OUTPUT.dill

Deserialize INPUT and write it back to OUTPUT several times, measuring
the time it takes, including I/O time.
''';

main(List<String> args) async {
  if (args.length != 2) {
    print(usage);
    exit(1);
  }
  Component component = loadComponentFromBinary(args[0]);

  String destination = args[1];
  var watch = new Stopwatch()..start();
  await writeComponentToBinary(component, destination);
  int coldTime = watch.elapsedMilliseconds;

  watch.reset();
  int numTrials = 10;
  for (int i = 0; i < numTrials; ++i) {
    await writeComponentToBinary(component, destination);
  }
  double hotTime = watch.elapsedMilliseconds / numTrials;

  print('Cold time: $coldTime ms');
  print('Hot time:  $hotTime ms');
}
