| Index: net/quic/quic_stream_sequencer.cc
 | 
| diff --git a/net/quic/quic_stream_sequencer.cc b/net/quic/quic_stream_sequencer.cc
 | 
| index ceeaa943a4898c3c2b08f85f8ba9fa141cb1b0fe..7f06ec46d9a6600e3fa3475c0c9852471e4b8fcf 100644
 | 
| --- a/net/quic/quic_stream_sequencer.cc
 | 
| +++ b/net/quic/quic_stream_sequencer.cc
 | 
| @@ -11,7 +11,6 @@
 | 
|  #include "base/metrics/sparse_histogram.h"
 | 
|  #include "net/quic/reliable_quic_stream.h"
 | 
|  
 | 
| -using std::make_pair;
 | 
|  using std::min;
 | 
|  using std::numeric_limits;
 | 
|  using std::string;
 | 
| @@ -25,7 +24,8 @@ QuicStreamSequencer::QuicStreamSequencer(ReliableQuicStream* quic_stream)
 | 
|        blocked_(false),
 | 
|        num_bytes_buffered_(0),
 | 
|        num_frames_received_(0),
 | 
| -      num_duplicate_frames_received_(0) {
 | 
| +      num_duplicate_frames_received_(0),
 | 
| +      num_early_frames_received_(0) {
 | 
|  }
 | 
|  
 | 
|  QuicStreamSequencer::~QuicStreamSequencer() {
 | 
| @@ -64,6 +64,10 @@ void QuicStreamSequencer::OnStreamFrame(const QuicStreamFrame& frame) {
 | 
|    IOVector data;
 | 
|    data.AppendIovec(frame.data.iovec(), frame.data.Size());
 | 
|  
 | 
| +  if (byte_offset > num_bytes_consumed_) {
 | 
| +    ++num_early_frames_received_;
 | 
| +  }
 | 
| +
 | 
|    // If the frame has arrived in-order then we can process it immediately, only
 | 
|    // buffering if the stream is unable to process it.
 | 
|    if (!blocked_ && byte_offset == num_bytes_consumed_) {
 | 
| @@ -98,7 +102,7 @@ void QuicStreamSequencer::OnStreamFrame(const QuicStreamFrame& frame) {
 | 
|    for (size_t i = 0; i < data.Size(); ++i) {
 | 
|      DVLOG(1) << "Buffering stream data at offset " << byte_offset;
 | 
|      const iovec& iov = data.iovec()[i];
 | 
| -    buffered_frames_.insert(make_pair(
 | 
| +    buffered_frames_.insert(std::make_pair(
 | 
|          byte_offset, string(static_cast<char*>(iov.iov_base), iov.iov_len)));
 | 
|      byte_offset += iov.iov_len;
 | 
|      num_bytes_buffered_ += iov.iov_len;
 | 
| @@ -190,8 +194,8 @@ int QuicStreamSequencer::Readv(const struct iovec* iov, size_t iov_len) {
 | 
|    }
 | 
|    // We've finished copying.  If we have a partial frame, update it.
 | 
|    if (frame_offset != 0) {
 | 
| -    buffered_frames_.insert(
 | 
| -        make_pair(it->first + frame_offset, it->second.substr(frame_offset)));
 | 
| +    buffered_frames_.insert(std::make_pair(it->first + frame_offset,
 | 
| +                                           it->second.substr(frame_offset)));
 | 
|      buffered_frames_.erase(buffered_frames_.begin());
 | 
|      RecordBytesConsumed(frame_offset);
 | 
|    }
 | 
| @@ -278,7 +282,7 @@ void QuicStreamSequencer::FlushBufferedFrames() {
 | 
|      } else {
 | 
|        string new_data = it->second.substr(bytes_consumed);
 | 
|        buffered_frames_.erase(it);
 | 
| -      buffered_frames_.insert(make_pair(num_bytes_consumed_, new_data));
 | 
| +      buffered_frames_.insert(std::make_pair(num_bytes_consumed_, new_data));
 | 
|        return;
 | 
|      }
 | 
|    }
 | 
| 
 |