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

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

Issue 11439003: Revert 171096 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years 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
« no previous file with comments | « net/quic/congestion_control/quic_send_scheduler.cc ('k') | net/quic/quic_connection.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 sender_->OnIncomingAckFrame(ack); 52 sender_->OnIncomingAckFrame(ack);
53 QuicTime acc_advance_time; 53 QuicTime acc_advance_time;
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.RecordAck(i, acc_advance_time); 62 ack.received_info.largest_received = i;
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 packets we sent. 81 // Ack the packet we sent.
82 for (int i = 1; i <= 12; i++) { 82 ack.received_info.largest_received = 12;
83 ack.received_info.RecordAck(i, QuicTime::FromMilliseconds(100));
84 }
85 sender_->OnIncomingAckFrame(ack); 83 sender_->OnIncomingAckFrame(ack);
86 EXPECT_EQ(kMaxPacketSize, sender_->AvailableCongestionWindow()); 84 EXPECT_EQ(kMaxPacketSize, sender_->AvailableCongestionWindow());
87 } 85 }
88 86
89 TEST_F(QuicSendSchedulerTest, FixedRateBandwidth) { 87 TEST_F(QuicSendSchedulerTest, FixedRateBandwidth) {
90 SetUpCongestionType(kFixRate); 88 SetUpCongestionType(kFixRate);
91 QuicAckFrame ack; 89 QuicAckFrame ack;
92 ack.congestion_info.type = kFixRate; 90 ack.congestion_info.type = kFixRate;
93 ack.congestion_info.fix_rate.bitrate_in_bytes_per_second = 100000; 91 ack.congestion_info.fix_rate.bitrate_in_bytes_per_second = 100000;
94 sender_->OnIncomingAckFrame(ack); 92 sender_->OnIncomingAckFrame(ack);
95 for (int i = 0; i < 100; ++i) { 93 for (int i = 0; i < 100; ++i) {
96 QuicTime::Delta advance_time = sender_->TimeUntilSend(false); 94 QuicTime::Delta advance_time = sender_->TimeUntilSend(false);
97 clock_.AdvanceTime(advance_time); 95 clock_.AdvanceTime(advance_time);
98 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero()); 96 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero());
99 EXPECT_EQ(kMaxPacketSize, sender_->AvailableCongestionWindow()); 97 EXPECT_EQ(kMaxPacketSize, sender_->AvailableCongestionWindow());
100 sender_->SentPacket(i, 1000, false); 98 sender_->SentPacket(i, 1000, false);
101 // Ack the packet we sent. 99 // Ack the packet we sent.
102 ack.received_info.RecordAck(i, clock_.Now()); 100 ack.received_info.largest_received = i;
103 sender_->OnIncomingAckFrame(ack); 101 sender_->OnIncomingAckFrame(ack);
104 } 102 }
105 EXPECT_EQ(100000, sender_->BandwidthEstimate()); 103 EXPECT_EQ(100000, sender_->BandwidthEstimate());
106 EXPECT_EQ(101010, sender_->PeakSustainedBandwidth()); 104 EXPECT_EQ(101010, sender_->PeakSustainedBandwidth());
107 EXPECT_EQ(101010, sender_->SentBandwidth()); 105 EXPECT_EQ(101010, sender_->SentBandwidth());
108 } 106 }
109 107
110 TEST_F(QuicSendSchedulerTest, BandwidthWith3SecondGap) { 108 TEST_F(QuicSendSchedulerTest, BandwidthWith3SecondGap) {
111 SetUpCongestionType(kFixRate); 109 SetUpCongestionType(kFixRate);
112 QuicAckFrame ack; 110 QuicAckFrame ack;
113 ack.congestion_info.type = kFixRate; 111 ack.congestion_info.type = kFixRate;
114 ack.congestion_info.fix_rate.bitrate_in_bytes_per_second = 100000; 112 ack.congestion_info.fix_rate.bitrate_in_bytes_per_second = 100000;
115 sender_->OnIncomingAckFrame(ack); 113 sender_->OnIncomingAckFrame(ack);
116 for (int i = 0; i < 100; ++i) { 114 for (int i = 0; i < 100; ++i) {
117 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(10)); 115 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(10));
118 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero()); 116 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero());
119 EXPECT_EQ(kMaxPacketSize, sender_->AvailableCongestionWindow()); 117 EXPECT_EQ(kMaxPacketSize, sender_->AvailableCongestionWindow());
120 sender_->SentPacket(i, 1000, false); 118 sender_->SentPacket(i, 1000, false);
121 // Ack the packet we sent. 119 // Ack the packet we sent.
122 ack.received_info.RecordAck(i, clock_.Now()); 120 ack.received_info.largest_received = i;
123 sender_->OnIncomingAckFrame(ack); 121 sender_->OnIncomingAckFrame(ack);
124 } 122 }
125 EXPECT_EQ(100000, sender_->BandwidthEstimate()); 123 EXPECT_EQ(100000, sender_->BandwidthEstimate());
126 EXPECT_EQ(100000, sender_->PeakSustainedBandwidth()); 124 EXPECT_EQ(100000, sender_->PeakSustainedBandwidth());
127 EXPECT_EQ(100000, sender_->SentBandwidth()); 125 EXPECT_EQ(100000, sender_->SentBandwidth());
128 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); 126 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000));
129 EXPECT_EQ(50000, sender_->SentBandwidth()); 127 EXPECT_EQ(50000, sender_->SentBandwidth());
130 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2100)); 128 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2100));
131 EXPECT_EQ(100000, sender_->BandwidthEstimate()); 129 EXPECT_EQ(100000, sender_->BandwidthEstimate());
132 EXPECT_EQ(100000, sender_->PeakSustainedBandwidth()); 130 EXPECT_EQ(100000, sender_->PeakSustainedBandwidth());
133 EXPECT_EQ(0, sender_->SentBandwidth()); 131 EXPECT_EQ(0, sender_->SentBandwidth());
134 for (int i = 0; i < 150; ++i) { 132 for (int i = 0; i < 150; ++i) {
135 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero()); 133 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero());
136 EXPECT_EQ(kMaxPacketSize, sender_->AvailableCongestionWindow()); 134 EXPECT_EQ(kMaxPacketSize, sender_->AvailableCongestionWindow());
137 sender_->SentPacket(i + 100, 1000, false); 135 sender_->SentPacket(i + 100, 1000, false);
138 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(10)); 136 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(10));
139 // Ack the packet we sent. 137 // Ack the packet we sent.
140 ack.received_info.RecordAck(i + 100, clock_.Now()); 138 ack.received_info.largest_received = i + 100;
141 sender_->OnIncomingAckFrame(ack); 139 sender_->OnIncomingAckFrame(ack);
142 } 140 }
143 EXPECT_EQ(100000, sender_->BandwidthEstimate()); 141 EXPECT_EQ(100000, sender_->BandwidthEstimate());
144 EXPECT_EQ(100000, sender_->PeakSustainedBandwidth()); 142 EXPECT_EQ(100000, sender_->PeakSustainedBandwidth());
145 EXPECT_EQ(50000, sender_->SentBandwidth()); 143 EXPECT_EQ(50000, sender_->SentBandwidth());
146 } 144 }
147 145
148 TEST_F(QuicSendSchedulerTest, Pacing) { 146 TEST_F(QuicSendSchedulerTest, Pacing) {
149 SetUpCongestionType(kFixRate); 147 SetUpCongestionType(kFixRate);
150 QuicAckFrame ack; 148 QuicAckFrame ack;
151 ack.congestion_info.type = kFixRate; 149 ack.congestion_info.type = kFixRate;
152 // Test a high bitrate (8Mbit/s) to trigger pacing. 150 // Test a high bitrate (8Mbit/s) to trigger pacing.
153 ack.congestion_info.fix_rate.bitrate_in_bytes_per_second = 1000000; 151 ack.congestion_info.fix_rate.bitrate_in_bytes_per_second = 1000000;
154 ack.received_info.largest_received = 0; 152 ack.received_info.largest_received = 0;
155 sender_->OnIncomingAckFrame(ack); 153 sender_->OnIncomingAckFrame(ack);
156 QuicTime acc_advance_time; 154 QuicTime acc_advance_time;
157 for (int i = 0; i < 100;) { 155 for (int i = 0; i < 100;) {
158 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero()); 156 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero());
159 EXPECT_EQ(kMaxPacketSize * 2, sender_->AvailableCongestionWindow()); 157 EXPECT_EQ(kMaxPacketSize * 2, sender_->AvailableCongestionWindow());
160 sender_->SentPacket(i++, kMaxPacketSize, false); 158 sender_->SentPacket(i++, kMaxPacketSize, false);
161 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero()); 159 EXPECT_TRUE(sender_->TimeUntilSend(false).IsZero());
162 sender_->SentPacket(i++, kMaxPacketSize, false); 160 sender_->SentPacket(i++, kMaxPacketSize, false);
163 QuicTime::Delta advance_time = sender_->TimeUntilSend(false); 161 QuicTime::Delta advance_time = sender_->TimeUntilSend(false);
164 clock_.AdvanceTime(advance_time); 162 clock_.AdvanceTime(advance_time);
165 acc_advance_time = acc_advance_time.Add(advance_time); 163 acc_advance_time = acc_advance_time.Add(advance_time);
166 // Ack the packets we sent. 164 // Ack the packets we sent.
167 ack.received_info.RecordAck(i - 2, clock_.Now()); 165 ack.received_info.largest_received = i - 2;
168 sender_->OnIncomingAckFrame(ack); 166 sender_->OnIncomingAckFrame(ack);
169 ack.received_info.RecordAck(i - 1, clock_.Now()); 167 ack.received_info.largest_received = i - 1;
170 sender_->OnIncomingAckFrame(ack); 168 sender_->OnIncomingAckFrame(ack);
171 } 169 }
172 EXPECT_EQ(QuicTime::FromMilliseconds(120), acc_advance_time); 170 EXPECT_EQ(QuicTime::FromMilliseconds(120), acc_advance_time);
173 } 171 }
174 172
175 } // namespace testing 173 } // namespace testing
176 } // namespace net 174 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/congestion_control/quic_send_scheduler.cc ('k') | net/quic/quic_connection.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698