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

Unified Diff: net/quic/quic_write_blocked_list_test.cc

Issue 1470713003: Landing Recent QUIC changes until and including Mon Nov 16 14:15:48 2015 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Adding NET_EXPORT_PRIVATE to DelegateInterface. 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
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..827f9712c8d3b4f18571a246faccc87bde2e11d7 100644
--- a/net/quic/quic_write_blocked_list_test.cc
+++ b/net/quic/quic_write_blocked_list_test.cc
@@ -7,6 +7,12 @@
#include "net/quic/test_tools/quic_test_utils.h"
#include "testing/gtest/include/gtest/gtest.h"
+using net::kLowestPriority;
+using net::kHighestPriority;
+
+using net::kLowestPriority;
+using net::kHighestPriority;
+
namespace net {
namespace test {
namespace {
@@ -16,16 +22,11 @@ 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, net::kLowestPriority);
+ write_blocked_list.AddStream(23, net::kHighestPriority);
+ write_blocked_list.AddStream(17, net::kHighestPriority);
+ write_blocked_list.AddStream(kHeadersStreamId, net::kHighestPriority);
+ write_blocked_list.AddStream(kCryptoStreamId, net::kHighestPriority);
EXPECT_EQ(5u, write_blocked_list.NumBlockedStreams());
EXPECT_TRUE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream());
@@ -47,8 +48,7 @@ TEST(QuicWriteBlockedListTest, PriorityOrder) {
TEST(QuicWriteBlockedListTest, CryptoStream) {
QuicWriteBlockedList write_blocked_list;
- write_blocked_list.PushBack(kCryptoStreamId,
- QuicWriteBlockedList::kHighestPriority);
+ write_blocked_list.AddStream(kCryptoStreamId, net::kHighestPriority);
EXPECT_EQ(1u, write_blocked_list.NumBlockedStreams());
EXPECT_TRUE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream());
@@ -59,8 +59,7 @@ TEST(QuicWriteBlockedListTest, CryptoStream) {
TEST(QuicWriteBlockedListTest, HeadersStream) {
QuicWriteBlockedList write_blocked_list;
- write_blocked_list.PushBack(kHeadersStreamId,
- QuicWriteBlockedList::kHighestPriority);
+ write_blocked_list.AddStream(kHeadersStreamId, net::kHighestPriority);
EXPECT_EQ(1u, write_blocked_list.NumBlockedStreams());
EXPECT_TRUE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream());
@@ -71,10 +70,8 @@ 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, net::kHighestPriority);
+ write_blocked_list.AddStream(kHeadersStreamId, net::kHighestPriority);
EXPECT_EQ(2u, write_blocked_list.NumBlockedStreams());
EXPECT_TRUE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream());
@@ -95,12 +92,9 @@ 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, net::kHighestPriority);
+ write_blocked_list.AddStream(kBlockedId, net::kHighestPriority);
+ write_blocked_list.AddStream(kBlockedId, net::kHighestPriority);
// This should only result in one blocked stream being added.
EXPECT_EQ(1u, write_blocked_list.NumBlockedStreams());
@@ -112,6 +106,60 @@ 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, net::kLowestPriority);
+ write_blocked_list.AddStream(id2, net::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.AddStream(id1, net::kHighestPriority);
+ write_blocked_list.UpdateBytesForStream(id1, 15999);
+ write_blocked_list.AddStream(id1, net::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.AddStream(id1, net::kHighestPriority);
+ write_blocked_list.UpdateBytesForStream(id1, 1);
+ write_blocked_list.AddStream(id1, net::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.AddStream(id2, net::kHighestPriority);
+ write_blocked_list.UpdateBytesForStream(id2, 15999);
+ write_blocked_list.AddStream(id2, net::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, net::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(id3, 20000);
+ write_blocked_list.AddStream(id3, net::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.AddStream(id2, net::kHighestPriority);
+ write_blocked_list.UpdateBytesForStream(id2, 1);
+ write_blocked_list.AddStream(id2, net::kLowestPriority);
+ EXPECT_EQ(2u, write_blocked_list.NumBlockedStreams());
+ EXPECT_EQ(id1, write_blocked_list.PopFront());
+}
+
} // namespace
} // namespace test
} // namespace net

Powered by Google App Engine
This is Rietveld 408576698