| Index: net/quic/quic_stream_sequencer.cc
|
| diff --git a/net/quic/quic_stream_sequencer.cc b/net/quic/quic_stream_sequencer.cc
|
| index a237397450885dad0dcb12e104460bc96c5c7d90..12fe8c77d69ecabcc71d55670a6c94da3f6bb69a 100644
|
| --- a/net/quic/quic_stream_sequencer.cc
|
| +++ b/net/quic/quic_stream_sequencer.cc
|
| @@ -23,10 +23,9 @@ namespace net {
|
| QuicStreamSequencer::QuicStreamSequencer(ReliableQuicStream* quic_stream,
|
| const QuicClock* clock)
|
| : stream_(quic_stream),
|
| - num_bytes_consumed_(0),
|
| + buffered_frames_(new QuicFrameList()),
|
| close_offset_(numeric_limits<QuicStreamOffset>::max()),
|
| blocked_(false),
|
| - num_bytes_buffered_(0),
|
| num_frames_received_(0),
|
| num_duplicate_frames_received_(0),
|
| num_early_frames_received_(0),
|
| @@ -53,7 +52,7 @@ void QuicStreamSequencer::OnStreamFrame(const QuicStreamFrame& frame) {
|
| }
|
| }
|
| size_t bytes_written;
|
| - QuicErrorCode result = buffered_frames_.WriteAtOffset(
|
| + QuicErrorCode result = buffered_frames_->OnStreamData(
|
| byte_offset, frame.data, clock_->ApproximateNow(), &bytes_written);
|
|
|
| if (result == QUIC_INVALID_STREAM_DATA) {
|
| @@ -67,17 +66,15 @@ void QuicStreamSequencer::OnStreamFrame(const QuicStreamFrame& frame) {
|
| return;
|
| }
|
|
|
| - if (byte_offset > num_bytes_consumed_) {
|
| + if (byte_offset > buffered_frames_->BytesConsumed()) {
|
| ++num_early_frames_received_;
|
| }
|
|
|
| - num_bytes_buffered_ += data_len;
|
| -
|
| if (blocked_) {
|
| return;
|
| }
|
|
|
| - if (byte_offset == num_bytes_consumed_) {
|
| + if (byte_offset == buffered_frames_->BytesConsumed()) {
|
| if (FLAGS_quic_implement_stop_reading && ignore_read_data_) {
|
| FlushBufferedFrames();
|
| } else {
|
| @@ -106,7 +103,8 @@ bool QuicStreamSequencer::MaybeCloseStream() {
|
| }
|
|
|
| DVLOG(1) << "Passing up termination, as we've processed "
|
| - << num_bytes_consumed_ << " of " << close_offset_ << " bytes.";
|
| + << buffered_frames_->BytesConsumed() << " of " << close_offset_
|
| + << " bytes.";
|
| // This will cause the stream to consume the FIN.
|
| // Technically it's an error if |num_bytes_consumed| isn't exactly
|
| // equal to |close_offset|, but error handling seems silly at this point.
|
| @@ -117,41 +115,39 @@ bool QuicStreamSequencer::MaybeCloseStream() {
|
| } else {
|
| stream_->OnDataAvailable();
|
| }
|
| - buffered_frames_.Clear();
|
| - num_bytes_buffered_ = 0;
|
| + buffered_frames_->Clear();
|
| return true;
|
| }
|
|
|
| int QuicStreamSequencer::GetReadableRegions(iovec* iov, size_t iov_len) const {
|
| DCHECK(!blocked_);
|
| - return buffered_frames_.GetReadableRegions(iov, iov_len);
|
| + return buffered_frames_->GetReadableRegions(iov, iov_len);
|
| }
|
|
|
| bool QuicStreamSequencer::GetReadableRegion(iovec* iov,
|
| QuicTime* timestamp) const {
|
| DCHECK(!blocked_);
|
| - return buffered_frames_.GetReadableRegion(iov, timestamp);
|
| + return buffered_frames_->GetReadableRegion(iov, timestamp);
|
| }
|
|
|
| int QuicStreamSequencer::Readv(const struct iovec* iov, size_t iov_len) {
|
| DCHECK(!blocked_);
|
| - size_t bytes_read = buffered_frames_.ReadvAndInvalidate(iov, iov_len);
|
| - RecordBytesConsumed(bytes_read);
|
| + size_t bytes_read = buffered_frames_->Readv(iov, iov_len);
|
| + stream_->AddBytesConsumed(bytes_read);
|
| return static_cast<int>(bytes_read);
|
| }
|
|
|
| bool QuicStreamSequencer::HasBytesToRead() const {
|
| - return buffered_frames_.HasBytesToRead();
|
| + return buffered_frames_->HasBytesToRead();
|
| }
|
|
|
| bool QuicStreamSequencer::IsClosed() const {
|
| - return num_bytes_consumed_ >= close_offset_;
|
| + return buffered_frames_->BytesConsumed() >= close_offset_;
|
| }
|
|
|
| void QuicStreamSequencer::MarkConsumed(size_t num_bytes_consumed) {
|
| DCHECK(!blocked_);
|
| - bool result =
|
| - buffered_frames_.IncreaseTotalReadAndInvalidate(num_bytes_consumed);
|
| + bool result = buffered_frames_->MarkConsumed(num_bytes_consumed);
|
| if (!result) {
|
| LOG(DFATAL) << "Invalid argument to MarkConsumed."
|
| << " expect to consume: " << num_bytes_consumed
|
| @@ -159,7 +155,7 @@ void QuicStreamSequencer::MarkConsumed(size_t num_bytes_consumed) {
|
| stream_->Reset(QUIC_ERROR_PROCESSING_STREAM);
|
| return;
|
| }
|
| - RecordBytesConsumed(num_bytes_consumed);
|
| + stream_->AddBytesConsumed(num_bytes_consumed);
|
| }
|
|
|
| void QuicStreamSequencer::SetBlockedUntilFlush() {
|
| @@ -183,18 +179,20 @@ void QuicStreamSequencer::StopReading() {
|
|
|
| void QuicStreamSequencer::FlushBufferedFrames() {
|
| DCHECK(ignore_read_data_);
|
| - size_t bytes_flushed = buffered_frames_.FlushBufferedFrames();
|
| - DVLOG(1) << "Flushing buffered data at offset " << num_bytes_consumed_
|
| - << " length " << bytes_flushed << " for stream " << stream_->id();
|
| - RecordBytesConsumed(bytes_flushed);
|
| + size_t bytes_flushed = buffered_frames_->FlushBufferedFrames();
|
| + DVLOG(1) << "Flushing buffered data at offset "
|
| + << buffered_frames_->BytesConsumed() << " length " << bytes_flushed
|
| + << " for stream " << stream_->id();
|
| + stream_->AddBytesConsumed(bytes_flushed);
|
| MaybeCloseStream();
|
| }
|
|
|
| -void QuicStreamSequencer::RecordBytesConsumed(size_t bytes_consumed) {
|
| - num_bytes_consumed_ += bytes_consumed;
|
| - num_bytes_buffered_ -= bytes_consumed;
|
| +size_t QuicStreamSequencer::NumBytesBuffered() const {
|
| + return buffered_frames_->BytesBuffered();
|
| +}
|
|
|
| - stream_->AddBytesConsumed(bytes_consumed);
|
| +QuicStreamOffset QuicStreamSequencer::NumBytesConsumed() const {
|
| + return buffered_frames_->BytesConsumed();
|
| }
|
|
|
| } // namespace net
|
|
|