Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(878)

Unified Diff: net/quic/quic_stream_sequencer.cc

Issue 1414573004: Introduces QuicStreamSequencerBufferInterface with one implementation. Refactor, no behavior change. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing the build file (previously missing a comma) Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698