| Index: net/quic/quic_write_blocked_list_test.cc
|
| diff --git a/net/quic/quic_write_blocked_list_test.cc b/net/quic/quic_write_blocked_list_test.cc
|
| index 0633f63363634703952a79c65c57ff74d56daa33..47fe5191b797d904bcf2fec030dfc7819a9f53a4 100644
|
| --- a/net/quic/quic_write_blocked_list_test.cc
|
| +++ b/net/quic/quic_write_blocked_list_test.cc
|
| @@ -16,16 +16,16 @@ TEST(QuicWriteBlockedListTest, PriorityOrder) {
|
|
|
| // Mark streams blocked in roughly reverse priority order, and
|
| // verify that streams are sorted.
|
| - write_blocked_list.PushBack(40,
|
| - QuicWriteBlockedList::kLowestPriority);
|
| - write_blocked_list.PushBack(23,
|
| - QuicWriteBlockedList::kHighestPriority);
|
| - write_blocked_list.PushBack(17,
|
| - QuicWriteBlockedList::kHighestPriority);
|
| - write_blocked_list.PushBack(kHeadersStreamId,
|
| - QuicWriteBlockedList::kHighestPriority);
|
| - write_blocked_list.PushBack(kCryptoStreamId,
|
| - QuicWriteBlockedList::kHighestPriority);
|
| + write_blocked_list.AddStream(40,
|
| + QuicWriteBlockedList::kLowestPriority);
|
| + write_blocked_list.AddStream(23,
|
| + QuicWriteBlockedList::kHighestPriority);
|
| + write_blocked_list.AddStream(17,
|
| + QuicWriteBlockedList::kHighestPriority);
|
| + write_blocked_list.AddStream(kHeadersStreamId,
|
| + QuicWriteBlockedList::kHighestPriority);
|
| + write_blocked_list.AddStream(kCryptoStreamId,
|
| + QuicWriteBlockedList::kHighestPriority);
|
|
|
| EXPECT_EQ(5u, write_blocked_list.NumBlockedStreams());
|
| EXPECT_TRUE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream());
|
| @@ -47,8 +47,8 @@ TEST(QuicWriteBlockedListTest, PriorityOrder) {
|
|
|
| TEST(QuicWriteBlockedListTest, CryptoStream) {
|
| QuicWriteBlockedList write_blocked_list;
|
| - write_blocked_list.PushBack(kCryptoStreamId,
|
| - QuicWriteBlockedList::kHighestPriority);
|
| + write_blocked_list.AddStream(kCryptoStreamId,
|
| + QuicWriteBlockedList::kHighestPriority);
|
|
|
| EXPECT_EQ(1u, write_blocked_list.NumBlockedStreams());
|
| EXPECT_TRUE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream());
|
| @@ -59,8 +59,8 @@ TEST(QuicWriteBlockedListTest, CryptoStream) {
|
|
|
| TEST(QuicWriteBlockedListTest, HeadersStream) {
|
| QuicWriteBlockedList write_blocked_list;
|
| - write_blocked_list.PushBack(kHeadersStreamId,
|
| - QuicWriteBlockedList::kHighestPriority);
|
| + write_blocked_list.AddStream(kHeadersStreamId,
|
| + QuicWriteBlockedList::kHighestPriority);
|
|
|
| EXPECT_EQ(1u, write_blocked_list.NumBlockedStreams());
|
| EXPECT_TRUE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream());
|
| @@ -71,10 +71,10 @@ TEST(QuicWriteBlockedListTest, HeadersStream) {
|
|
|
| TEST(QuicWriteBlockedListTest, VerifyHeadersStream) {
|
| QuicWriteBlockedList write_blocked_list;
|
| - write_blocked_list.PushBack(5,
|
| - QuicWriteBlockedList::kHighestPriority);
|
| - write_blocked_list.PushBack(kHeadersStreamId,
|
| - QuicWriteBlockedList::kHighestPriority);
|
| + write_blocked_list.AddStream(5,
|
| + QuicWriteBlockedList::kHighestPriority);
|
| + write_blocked_list.AddStream(kHeadersStreamId,
|
| + QuicWriteBlockedList::kHighestPriority);
|
|
|
| EXPECT_EQ(2u, write_blocked_list.NumBlockedStreams());
|
| EXPECT_TRUE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream());
|
| @@ -95,12 +95,12 @@ TEST(QuicWriteBlockedListTest, NoDuplicateEntries) {
|
| // Try to add a stream to the write blocked list multiple times at the same
|
| // priority.
|
| const QuicStreamId kBlockedId = kClientDataStreamId1;
|
| - write_blocked_list.PushBack(kBlockedId,
|
| - QuicWriteBlockedList::kHighestPriority);
|
| - write_blocked_list.PushBack(kBlockedId,
|
| - QuicWriteBlockedList::kHighestPriority);
|
| - write_blocked_list.PushBack(kBlockedId,
|
| - QuicWriteBlockedList::kHighestPriority);
|
| + write_blocked_list.AddStream(kBlockedId,
|
| + QuicWriteBlockedList::kHighestPriority);
|
| + write_blocked_list.AddStream(kBlockedId,
|
| + QuicWriteBlockedList::kHighestPriority);
|
| + write_blocked_list.AddStream(kBlockedId,
|
| + QuicWriteBlockedList::kHighestPriority);
|
|
|
| // This should only result in one blocked stream being added.
|
| EXPECT_EQ(1u, write_blocked_list.NumBlockedStreams());
|
| @@ -112,6 +112,56 @@ TEST(QuicWriteBlockedListTest, NoDuplicateEntries) {
|
| EXPECT_FALSE(write_blocked_list.HasWriteBlockedDataStreams());
|
| }
|
|
|
| +TEST(QuicWriteBlockedListTest, BatchingWrites) {
|
| + FLAGS_quic_batch_writes = true;
|
| + QuicWriteBlockedList write_blocked_list;
|
| +
|
| + const QuicStreamId id1 = kClientDataStreamId1;
|
| + const QuicStreamId id2 = kClientDataStreamId2;
|
| +
|
| + write_blocked_list.AddStream(id1, QuicWriteBlockedList::kLowestPriority);
|
| + write_blocked_list.AddStream(id2, QuicWriteBlockedList::kLowestPriority);
|
| + EXPECT_EQ(2u, write_blocked_list.NumBlockedStreams());
|
| +
|
| + // The first stream we push back should stay at the front until 16k is
|
| + // written.
|
| + EXPECT_EQ(id1, write_blocked_list.PopFront());
|
| + write_blocked_list.UpdateBytesForStream(id1, 15999);
|
| + write_blocked_list.AddStream(id1, QuicWriteBlockedList::kLowestPriority);
|
| + EXPECT_EQ(2u, write_blocked_list.NumBlockedStreams());
|
| + EXPECT_EQ(id1, write_blocked_list.PopFront());
|
| +
|
| + // Once 16k is written the first stream will cede to the next.
|
| + write_blocked_list.UpdateBytesForStream(id1, 1);
|
| + write_blocked_list.AddStream(id1, QuicWriteBlockedList::kLowestPriority);
|
| + EXPECT_EQ(2u, write_blocked_list.NumBlockedStreams());
|
| + EXPECT_EQ(id2, write_blocked_list.PopFront());
|
| +
|
| + // Set the new stream to have written all but one byte.
|
| + write_blocked_list.UpdateBytesForStream(id2, 15999);
|
| + write_blocked_list.AddStream(id2, QuicWriteBlockedList::kLowestPriority);
|
| + EXPECT_EQ(2u, write_blocked_list.NumBlockedStreams());
|
| +
|
| + // Ensure higher priority streams are popped first.
|
| + const QuicStreamId id3 = kClientDataStreamId2 + 2;
|
| + write_blocked_list.AddStream(id3, QuicWriteBlockedList::kHighestPriority);
|
| + EXPECT_EQ(id3, write_blocked_list.PopFront());
|
| +
|
| + // Higher priority streams will always be popped first, even if using their
|
| + // byte quota
|
| + write_blocked_list.UpdateBytesForStream(id1, 20000);
|
| + write_blocked_list.AddStream(id3, QuicWriteBlockedList::kHighestPriority);
|
| + EXPECT_EQ(id3, write_blocked_list.PopFront());
|
| +
|
| + // Once the higher priority stream is out of the way, id2 will resume its 16k
|
| + // write, with only 1 byte remaining of its guaranteed write allocation.
|
| + EXPECT_EQ(id2, write_blocked_list.PopFront());
|
| + write_blocked_list.UpdateBytesForStream(id2, 1);
|
| + write_blocked_list.AddStream(id2, QuicWriteBlockedList::kLowestPriority);
|
| + EXPECT_EQ(2u, write_blocked_list.NumBlockedStreams());
|
| + EXPECT_EQ(id1, write_blocked_list.PopFront());
|
| +}
|
| +
|
| } // namespace
|
| } // namespace test
|
| } // namespace net
|
|
|