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

Unified Diff: net/quic/core/quic_stream_sequencer_buffer_test.cc

Issue 2328633004: lazy allocation and early release memory in QuicStreamSequencerBuffer. Protected by --quic_reduce_s… (Closed)
Patch Set: Created 4 years, 3 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
« no previous file with comments | « net/quic/core/quic_stream_sequencer_buffer.cc ('k') | net/quic/core/reliable_quic_stream.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/core/quic_stream_sequencer_buffer_test.cc
diff --git a/net/quic/core/quic_stream_sequencer_buffer_test.cc b/net/quic/core/quic_stream_sequencer_buffer_test.cc
index f987f9fd6eb5ed210bcc802f73e20f248e2fc54c..58b418c1e303fea9580b87136d0df6da70e9d09f 100644
--- a/net/quic/core/quic_stream_sequencer_buffer_test.cc
+++ b/net/quic/core/quic_stream_sequencer_buffer_test.cc
@@ -60,7 +60,7 @@ class QuicStreamSequencerBufferPeer {
explicit QuicStreamSequencerBufferPeer(QuicStreamSequencerBuffer* buffer)
: buffer_(buffer) {}
- // Read from this buffer_->into the given destination buffer_-> up to the
+ // Read from this buffer_ into the given destination buffer_ up to the
// size of the destination. Returns the number of bytes read. Reading from
// an empty buffer_->returns 0.
size_t Read(char* dest_buffer, size_t size) {
@@ -76,6 +76,11 @@ class QuicStreamSequencerBufferPeer {
}
bool IsBlockArrayEmpty() {
+ if (FLAGS_quic_reduce_sequencer_buffer_memory_life_time && // NOLINT
+ buffer_->blocks_ == nullptr) {
+ return true;
+ }
+
size_t count = buffer_->blocks_count_;
for (size_t i = 0; i < count; i++) {
if (buffer_->blocks_[i] != nullptr) {
@@ -150,6 +155,8 @@ class QuicStreamSequencerBufferPeer {
void set_gaps(const std::list<Gap>& gaps) { buffer_->gaps_ = gaps; }
+ bool IsBufferAllocated() { return buffer_->blocks_ != nullptr; }
+
private:
QuicStreamSequencerBuffer* buffer_;
};
@@ -208,6 +215,9 @@ TEST_F(QuicStreamSequencerBufferTest, OnStreamData0length) {
}
TEST_F(QuicStreamSequencerBufferTest, OnStreamDataWithinBlock) {
+ if (FLAGS_quic_reduce_sequencer_buffer_memory_life_time) { // NOLINT
+ EXPECT_FALSE(helper_->IsBufferAllocated());
+ }
string source(1024, 'a');
size_t written;
clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
@@ -227,6 +237,7 @@ TEST_F(QuicStreamSequencerBufferTest, OnStreamDataWithinBlock) {
EXPECT_EQ(800u, frame_map->begin()->first);
EXPECT_EQ(t, (*frame_map)[800].timestamp);
EXPECT_TRUE(helper_->CheckBufferInvariants());
+ EXPECT_TRUE(helper_->IsBufferAllocated());
}
TEST_F(QuicStreamSequencerBufferTest, OnStreamDataWithOverlap) {
@@ -541,6 +552,31 @@ TEST_F(QuicStreamSequencerBufferTest, GetReadableRegionsEmpty) {
EXPECT_EQ(0u, iovs[iov_count].iov_len);
}
+TEST_F(QuicStreamSequencerBufferTest, ReleaseWholeBuffer) {
+ // Tests that buffer is not deallocated unless ReleaseWholeBuffer() is called.
+ if (!FLAGS_quic_reduce_sequencer_buffer_memory_life_time) { // NOLINT
+ // Won't release buffer when flag is off.
+ return;
+ }
+
+ string source(100, 'b');
+ clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
+ QuicTime t1 = clock_.ApproximateNow();
+ // Write something into [0, 100).
+ size_t written;
+ buffer_->OnStreamData(0, source, t1, &written, &error_details_);
+ EXPECT_TRUE(buffer_->HasBytesToRead());
+ char dest[120];
+ iovec iovecs[3]{iovec{dest, 40}, iovec{dest + 40, 40}, iovec{dest + 80, 40}};
+ size_t read = buffer_->Readv(iovecs, 3);
+ EXPECT_EQ(100u, read);
+ EXPECT_EQ(100u, buffer_->BytesConsumed());
+ EXPECT_TRUE(helper_->CheckBufferInvariants());
+ EXPECT_TRUE(helper_->IsBufferAllocated());
+ buffer_->ReleaseWholeBuffer();
+ EXPECT_FALSE(helper_->IsBufferAllocated());
+}
+
TEST_F(QuicStreamSequencerBufferTest, GetReadableRegionsBlockedByGap) {
// Write into [1, 1024).
string source(1023, 'a');
« no previous file with comments | « net/quic/core/quic_stream_sequencer_buffer.cc ('k') | net/quic/core/reliable_quic_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698