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

Side by Side Diff: net/quic/congestion_control/quic_send_scheduler_test.cc

Issue 11416155: Adding transmission times for every QUIC packet received in the AckFrame. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Done Created 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/logging.h" 5 #include "base/logging.h"
6 #include "base/memory/scoped_ptr.h" 6 #include "base/memory/scoped_ptr.h"
7 #include "net/quic/congestion_control/quic_receipt_metrics_collector.h" 7 #include "net/quic/congestion_control/quic_receipt_metrics_collector.h"
8 #include "net/quic/congestion_control/quic_send_scheduler.h" 8 #include "net/quic/congestion_control/quic_send_scheduler.h"
9 #include "net/quic/test_tools/mock_clock.h" 9 #include "net/quic/test_tools/mock_clock.h"
10 #include "net/quic/quic_protocol.h" 10 #include "net/quic/quic_protocol.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 sender_->TimeUntilSend(false)); 43 sender_->TimeUntilSend(false));
44 } 44 }
45 45
46 TEST_F(QuicSendSchedulerTest, FixedRatePacing) { 46 TEST_F(QuicSendSchedulerTest, FixedRatePacing) {
47 SetUpCongestionType(kFixRate); 47 SetUpCongestionType(kFixRate);
48 QuicAckFrame ack; 48 QuicAckFrame ack;
49 ack.congestion_info.type = kFixRate; 49 ack.congestion_info.type = kFixRate;
50 ack.congestion_info.fix_rate.bitrate_in_bytes_per_second = 100000; 50 ack.congestion_info.fix_rate.bitrate_in_bytes_per_second = 100000;
51 ack.received_info.largest_received = 0; 51 ack.received_info.largest_received = 0;
52 sender_->OnIncomingAckFrame(ack); 52 sender_->OnIncomingAckFrame(ack);
53 QuicTime acc_advance_time; 53 QuicTime acc_advance_time;
jar (doing other things) 2012/11/29 21:51:40 nit: What does "acc_" mean or stand for?
Ian Swett 2012/12/04 21:40:19 No idea really, this test was written by Patrik.
54 for (int i = 0; i < 100; ++i) { 54 for (int i = 0; i < 100; ++i) {
55 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero()); 55 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero());
56 EXPECT_EQ(kMaxPacketSize, sender_->AvailableCongestionWindow()); 56 EXPECT_EQ(kMaxPacketSize, sender_->AvailableCongestionWindow());
57 sender_->SentPacket(i, kMaxPacketSize, false); 57 sender_->SentPacket(i, kMaxPacketSize, false);
58 QuicTime::Delta advance_time = sender_->TimeUntilSend(false); 58 QuicTime::Delta advance_time = sender_->TimeUntilSend(false);
59 clock_.AdvanceTime(advance_time); 59 clock_.AdvanceTime(advance_time);
60 acc_advance_time = acc_advance_time.Add(advance_time); 60 acc_advance_time = acc_advance_time.Add(advance_time);
61 // Ack the packet we sent. 61 // Ack the packet we sent.
62 ack.received_info.largest_received = i; 62 ack.received_info.RecordAck(i, acc_advance_time);
63 sender_->OnIncomingAckFrame(ack); 63 sender_->OnIncomingAckFrame(ack);
64 } 64 }
65 EXPECT_EQ(QuicTime::FromMilliseconds(1200), acc_advance_time); 65 EXPECT_EQ(QuicTime::FromMilliseconds(1200), acc_advance_time);
66 } 66 }
67 67
68 TEST_F(QuicSendSchedulerTest, AvailableCongestionWindow) { 68 TEST_F(QuicSendSchedulerTest, AvailableCongestionWindow) {
69 SetUpCongestionType(kFixRate); 69 SetUpCongestionType(kFixRate);
70 QuicAckFrame ack; 70 QuicAckFrame ack;
71 ack.congestion_info.type = kFixRate; 71 ack.congestion_info.type = kFixRate;
72 ack.congestion_info.fix_rate.bitrate_in_bytes_per_second = 100000; 72 ack.congestion_info.fix_rate.bitrate_in_bytes_per_second = 100000;
73 sender_->OnIncomingAckFrame(ack); 73 sender_->OnIncomingAckFrame(ack);
74 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero()); 74 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero());
75 EXPECT_EQ(kMaxPacketSize, sender_->AvailableCongestionWindow()); 75 EXPECT_EQ(kMaxPacketSize, sender_->AvailableCongestionWindow());
76 for (int i = 1; i <= 12; i++) { 76 for (int i = 1; i <= 12; i++) {
77 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero()); 77 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero());
78 sender_->SentPacket(i, 100, false); 78 sender_->SentPacket(i, 100, false);
79 EXPECT_EQ(kMaxPacketSize - (i * 100), sender_->AvailableCongestionWindow()); 79 EXPECT_EQ(kMaxPacketSize - (i * 100), sender_->AvailableCongestionWindow());
80 } 80 }
81 // Ack the packet we sent. 81 // Ack the packets we sent.
82 ack.received_info.largest_received = 12; 82 for (int i = 1; i <= 12; i++) {
jar (doing other things) 2012/11/29 21:51:40 nit: better would be named constant (probably here
Ian Swett 2012/12/04 21:40:19 Done in cleanup cl.
83 ack.received_info.RecordAck(i, QuicTime::FromMilliseconds(100));
84 }
83 sender_->OnIncomingAckFrame(ack); 85 sender_->OnIncomingAckFrame(ack);
84 EXPECT_EQ(kMaxPacketSize, sender_->AvailableCongestionWindow()); 86 EXPECT_EQ(kMaxPacketSize, sender_->AvailableCongestionWindow());
85 } 87 }
86 88
87 TEST_F(QuicSendSchedulerTest, FixedRateBandwidth) { 89 TEST_F(QuicSendSchedulerTest, FixedRateBandwidth) {
88 SetUpCongestionType(kFixRate); 90 SetUpCongestionType(kFixRate);
89 QuicAckFrame ack; 91 QuicAckFrame ack;
90 ack.congestion_info.type = kFixRate; 92 ack.congestion_info.type = kFixRate;
91 ack.congestion_info.fix_rate.bitrate_in_bytes_per_second = 100000; 93 ack.congestion_info.fix_rate.bitrate_in_bytes_per_second = 100000;
92 sender_->OnIncomingAckFrame(ack); 94 sender_->OnIncomingAckFrame(ack);
93 for (int i = 0; i < 100; ++i) { 95 for (int i = 0; i < 100; ++i) {
94 QuicTime::Delta advance_time = sender_->TimeUntilSend(false); 96 QuicTime::Delta advance_time = sender_->TimeUntilSend(false);
95 clock_.AdvanceTime(advance_time); 97 clock_.AdvanceTime(advance_time);
96 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero()); 98 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero());
97 EXPECT_EQ(kMaxPacketSize, sender_->AvailableCongestionWindow()); 99 EXPECT_EQ(kMaxPacketSize, sender_->AvailableCongestionWindow());
98 sender_->SentPacket(i, 1000, false); 100 sender_->SentPacket(i, 1000, false);
99 // Ack the packet we sent. 101 // Ack the packet we sent.
100 ack.received_info.largest_received = i; 102 ack.received_info.RecordAck(i, clock_.Now());
101 sender_->OnIncomingAckFrame(ack); 103 sender_->OnIncomingAckFrame(ack);
102 } 104 }
103 EXPECT_EQ(100000, sender_->BandwidthEstimate()); 105 EXPECT_EQ(100000, sender_->BandwidthEstimate());
104 EXPECT_EQ(101010, sender_->PeakSustainedBandwidth()); 106 EXPECT_EQ(101010, sender_->PeakSustainedBandwidth());
105 EXPECT_EQ(101010, sender_->SentBandwidth()); 107 EXPECT_EQ(101010, sender_->SentBandwidth());
106 } 108 }
107 109
108 TEST_F(QuicSendSchedulerTest, BandwidthWith3SecondGap) { 110 TEST_F(QuicSendSchedulerTest, BandwidthWith3SecondGap) {
109 SetUpCongestionType(kFixRate); 111 SetUpCongestionType(kFixRate);
110 QuicAckFrame ack; 112 QuicAckFrame ack;
111 ack.congestion_info.type = kFixRate; 113 ack.congestion_info.type = kFixRate;
112 ack.congestion_info.fix_rate.bitrate_in_bytes_per_second = 100000; 114 ack.congestion_info.fix_rate.bitrate_in_bytes_per_second = 100000;
113 sender_->OnIncomingAckFrame(ack); 115 sender_->OnIncomingAckFrame(ack);
114 for (int i = 0; i < 100; ++i) { 116 for (int i = 0; i < 100; ++i) {
115 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(10)); 117 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(10));
116 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero()); 118 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero());
117 EXPECT_EQ(kMaxPacketSize, sender_->AvailableCongestionWindow()); 119 EXPECT_EQ(kMaxPacketSize, sender_->AvailableCongestionWindow());
118 sender_->SentPacket(i, 1000, false); 120 sender_->SentPacket(i, 1000, false);
119 // Ack the packet we sent. 121 // Ack the packet we sent.
120 ack.received_info.largest_received = i; 122 ack.received_info.RecordAck(i, clock_.Now());
121 sender_->OnIncomingAckFrame(ack); 123 sender_->OnIncomingAckFrame(ack);
122 } 124 }
123 EXPECT_EQ(100000, sender_->BandwidthEstimate()); 125 EXPECT_EQ(100000, sender_->BandwidthEstimate());
124 EXPECT_EQ(100000, sender_->PeakSustainedBandwidth()); 126 EXPECT_EQ(100000, sender_->PeakSustainedBandwidth());
125 EXPECT_EQ(100000, sender_->SentBandwidth()); 127 EXPECT_EQ(100000, sender_->SentBandwidth());
126 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); 128 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000));
127 EXPECT_EQ(50000, sender_->SentBandwidth()); 129 EXPECT_EQ(50000, sender_->SentBandwidth());
128 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2100)); 130 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2100));
129 EXPECT_EQ(100000, sender_->BandwidthEstimate()); 131 EXPECT_EQ(100000, sender_->BandwidthEstimate());
130 EXPECT_EQ(100000, sender_->PeakSustainedBandwidth()); 132 EXPECT_EQ(100000, sender_->PeakSustainedBandwidth());
131 EXPECT_EQ(0, sender_->SentBandwidth()); 133 EXPECT_EQ(0, sender_->SentBandwidth());
132 for (int i = 0; i < 150; ++i) { 134 for (int i = 0; i < 150; ++i) {
133 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero()); 135 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero());
134 EXPECT_EQ(kMaxPacketSize, sender_->AvailableCongestionWindow()); 136 EXPECT_EQ(kMaxPacketSize, sender_->AvailableCongestionWindow());
135 sender_->SentPacket(i + 100, 1000, false); 137 sender_->SentPacket(i + 100, 1000, false);
136 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(10)); 138 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(10));
137 // Ack the packet we sent. 139 // Ack the packet we sent.
138 ack.received_info.largest_received = i + 100; 140 ack.received_info.RecordAck(i + 100, clock_.Now());
139 sender_->OnIncomingAckFrame(ack); 141 sender_->OnIncomingAckFrame(ack);
140 } 142 }
141 EXPECT_EQ(100000, sender_->BandwidthEstimate()); 143 EXPECT_EQ(100000, sender_->BandwidthEstimate());
142 EXPECT_EQ(100000, sender_->PeakSustainedBandwidth()); 144 EXPECT_EQ(100000, sender_->PeakSustainedBandwidth());
143 EXPECT_EQ(50000, sender_->SentBandwidth()); 145 EXPECT_EQ(50000, sender_->SentBandwidth());
144 } 146 }
145 147
146 TEST_F(QuicSendSchedulerTest, Pacing) { 148 TEST_F(QuicSendSchedulerTest, Pacing) {
147 SetUpCongestionType(kFixRate); 149 SetUpCongestionType(kFixRate);
148 QuicAckFrame ack; 150 QuicAckFrame ack;
149 ack.congestion_info.type = kFixRate; 151 ack.congestion_info.type = kFixRate;
150 // Test a high bitrate (8Mbit/s) to trigger pacing. 152 // Test a high bitrate (8Mbit/s) to trigger pacing.
151 ack.congestion_info.fix_rate.bitrate_in_bytes_per_second = 1000000; 153 ack.congestion_info.fix_rate.bitrate_in_bytes_per_second = 1000000;
152 ack.received_info.largest_received = 0; 154 ack.received_info.largest_received = 0;
153 sender_->OnIncomingAckFrame(ack); 155 sender_->OnIncomingAckFrame(ack);
154 QuicTime acc_advance_time; 156 QuicTime acc_advance_time;
155 for (int i = 0; i < 100;) { 157 for (int i = 0; i < 100;) {
156 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero()); 158 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero());
157 EXPECT_EQ(kMaxPacketSize * 2, sender_->AvailableCongestionWindow()); 159 EXPECT_EQ(kMaxPacketSize * 2, sender_->AvailableCongestionWindow());
158 sender_->SentPacket(i++, kMaxPacketSize, false); 160 sender_->SentPacket(i++, kMaxPacketSize, false);
159 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero()); 161 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero());
160 sender_->SentPacket(i++, kMaxPacketSize, false); 162 sender_->SentPacket(i++, kMaxPacketSize, false);
161 QuicTime::Delta advance_time = sender_->TimeUntilSend(false); 163 QuicTime::Delta advance_time = sender_->TimeUntilSend(false);
162 clock_.AdvanceTime(advance_time); 164 clock_.AdvanceTime(advance_time);
163 acc_advance_time = acc_advance_time.Add(advance_time); 165 acc_advance_time = acc_advance_time.Add(advance_time);
164 // Ack the packets we sent. 166 // Ack the packets we sent.
165 ack.received_info.largest_received = i - 2; 167 ack.received_info.RecordAck(i - 2, clock_.Now());
166 sender_->OnIncomingAckFrame(ack); 168 sender_->OnIncomingAckFrame(ack);
167 ack.received_info.largest_received = i - 1; 169 ack.received_info.RecordAck(i - 1, clock_.Now());
168 sender_->OnIncomingAckFrame(ack); 170 sender_->OnIncomingAckFrame(ack);
169 } 171 }
170 EXPECT_EQ(QuicTime::FromMilliseconds(120), acc_advance_time); 172 EXPECT_EQ(QuicTime::FromMilliseconds(120), acc_advance_time);
171 } 173 }
172 174
173 } // namespace testing 175 } // namespace testing
174 } // namespace net 176 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698