anchor.diff:  /// An entrypoint used to run portions of analyzer and measure its performance.
   library analyzer_cli.tool.perf;
   
  +import 'dart:async';
   import 'dart:io' show exit;
   
   import 'package:analyzer/dart/ast/ast.dart';
  
positive.code:   var files = new Set<Source>();
    var loadTimer = new Stopwatch()..start();
    collectSources(sources.forUri2(entryUri), files);
    collectSources(sources.forUri("dart:async"), files);
    collectSources(sources.forUri("dart:collection"), files);
    collectSources(sources.forUri("dart:convert"), files);
    collectSources(sources.forUri("dart:core"), files);
    collectSources(sources.forUri("dart:developer"), files);
    collectSources(sources.forUri("dart:_internal"), files);
    collectSources(sources.forUri("dart:isolate"), files);
    collectSources(sources.forUri("dart:math"), files);
    collectSources(sources.forUri("dart:mirrors"), files);
    collectSources(sources.forUri("dart:typed_data"), files);
    loadTimer.stop();
  
    print('input size: ${scanTotalChars} chars');
  
negative.code: import 'package:analyzer/src/generated/source_io.dart';
  import 'package:package_config/discovery.dart';
  
  /// Cumulative total number of chars scanned.
  int scanTotalChars = 0;
  
  /// Cumulative time spent scanning.
  Stopwatch scanTimer = new Stopwatch();
  
  /// Factory to load and resolve app, packages, and sdk sources.
  SourceFactory sources;
  
  main(List<String> args) async {
    // TODO(sigmund): provide sdk folder as well.
    if (args.length < 2) {
      print('usage: perf.dart <bench-id> <entry.dart>');
      exit(1);
    }
    var totalTimer = new Stopwatch()..start();
  
    var bench = args[0];
    var entryUri = Uri.base.resolve(args[1]);
  
    await setup(entryUri);
  
    if (bench == 'scan') {
      Set<Source> files = scanReachableFiles(entryUri);
      // TODO(sigmund): consider replacing the warmup with instrumented snapshots.
      for (int i = 0; i < 10; i++) scanFiles(files);
    } else if (bench == 'parse') {
      Set<Source> files = scanReachableFiles(entryUri);
      // TODO(sigmund): consider replacing the warmup with instrumented snapshots.
      for (int i = 0; i < 10; i++) parseFiles(files);
    } else {
      print('unsupported bench-id: $bench. Please specify "scan" or "parse"');
      // TODO(sigmund): implement the remaining benchmarks.
  