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

Unified Diff: net/quic/quic_write_blocked_list_test.cc

Issue 1472563002: Let QUIC streams write 16k before ceding. Behind FLAG_quic_batch_writes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@107581674
Patch Set: Created 5 years, 1 month 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/quic_write_blocked_list.cc ('k') | net/spdy/write_blocked_list.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « net/quic/quic_write_blocked_list.cc ('k') | net/spdy/write_blocked_list.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698