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; |
} |
} |