| Index: net/quic/quic_frame_list.cc
|
| diff --git a/net/quic/quic_frame_list.cc b/net/quic/quic_frame_list.cc
|
| index 5a6209eb6846020bf31d98aed3b21517d222bc64..862e34f7ceda76db83afe1b82c6f572a79c18c3f 100644
|
| --- a/net/quic/quic_frame_list.cc
|
| +++ b/net/quic/quic_frame_list.cc
|
| @@ -19,11 +19,20 @@ QuicFrameList::~QuicFrameList() {
|
| Clear();
|
| }
|
|
|
| -QuicErrorCode QuicFrameList::WriteAtOffset(QuicStreamOffset offset,
|
| - StringPiece data,
|
| - QuicTime timestamp,
|
| - size_t* const bytes_written) {
|
| - *bytes_written = 0;
|
| +void QuicFrameList::Clear() {
|
| + frame_list_.clear();
|
| + num_bytes_buffered_ = 0;
|
| +}
|
| +
|
| +bool QuicFrameList::Empty() const {
|
| + return frame_list_.empty();
|
| +}
|
| +
|
| +QuicErrorCode QuicFrameList::OnStreamData(QuicStreamOffset offset,
|
| + StringPiece data,
|
| + QuicTime timestamp,
|
| + size_t* const bytes_buffered) {
|
| + *bytes_buffered = 0;
|
| const size_t data_len = data.size();
|
| auto insertion_point = FindInsertionPoint(offset, data_len);
|
| if (IsDuplicate(offset, data_len, insertion_point)) {
|
| @@ -39,7 +48,8 @@ QuicErrorCode QuicFrameList::WriteAtOffset(QuicStreamOffset offset,
|
| insertion_point =
|
| frame_list_.insert(insertion_point, FrameData(offset, "", timestamp));
|
| data.CopyToString(&insertion_point->segment);
|
| - *bytes_written = data_len;
|
| + *bytes_buffered = data_len;
|
| + num_bytes_buffered_ += data_len;
|
| return QUIC_NO_ERROR;
|
| }
|
|
|
| @@ -135,13 +145,11 @@ bool QuicFrameList::GetReadableRegion(iovec* iov, QuicTime* timestamp) const {
|
| }
|
| iov->iov_base = static_cast<void*>(const_cast<char*>(it->segment.data()));
|
| iov->iov_len = it->segment.size();
|
| - if (timestamp) {
|
| - *timestamp = it->timestamp;
|
| - }
|
| + *timestamp = it->timestamp;
|
| return true;
|
| }
|
|
|
| -bool QuicFrameList::IncreaseTotalReadAndInvalidate(size_t bytes_used) {
|
| +bool QuicFrameList::MarkConsumed(size_t bytes_used) {
|
| size_t end_offset = total_bytes_read_ + bytes_used;
|
| while (!frame_list_.empty() && end_offset != total_bytes_read_) {
|
| list<FrameData>::iterator it = frame_list_.begin();
|
| @@ -151,6 +159,7 @@ bool QuicFrameList::IncreaseTotalReadAndInvalidate(size_t bytes_used) {
|
|
|
| if (it->offset + it->segment.length() <= end_offset) {
|
| total_bytes_read_ += it->segment.length();
|
| + num_bytes_buffered_ -= it->segment.length();
|
| // This chunk is entirely consumed.
|
| frame_list_.erase(it);
|
| continue;
|
| @@ -159,6 +168,7 @@ bool QuicFrameList::IncreaseTotalReadAndInvalidate(size_t bytes_used) {
|
| // Partially consume this frame.
|
| size_t delta = end_offset - it->offset;
|
| total_bytes_read_ += delta;
|
| + num_bytes_buffered_ -= delta;
|
| string new_data = it->segment.substr(delta);
|
| const QuicTime timestamp = it->timestamp;
|
| frame_list_.erase(it);
|
| @@ -168,8 +178,7 @@ bool QuicFrameList::IncreaseTotalReadAndInvalidate(size_t bytes_used) {
|
| return true;
|
| }
|
|
|
| -size_t QuicFrameList::ReadvAndInvalidate(const struct iovec* iov,
|
| - size_t iov_len) {
|
| +size_t QuicFrameList::Readv(const struct iovec* iov, size_t iov_len) {
|
| list<FrameData>::iterator it = frame_list_.begin();
|
| size_t iov_index = 0;
|
| size_t iov_offset = 0;
|
| @@ -194,6 +203,7 @@ size_t QuicFrameList::ReadvAndInvalidate(const struct iovec* iov,
|
| if (it->segment.size() == frame_offset) {
|
| // We've copied this whole frame
|
| total_bytes_read_ += it->segment.size();
|
| + num_bytes_buffered_ -= it->segment.size();
|
| frame_list_.erase(it);
|
| it = frame_list_.begin();
|
| frame_offset = 0;
|
| @@ -206,6 +216,7 @@ size_t QuicFrameList::ReadvAndInvalidate(const struct iovec* iov,
|
| it->timestamp));
|
| frame_list_.erase(it);
|
| total_bytes_read_ += frame_offset;
|
| + num_bytes_buffered_ -= frame_offset;
|
| }
|
| return total_bytes_read_ - initial_bytes_consumed;
|
| }
|
| @@ -226,4 +237,13 @@ bool QuicFrameList::HasBytesToRead() const {
|
| return !frame_list_.empty() &&
|
| frame_list_.begin()->offset == total_bytes_read_;
|
| }
|
| +
|
| +QuicStreamOffset QuicFrameList::BytesConsumed() const {
|
| + return total_bytes_read_;
|
| +}
|
| +
|
| +size_t QuicFrameList::BytesBuffered() const {
|
| + return num_bytes_buffered_;
|
| +}
|
| +
|
| } // namespace net_quic
|
|
|