anchor.diff:    const UserCallbackDoneEvent._private();
   
     String toString() => 'streamy.userCallback.done';
  +}
  +
  +class UserCallbackAsyncEnterEvent implements TraceEvent {
  +  factory UserCallbackAsyncEnterEvent() => const UserCallbackAsyncEnterEvent._private();
  +
  +  const UserCallbackAsyncEnterEvent._private();
  +
  +  String toString() => 'streamy.userCallback.async.start';
  +}
  +
  +class UserCallbackAsyncExitEvent implements TraceEvent {
  +  factory UserCallbackAsyncExitEvent() => const UserCallbackAsyncExitEvent._private();
  +
  +  const UserCallbackAsyncExitEvent._private();
  +
  +  String toString() => 'streamy.userCallback.async.done';
   }
   
   /// Fired when the response [Stream] has terminated.
  
positive.code:     delegate.handle(request).transform(transformerFactory(request, trace));
  }
  
  _runZonedWithOnDone(fn, onDone) {
    // Initial count is 1 due to running 'fn'. This makes it work out
    // nicely if 'fn' itself throws an Exception.
    var asyncCount = 1;
  
negative.code:   }, onRunAsync: (callback) {
      asyncCount++;
      runAsync(() {
        trace.record(new UserCallbackAsyncEnterEvent());
        try {
          callback();
        } finally {
          trace.record(new UserCallbackAsyncExitEvent());
          asyncCount--;
          if (asyncCount == 0) {
            onDone();
  