anchor.diff:  
     @override
     void scheduleFrame() {
  -    // Don't keep on truckin' if there's an error.
  -    if (!_benchmarkStopped && !_hasErrored) {
  -      super.scheduleFrame();
  -    }
  +    // Don't keep on truckin' if there's an error or the benchmark has stopped.
  +    if (_hasErrored || _benchmarkStopped) {
  +      return;
  +    }
  +    super.scheduleFrame();
     }
   
     @override
     void handleDrawFrame() {
  -    // Don't keep on truckin' if there's an error.
  -    if (_hasErrored) {
  +    // Don't keep on truckin' if there's an error or the benchmark has stopped.
  +    if (_hasErrored || _benchmarkStopped) {
         return;
       }
       try {
  -      _listener.frameWillDraw();
  +      _recorder.frameWillDraw();
         super.handleDrawFrame();
  -      _listener.frameDidDraw();
  +      _recorder.frameDidDraw();
       } catch (error, stackTrace) {
         _haltBenchmarkWithError(error, stackTrace);
         rethrow;
  
positive.code: 
  /// Implemented by recorders that use [_RecordingWidgetsBinding] to receive
  /// frame life-cycle calls.
  abstract class RecordingWidgetsBindingListener {
    /// The profile where the benchmark is collecting metrics.
    Profile profile;
  
    /// Called just before calling [SchedulerBinding.handleDrawFrame].
    void frameWillDraw();
  
negative.code:   Widget createWidget();
  
    @override
    VoidCallback didStop;
  
    Profile profile;
    Completer<void> _runCompleter;
  
    Stopwatch _drawFrameStopwatch;
  
  