// Copyright (c) 2014, 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.

// @dart = 2.10

library dart2js.stress;

import 'package:compiler/src/dart2js.dart' as dart2js;
import 'dart:io' show Platform;

const ITERATIONS_FLAG_PREFIX = "--iterations=";
void main(List<String> args) {
  Stopwatch sw = new Stopwatch();
  int count = 0;
  int maxCount = null;
  if (args.isNotEmpty && args[0].startsWith(ITERATIONS_FLAG_PREFIX)) {
    maxCount = int.parse(args[0].substring(ITERATIONS_FLAG_PREFIX.length));
    args = args.sublist(1);
  }
  if (maxCount == null) {
    print("Running indefinitely.\n"
        "Use '$ITERATIONS_FLAG_PREFIX<count>' to set a repetition count"
        " (as first flag).");
  }
  args = [
    "--suppress-warnings",
    "--suppress-hints",
    "--libraries-spec="
        "${Platform.script.resolve('../../../sdk/lib/libraries.json').toFilePath()}"
  ]..addAll(args);
  void iterate() {
    count++;
    sw.reset();
    sw.start();
    dart2js.internalMain(args).then((_) {
      print("$count: ${sw.elapsedMilliseconds}ms");
    }).then((_) {
      if (maxCount == null || count < maxCount) {
        iterate();
      }
    });
  }

  iterate();
}
