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

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

Issue 706203003: Update from https://crrev.com/303153 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "net/quic/congestion_control/rtt_stats.h" 5 #include "net/quic/congestion_control/rtt_stats.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "net/test/scoped_mock_log.h" 10 #include "net/test/scoped_mock_log.h"
(...skipping 19 matching lines...) Expand all
30 } 30 }
31 }; 31 };
32 32
33 class RttStatsTest : public ::testing::Test { 33 class RttStatsTest : public ::testing::Test {
34 protected: 34 protected:
35 RttStats rtt_stats_; 35 RttStats rtt_stats_;
36 }; 36 };
37 37
38 TEST_F(RttStatsTest, DefaultsBeforeUpdate) { 38 TEST_F(RttStatsTest, DefaultsBeforeUpdate) {
39 EXPECT_LT(0u, rtt_stats_.initial_rtt_us()); 39 EXPECT_LT(0u, rtt_stats_.initial_rtt_us());
40 EXPECT_EQ(QuicTime::Delta::FromMicroseconds(rtt_stats_.initial_rtt_us()), 40 EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.min_rtt());
41 rtt_stats_.MinRtt()); 41 EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.smoothed_rtt());
42 EXPECT_EQ(QuicTime::Delta::FromMicroseconds(rtt_stats_.initial_rtt_us()),
43 rtt_stats_.SmoothedRtt());
44 } 42 }
45 43
46 TEST_F(RttStatsTest, SmoothedRtt) { 44 TEST_F(RttStatsTest, SmoothedRtt) {
47 // Verify that ack_delay is corrected for in Smoothed RTT. 45 // Verify that ack_delay is corrected for in Smoothed RTT.
48 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(300), 46 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(300),
49 QuicTime::Delta::FromMilliseconds(100), 47 QuicTime::Delta::FromMilliseconds(100),
50 QuicTime::Zero()); 48 QuicTime::Zero());
51 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.latest_rtt()); 49 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.latest_rtt());
52 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.SmoothedRtt()); 50 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.smoothed_rtt());
53 // Verify that effective RTT of zero does not change Smoothed RTT. 51 // Verify that effective RTT of zero does not change Smoothed RTT.
54 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(200), 52 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(200),
55 QuicTime::Delta::FromMilliseconds(200), 53 QuicTime::Delta::FromMilliseconds(200),
56 QuicTime::Zero()); 54 QuicTime::Zero());
57 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.latest_rtt()); 55 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.latest_rtt());
58 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.SmoothedRtt()); 56 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.smoothed_rtt());
59 // Verify that large erroneous ack_delay does not change Smoothed RTT. 57 // Verify that large erroneous ack_delay does not change Smoothed RTT.
60 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(200), 58 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(200),
61 QuicTime::Delta::FromMilliseconds(300), 59 QuicTime::Delta::FromMilliseconds(300),
62 QuicTime::Zero()); 60 QuicTime::Zero());
63 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.latest_rtt()); 61 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.latest_rtt());
64 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.SmoothedRtt()); 62 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.smoothed_rtt());
65 } 63 }
66 64
67 TEST_F(RttStatsTest, MinRtt) { 65 TEST_F(RttStatsTest, MinRtt) {
68 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(200), 66 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(200),
69 QuicTime::Delta::Zero(), 67 QuicTime::Delta::Zero(),
70 QuicTime::Zero()); 68 QuicTime::Zero());
71 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.MinRtt()); 69 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.min_rtt());
72 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), 70 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200),
73 rtt_stats_.recent_min_rtt()); 71 rtt_stats_.recent_min_rtt());
74 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(10), 72 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(10),
75 QuicTime::Delta::Zero(), 73 QuicTime::Delta::Zero(),
76 QuicTime::Zero().Add( 74 QuicTime::Zero().Add(
77 QuicTime::Delta::FromMilliseconds(10))); 75 QuicTime::Delta::FromMilliseconds(10)));
78 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.MinRtt()); 76 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
79 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.recent_min_rtt()); 77 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.recent_min_rtt());
80 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(50), 78 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(50),
81 QuicTime::Delta::Zero(), 79 QuicTime::Delta::Zero(),
82 QuicTime::Zero().Add( 80 QuicTime::Zero().Add(
83 QuicTime::Delta::FromMilliseconds(20))); 81 QuicTime::Delta::FromMilliseconds(20)));
84 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.MinRtt()); 82 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
85 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.recent_min_rtt()); 83 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.recent_min_rtt());
86 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(50), 84 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(50),
87 QuicTime::Delta::Zero(), 85 QuicTime::Delta::Zero(),
88 QuicTime::Zero().Add( 86 QuicTime::Zero().Add(
89 QuicTime::Delta::FromMilliseconds(30))); 87 QuicTime::Delta::FromMilliseconds(30)));
90 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.MinRtt()); 88 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
91 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.recent_min_rtt()); 89 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.recent_min_rtt());
92 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(50), 90 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(50),
93 QuicTime::Delta::Zero(), 91 QuicTime::Delta::Zero(),
94 QuicTime::Zero().Add( 92 QuicTime::Zero().Add(
95 QuicTime::Delta::FromMilliseconds(40))); 93 QuicTime::Delta::FromMilliseconds(40)));
96 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.MinRtt()); 94 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
97 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.recent_min_rtt()); 95 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.recent_min_rtt());
98 // Verify that ack_delay does not go into recording of min_rtt_. 96 // Verify that ack_delay does not go into recording of min_rtt_.
99 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(7), 97 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(7),
100 QuicTime::Delta::FromMilliseconds(2), 98 QuicTime::Delta::FromMilliseconds(2),
101 QuicTime::Zero().Add( 99 QuicTime::Zero().Add(
102 QuicTime::Delta::FromMilliseconds(50))); 100 QuicTime::Delta::FromMilliseconds(50)));
103 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(7), rtt_stats_.MinRtt()); 101 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(7), rtt_stats_.min_rtt());
104 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(7), rtt_stats_.recent_min_rtt()); 102 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(7), rtt_stats_.recent_min_rtt());
105 } 103 }
106 104
107 TEST_F(RttStatsTest, RecentMinRtt) { 105 TEST_F(RttStatsTest, RecentMinRtt) {
108 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(10), 106 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(10),
109 QuicTime::Delta::Zero(), 107 QuicTime::Delta::Zero(),
110 QuicTime::Zero()); 108 QuicTime::Zero());
111 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.MinRtt()); 109 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
112 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.recent_min_rtt()); 110 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.recent_min_rtt());
113 111
114 rtt_stats_.SampleNewRecentMinRtt(4); 112 rtt_stats_.SampleNewRecentMinRtt(4);
115 for (int i = 0; i < 3; ++i) { 113 for (int i = 0; i < 3; ++i) {
116 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(50), 114 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(50),
117 QuicTime::Delta::Zero(), 115 QuicTime::Delta::Zero(),
118 QuicTime::Zero()); 116 QuicTime::Zero());
119 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.MinRtt()); 117 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
120 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), 118 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10),
121 rtt_stats_.recent_min_rtt()); 119 rtt_stats_.recent_min_rtt());
122 } 120 }
123 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(50), 121 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(50),
124 QuicTime::Delta::Zero(), 122 QuicTime::Delta::Zero(),
125 QuicTime::Zero()); 123 QuicTime::Zero());
126 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.MinRtt()); 124 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
127 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(50), rtt_stats_.recent_min_rtt()); 125 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(50), rtt_stats_.recent_min_rtt());
128 } 126 }
129 127
130 TEST_F(RttStatsTest, WindowedRecentMinRtt) { 128 TEST_F(RttStatsTest, WindowedRecentMinRtt) {
131 // Set the window to 99ms, so 25ms is more than a quarter rtt. 129 // Set the window to 99ms, so 25ms is more than a quarter rtt.
132 rtt_stats_.set_recent_min_rtt_window(QuicTime::Delta::FromMilliseconds(99)); 130 rtt_stats_.set_recent_min_rtt_window(QuicTime::Delta::FromMilliseconds(99));
133 131
134 QuicTime now = QuicTime::Zero(); 132 QuicTime now = QuicTime::Zero();
135 QuicTime::Delta rtt_sample = QuicTime::Delta::FromMilliseconds(10); 133 QuicTime::Delta rtt_sample = QuicTime::Delta::FromMilliseconds(10);
136 rtt_stats_.UpdateRtt(rtt_sample, QuicTime::Delta::Zero(), now); 134 rtt_stats_.UpdateRtt(rtt_sample, QuicTime::Delta::Zero(), now);
137 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.MinRtt()); 135 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
138 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.recent_min_rtt()); 136 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.recent_min_rtt());
139 137
140 // Gradually increase the rtt samples and ensure the recent_min_rtt starts 138 // Gradually increase the rtt samples and ensure the recent_min_rtt starts
141 // rising. 139 // rising.
142 for (int i = 0; i < 8; ++i) { 140 for (int i = 0; i < 8; ++i) {
143 now = now.Add(QuicTime::Delta::FromMilliseconds(25)); 141 now = now.Add(QuicTime::Delta::FromMilliseconds(25));
144 rtt_sample = rtt_sample.Add(QuicTime::Delta::FromMilliseconds(10)); 142 rtt_sample = rtt_sample.Add(QuicTime::Delta::FromMilliseconds(10));
145 rtt_stats_.UpdateRtt(rtt_sample, QuicTime::Delta::Zero(), now); 143 rtt_stats_.UpdateRtt(rtt_sample, QuicTime::Delta::Zero(), now);
146 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.MinRtt()); 144 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
147 EXPECT_EQ(rtt_sample, RttStatsPeer::GetQuarterWindowRtt(&rtt_stats_)); 145 EXPECT_EQ(rtt_sample, RttStatsPeer::GetQuarterWindowRtt(&rtt_stats_));
148 EXPECT_EQ(rtt_sample.Subtract(QuicTime::Delta::FromMilliseconds(10)), 146 EXPECT_EQ(rtt_sample.Subtract(QuicTime::Delta::FromMilliseconds(10)),
149 RttStatsPeer::GetHalfWindowRtt(&rtt_stats_)); 147 RttStatsPeer::GetHalfWindowRtt(&rtt_stats_));
150 if (i < 3) { 148 if (i < 3) {
151 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), 149 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10),
152 rtt_stats_.recent_min_rtt()); 150 rtt_stats_.recent_min_rtt());
153 } else if (i < 5) { 151 } else if (i < 5) {
154 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(30), 152 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(30),
155 rtt_stats_.recent_min_rtt()); 153 rtt_stats_.recent_min_rtt());
156 } else if (i < 7) { 154 } else if (i < 7) {
157 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(50), 155 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(50),
158 rtt_stats_.recent_min_rtt()); 156 rtt_stats_.recent_min_rtt());
159 } else { 157 } else {
160 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(70), 158 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(70),
161 rtt_stats_.recent_min_rtt()); 159 rtt_stats_.recent_min_rtt());
162 } 160 }
163 } 161 }
164 162
165 // A new quarter rtt low sets that, but nothing else. 163 // A new quarter rtt low sets that, but nothing else.
166 rtt_sample = rtt_sample.Subtract(QuicTime::Delta::FromMilliseconds(5)); 164 rtt_sample = rtt_sample.Subtract(QuicTime::Delta::FromMilliseconds(5));
167 rtt_stats_.UpdateRtt(rtt_sample, QuicTime::Delta::Zero(), now); 165 rtt_stats_.UpdateRtt(rtt_sample, QuicTime::Delta::Zero(), now);
168 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.MinRtt()); 166 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
169 EXPECT_EQ(rtt_sample, RttStatsPeer::GetQuarterWindowRtt(&rtt_stats_)); 167 EXPECT_EQ(rtt_sample, RttStatsPeer::GetQuarterWindowRtt(&rtt_stats_));
170 EXPECT_EQ(rtt_sample.Subtract(QuicTime::Delta::FromMilliseconds(5)), 168 EXPECT_EQ(rtt_sample.Subtract(QuicTime::Delta::FromMilliseconds(5)),
171 RttStatsPeer::GetHalfWindowRtt(&rtt_stats_)); 169 RttStatsPeer::GetHalfWindowRtt(&rtt_stats_));
172 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(70), 170 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(70),
173 rtt_stats_.recent_min_rtt()); 171 rtt_stats_.recent_min_rtt());
174 172
175 // A new half rtt low sets that and the quarter rtt low. 173 // A new half rtt low sets that and the quarter rtt low.
176 rtt_sample = rtt_sample.Subtract(QuicTime::Delta::FromMilliseconds(15)); 174 rtt_sample = rtt_sample.Subtract(QuicTime::Delta::FromMilliseconds(15));
177 rtt_stats_.UpdateRtt(rtt_sample, QuicTime::Delta::Zero(), now); 175 rtt_stats_.UpdateRtt(rtt_sample, QuicTime::Delta::Zero(), now);
178 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.MinRtt()); 176 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
179 EXPECT_EQ(rtt_sample, RttStatsPeer::GetQuarterWindowRtt(&rtt_stats_)); 177 EXPECT_EQ(rtt_sample, RttStatsPeer::GetQuarterWindowRtt(&rtt_stats_));
180 EXPECT_EQ(rtt_sample, RttStatsPeer::GetHalfWindowRtt(&rtt_stats_)); 178 EXPECT_EQ(rtt_sample, RttStatsPeer::GetHalfWindowRtt(&rtt_stats_));
181 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(70), 179 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(70),
182 rtt_stats_.recent_min_rtt()); 180 rtt_stats_.recent_min_rtt());
183 181
184 // A new full window loss sets the recent_min_rtt, but not min_rtt. 182 // A new full window loss sets the recent_min_rtt, but not min_rtt.
185 rtt_sample = QuicTime::Delta::FromMilliseconds(65); 183 rtt_sample = QuicTime::Delta::FromMilliseconds(65);
186 rtt_stats_.UpdateRtt(rtt_sample, QuicTime::Delta::Zero(), now); 184 rtt_stats_.UpdateRtt(rtt_sample, QuicTime::Delta::Zero(), now);
187 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.MinRtt()); 185 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
188 EXPECT_EQ(rtt_sample, RttStatsPeer::GetQuarterWindowRtt(&rtt_stats_)); 186 EXPECT_EQ(rtt_sample, RttStatsPeer::GetQuarterWindowRtt(&rtt_stats_));
189 EXPECT_EQ(rtt_sample, RttStatsPeer::GetHalfWindowRtt(&rtt_stats_)); 187 EXPECT_EQ(rtt_sample, RttStatsPeer::GetHalfWindowRtt(&rtt_stats_));
190 EXPECT_EQ(rtt_sample, rtt_stats_.recent_min_rtt()); 188 EXPECT_EQ(rtt_sample, rtt_stats_.recent_min_rtt());
191 189
192 // A new all time low sets both the min_rtt and the recent_min_rtt. 190 // A new all time low sets both the min_rtt and the recent_min_rtt.
193 rtt_sample = QuicTime::Delta::FromMilliseconds(5); 191 rtt_sample = QuicTime::Delta::FromMilliseconds(5);
194 rtt_stats_.UpdateRtt(rtt_sample, QuicTime::Delta::Zero(), now); 192 rtt_stats_.UpdateRtt(rtt_sample, QuicTime::Delta::Zero(), now);
195 193
196 EXPECT_EQ(rtt_sample, rtt_stats_.MinRtt()); 194 EXPECT_EQ(rtt_sample, rtt_stats_.min_rtt());
197 EXPECT_EQ(rtt_sample, RttStatsPeer::GetQuarterWindowRtt(&rtt_stats_)); 195 EXPECT_EQ(rtt_sample, RttStatsPeer::GetQuarterWindowRtt(&rtt_stats_));
198 EXPECT_EQ(rtt_sample, RttStatsPeer::GetHalfWindowRtt(&rtt_stats_)); 196 EXPECT_EQ(rtt_sample, RttStatsPeer::GetHalfWindowRtt(&rtt_stats_));
199 EXPECT_EQ(rtt_sample, rtt_stats_.recent_min_rtt()); 197 EXPECT_EQ(rtt_sample, rtt_stats_.recent_min_rtt());
200 } 198 }
201 199
202 TEST_F(RttStatsTest, ExpireSmoothedMetrics) { 200 TEST_F(RttStatsTest, ExpireSmoothedMetrics) {
203 QuicTime::Delta initial_rtt = QuicTime::Delta::FromMilliseconds(10); 201 QuicTime::Delta initial_rtt = QuicTime::Delta::FromMilliseconds(10);
204 rtt_stats_.UpdateRtt(initial_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); 202 rtt_stats_.UpdateRtt(initial_rtt, QuicTime::Delta::Zero(), QuicTime::Zero());
205 EXPECT_EQ(initial_rtt, rtt_stats_.MinRtt()); 203 EXPECT_EQ(initial_rtt, rtt_stats_.min_rtt());
206 EXPECT_EQ(initial_rtt, rtt_stats_.recent_min_rtt()); 204 EXPECT_EQ(initial_rtt, rtt_stats_.recent_min_rtt());
207 EXPECT_EQ(initial_rtt, rtt_stats_.SmoothedRtt()); 205 EXPECT_EQ(initial_rtt, rtt_stats_.smoothed_rtt());
208 206
209 EXPECT_EQ(initial_rtt.Multiply(0.5), rtt_stats_.mean_deviation()); 207 EXPECT_EQ(initial_rtt.Multiply(0.5), rtt_stats_.mean_deviation());
210 208
211 // Update once with a 20ms RTT. 209 // Update once with a 20ms RTT.
212 QuicTime::Delta doubled_rtt = initial_rtt.Multiply(2); 210 QuicTime::Delta doubled_rtt = initial_rtt.Multiply(2);
213 rtt_stats_.UpdateRtt(doubled_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); 211 rtt_stats_.UpdateRtt(doubled_rtt, QuicTime::Delta::Zero(), QuicTime::Zero());
214 EXPECT_EQ(initial_rtt.Multiply(1.125), rtt_stats_.SmoothedRtt()); 212 EXPECT_EQ(initial_rtt.Multiply(1.125), rtt_stats_.smoothed_rtt());
215 213
216 // Expire the smoothed metrics, increasing smoothed rtt and mean deviation. 214 // Expire the smoothed metrics, increasing smoothed rtt and mean deviation.
217 rtt_stats_.ExpireSmoothedMetrics(); 215 rtt_stats_.ExpireSmoothedMetrics();
218 EXPECT_EQ(doubled_rtt, rtt_stats_.SmoothedRtt()); 216 EXPECT_EQ(doubled_rtt, rtt_stats_.smoothed_rtt());
219 EXPECT_EQ(initial_rtt.Multiply(0.875), rtt_stats_.mean_deviation()); 217 EXPECT_EQ(initial_rtt.Multiply(0.875), rtt_stats_.mean_deviation());
220 218
221 // Now go back down to 5ms and expire the smoothed metrics, and ensure the 219 // Now go back down to 5ms and expire the smoothed metrics, and ensure the
222 // mean deviation increases to 15ms. 220 // mean deviation increases to 15ms.
223 QuicTime::Delta half_rtt = initial_rtt.Multiply(0.5); 221 QuicTime::Delta half_rtt = initial_rtt.Multiply(0.5);
224 rtt_stats_.UpdateRtt(half_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); 222 rtt_stats_.UpdateRtt(half_rtt, QuicTime::Delta::Zero(), QuicTime::Zero());
225 EXPECT_GT(doubled_rtt, rtt_stats_.SmoothedRtt()); 223 EXPECT_GT(doubled_rtt, rtt_stats_.smoothed_rtt());
226 EXPECT_LT(initial_rtt, rtt_stats_.mean_deviation()); 224 EXPECT_LT(initial_rtt, rtt_stats_.mean_deviation());
227 } 225 }
228 226
229 TEST_F(RttStatsTest, UpdateRttWithBadSendDeltas) { 227 TEST_F(RttStatsTest, UpdateRttWithBadSendDeltas) {
230 // Make sure we ignore bad RTTs. 228 // Make sure we ignore bad RTTs.
231 ScopedMockLog log; 229 ScopedMockLog log;
232 230
233 QuicTime::Delta initial_rtt = QuicTime::Delta::FromMilliseconds(10); 231 QuicTime::Delta initial_rtt = QuicTime::Delta::FromMilliseconds(10);
234 rtt_stats_.UpdateRtt(initial_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); 232 rtt_stats_.UpdateRtt(initial_rtt, QuicTime::Delta::Zero(), QuicTime::Zero());
235 EXPECT_EQ(initial_rtt, rtt_stats_.MinRtt()); 233 EXPECT_EQ(initial_rtt, rtt_stats_.min_rtt());
236 EXPECT_EQ(initial_rtt, rtt_stats_.recent_min_rtt()); 234 EXPECT_EQ(initial_rtt, rtt_stats_.recent_min_rtt());
237 EXPECT_EQ(initial_rtt, rtt_stats_.SmoothedRtt()); 235 EXPECT_EQ(initial_rtt, rtt_stats_.smoothed_rtt());
238 236
239 vector<QuicTime::Delta> bad_send_deltas; 237 vector<QuicTime::Delta> bad_send_deltas;
240 bad_send_deltas.push_back(QuicTime::Delta::Zero()); 238 bad_send_deltas.push_back(QuicTime::Delta::Zero());
241 bad_send_deltas.push_back(QuicTime::Delta::Infinite()); 239 bad_send_deltas.push_back(QuicTime::Delta::Infinite());
242 bad_send_deltas.push_back(QuicTime::Delta::FromMicroseconds(-1000)); 240 bad_send_deltas.push_back(QuicTime::Delta::FromMicroseconds(-1000));
243 log.StartCapturingLogs(); 241 log.StartCapturingLogs();
244 242
245 for (QuicTime::Delta bad_send_delta : bad_send_deltas) { 243 for (QuicTime::Delta bad_send_delta : bad_send_deltas) {
246 SCOPED_TRACE(Message() << "bad_send_delta = " 244 SCOPED_TRACE(Message() << "bad_send_delta = "
247 << bad_send_delta.ToMicroseconds()); 245 << bad_send_delta.ToMicroseconds());
248 EXPECT_CALL(log, Log(LOG_WARNING, _, _, _, HasSubstr("Ignoring"))); 246 EXPECT_CALL(log, Log(LOG_WARNING, _, _, _, HasSubstr("Ignoring")));
249 rtt_stats_.UpdateRtt(bad_send_delta, 247 rtt_stats_.UpdateRtt(bad_send_delta,
250 QuicTime::Delta::Zero(), 248 QuicTime::Delta::Zero(),
251 QuicTime::Zero()); 249 QuicTime::Zero());
252 EXPECT_EQ(initial_rtt, rtt_stats_.MinRtt()); 250 EXPECT_EQ(initial_rtt, rtt_stats_.min_rtt());
253 EXPECT_EQ(initial_rtt, rtt_stats_.recent_min_rtt()); 251 EXPECT_EQ(initial_rtt, rtt_stats_.recent_min_rtt());
254 EXPECT_EQ(initial_rtt, rtt_stats_.SmoothedRtt()); 252 EXPECT_EQ(initial_rtt, rtt_stats_.smoothed_rtt());
255 } 253 }
256 } 254 }
257 255
258 } // namespace test 256 } // namespace test
259 } // namespace net 257 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/congestion_control/rtt_stats.cc ('k') | net/quic/congestion_control/tcp_cubic_sender.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698