anchor.diff:    }
   
     Future stop() async {
  -    if (_process == null) {
  -      throw new StateError(
  -          '_AdbLogReader must be started before it can be stopped.');
  -    }
  +    if (_process == null)
  +      throw new StateError('_AdbLogReader must be started before it can be stopped.');
  +
       _stdoutSubscription?.cancel();
       _stdoutSubscription = null;
       _stderrSubscription?.cancel();
  
positive.code: 
      RegExp timeRegExp = new RegExp(r'^\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}', multiLine: true);
      Match timeMatch = timeRegExp.firstMatch(output);
      return timeMatch[0];
    }
  
    Future<String> stopTracing(AndroidApk apk, { String outPath }) async {
  
negative.code: 
    bool get isReading => _process != null;
  
    Future get finished => _process != null ? _process.exitCode : new Future.value(0);
  
    Future start() async {
      if (_process != null)
        throw new StateError('_AdbLogReader must be stopped before it can be started.');
  
      // Start the adb logcat process.
      List<String> args = <String>[
        '-s',
        device.id,
        'logcat',
        '-v',
        'tag', // Only log the tag and the message
        '-s',
        'flutter:V',
        'ActivityManager:W',
        'System.err:W',
        '*:F'
      ];
      String lastTimestamp = device.lastLogcatTimestamp;
      if (lastTimestamp != null)
        args.addAll(<String>['-T', lastTimestamp]);
      _process = await runCommand(device.adbCommandForDevice(args));
      _stdoutSubscription =
          _process.stdout.transform(UTF8.decoder)
                         .transform(const LineSplitter()).listen(_onLine);
  