import 'dart:io';

import "vm_service_heap_helper.dart" as helper;

main(List<String> args) async {
  List<helper.Interest> interests = new List<helper.Interest>();
  interests.add(new helper.Interest(
      Uri.parse(
          "package:front_end/src/fasta/source/source_library_builder.dart"),
      "SourceLibraryBuilder",
      ["fileUri"]));
  interests.add(new helper.Interest(
      Uri.parse(
          "package:front_end/src/fasta/source/source_extension_builder.dart"),
      "SourceExtensionBuilder",
      ["_extension"]));
  interests.add(new helper.Interest(
      Uri.parse("package:kernel/ast.dart"), "Library", ["fileUri"]));
  helper.VMServiceHeapHelperSpecificExactLeakFinder heapHelper =
      new helper.VMServiceHeapHelperSpecificExactLeakFinder(
          interests,
          [
            new helper.Interest(
                Uri.parse(
                    "package:front_end/src/fasta/source/source_extension_builder.dart"),
                "SourceExtensionBuilder",
                ["_extension"]),
            new helper.Interest(Uri.parse("package:kernel/ast.dart"),
                "Extension", ["name", "fileUri"]),
            new helper.Interest(Uri.parse("package:kernel/ast.dart"), "Library",
                ["fileUri", "_libraryIdString"]),
          ],
          true);

  if (args.length > 0 && args[0] == "--dart2js") {
    heapHelper.start([
      "--enable-asserts",
      Platform.script.resolve("incremental_dart2js_tester.dart").toString(),
      "--addDebugBreaks",
      "--fast",
      "--experimental",
    ]);
  } else {
    heapHelper.start([
      "--enable-asserts",
      Platform.script
          .resolve("incremental_load_from_dill_suite.dart")
          .toString(),
      "-DaddDebugBreaks=true",
      "--",
      "incremental_load_from_dill/no_outline_change_38",
    ]);
  }
}
