anchor.diff:    }
   
   
  -  void _digestUpdatePerfCounters() {
  -    int scopeCount = 0, watcherCount = 0;
  +  void _digestComputePerfCounters() {
  +    int watcherCount = 0, scopeCount = 0;
       Scope scope = this;
       do {
         scopeCount++;
         watcherCount += scope._watchers.length;
       } while ((scope = _digestComputeNextScope(scope)) != null);
  +    _digestUpdatePerfCounters(watcherCount, scopeCount);
  +  }
  +
  +
  +  void _digestUpdatePerfCounters(int watcherCount, int scopeCount) {
       _perf.counters['ng.scope.watchers'] = watcherCount;
       _perf.counters['ng.scopes'] = scopeCount;
     }
  
positive.code:       watch = watch.next;
        while (watch == null) {
          scope = _digestComputeNextScope(scope);
          if (scope == null) return result;
          watch = scope._watchers.head;
        }
        last = watch.last;
  
negative.code:         }
        }
      } while ((scope = _digestComputeNextScope(scope)) != null);
      _digestUpdatePerfCounters(watcherCount, scopeCount);
      return null;
    }
  
  
    _Watch _digestComputeLastDirtyUntil(_Watch stopWatch, List<String> log) {
      int watcherCount = 0;
      int scopeCount = 0;
      Scope scope = this;
      do {
        _WatchList watchers = scope._watchers;
        watcherCount += watchers.length;
        scopeCount++;
        for (_Watch watch = watchers.head; watch != null; watch = watch.next) {
          if (identical(stopWatch, watch)) return null;
          var last = watch.last;
          var value = watch.get(scope);
  