@Override
 public void onDataAvailable(DataEmitter emitter, ByteBufferList bb) {
   if (bb != null) totalRead += bb.remaining();
   Util.emitAllData(this, bb);
   if (bb != null) totalRead -= bb.remaining();
   if (tracker != null && bb != null) tracker.onData(totalRead);
   // if there's data after the emitting, and it is paused... the underlying implementation
   // is obligated to cache the byte buffer list.
 }