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