Call MarkConsumed() only once in QuicSpdyStreamBodyBuffer::MarkBodyConsumed() with a combined byte count.
This is a small behavioral change in preparation for a future CL which will make
MarkBodyConsumed() and also ReadBody() return the number of bytes to be consumed
by the caller. Splitting out this change allows that future CL to be a pure API
change. The ultimate motivation is much cleaner tests for
QuicSpdyStreamBodyBuffer.
gfe-relnote: n/a, change in QUIC v99-only code.
PiperOrigin-RevId: 259424818
Change-Id: I1a96285ac7fcdfc9eae2768c9f2b64b82a323929
diff --git a/quic/core/http/quic_spdy_stream_body_buffer.cc b/quic/core/http/quic_spdy_stream_body_buffer.cc
index d175e13..4238a3b 100644
--- a/quic/core/http/quic_spdy_stream_body_buffer.cc
+++ b/quic/core/http/quic_spdy_stream_body_buffer.cc
@@ -61,6 +61,7 @@
}
}
// Consume headers.
+ size_t bytes_to_consume = 0;
while (bytes_remaining_ < num_bytes) {
if (frame_meta_.empty()) {
QUIC_BUG << "Faild to consume because frame header buffer is empty.";
@@ -69,12 +70,14 @@
auto meta = frame_meta_.front();
frame_meta_.pop_front();
bytes_remaining_ += meta.payload_length;
- sequencer_->MarkConsumed(meta.header_length);
+ bytes_to_consume += meta.header_length;
}
- sequencer_->MarkConsumed(num_bytes);
+ bytes_to_consume += num_bytes;
// Update accountings.
bytes_remaining_ -= num_bytes;
total_body_bytes_readable_ -= num_bytes;
+
+ sequencer_->MarkConsumed(bytes_to_consume);
}
int QuicSpdyStreamBodyBuffer::PeekBody(iovec* iov, size_t iov_len) const {
diff --git a/quic/core/http/quic_spdy_stream_body_buffer_test.cc b/quic/core/http/quic_spdy_stream_body_buffer_test.cc
index 6e8e20d..a47880e 100644
--- a/quic/core/http/quic_spdy_stream_body_buffer_test.cc
+++ b/quic/core/http/quic_spdy_stream_body_buffer_test.cc
@@ -95,8 +95,7 @@
sequencer_.OnStreamFrame(frame);
body_buffer_.OnDataHeader(lengths);
body_buffer_.OnDataPayload(QuicStringPiece(body));
- EXPECT_CALL(stream_, AddBytesConsumed(header_length));
- EXPECT_CALL(stream_, AddBytesConsumed(1024));
+ EXPECT_CALL(stream_, AddBytesConsumed(header_length + 1024));
body_buffer_.MarkBodyConsumed(1024);
}
@@ -128,11 +127,9 @@
body_buffer_.OnDataHeader(lengths2);
body_buffer_.OnDataPayload(QuicStringPiece(body2));
- EXPECT_CALL(stream_, AddBytesConsumed(header_length1));
- EXPECT_CALL(stream_, AddBytesConsumed(512));
+ EXPECT_CALL(stream_, AddBytesConsumed(header_length1 + 512));
body_buffer_.MarkBodyConsumed(512);
- EXPECT_CALL(stream_, AddBytesConsumed(header_length2));
- EXPECT_CALL(stream_, AddBytesConsumed(2048));
+ EXPECT_CALL(stream_, AddBytesConsumed(header_length2 + 2048));
body_buffer_.MarkBodyConsumed(2048);
EXPECT_CALL(stream_, AddBytesConsumed(512));
body_buffer_.MarkBodyConsumed(512);
@@ -164,8 +161,7 @@
body_buffer_.OnDataHeader(lengths);
body_buffer_.OnDataPayload(QuicStringPiece(body));
- EXPECT_CALL(stream_, AddBytesConsumed(header_length));
- EXPECT_CALL(stream_, AddBytesConsumed(1024));
+ EXPECT_CALL(stream_, AddBytesConsumed(header_length + 1024));
char base[1024];
iovec iov = {&base[0], 1024};
@@ -204,8 +200,7 @@
body_buffer_.OnDataPayload(QuicStringPiece(body2));
// First read of 512 bytes.
- EXPECT_CALL(stream_, AddBytesConsumed(header_length1));
- EXPECT_CALL(stream_, AddBytesConsumed(512));
+ EXPECT_CALL(stream_, AddBytesConsumed(header_length1 + 512));
char base[512];
iovec iov = {&base[0], 512};
EXPECT_EQ(512u, body_buffer_.ReadBody(&iov, 1));
@@ -214,8 +209,7 @@
QuicStringPiece(static_cast<const char*>(iov.iov_base), 512));
// Second read of 2048 bytes.
- EXPECT_CALL(stream_, AddBytesConsumed(header_length2));
- EXPECT_CALL(stream_, AddBytesConsumed(2048));
+ EXPECT_CALL(stream_, AddBytesConsumed(header_length2 + 2048));
char base2[2048];
iovec iov2 = {&base2[0], 2048};
EXPECT_EQ(2048u, body_buffer_.ReadBody(&iov2, 1));