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

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

Issue 2404113002: Remove unused windowed RTT logic from RttStats (Closed)
Patch Set: Created 4 years, 2 months 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
« no previous file with comments | « net/quic/core/congestion_control/rtt_stats.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/core/congestion_control/rtt_stats.h" 5 #include "net/quic/core/congestion_control/rtt_stats.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(100), rtt_stats_.latest_rtt()); 82 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(100), rtt_stats_.latest_rtt());
83 EXPECT_EQ(QuicTime::Delta::FromMicroseconds(187500).ToMicroseconds(), 83 EXPECT_EQ(QuicTime::Delta::FromMicroseconds(187500).ToMicroseconds(),
84 rtt_stats_.smoothed_rtt().ToMicroseconds()); 84 rtt_stats_.smoothed_rtt().ToMicroseconds());
85 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.previous_srtt()); 85 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.previous_srtt());
86 } 86 }
87 87
88 TEST_F(RttStatsTest, MinRtt) { 88 TEST_F(RttStatsTest, MinRtt) {
89 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(200), 89 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(200),
90 QuicTime::Delta::Zero(), QuicTime::Zero()); 90 QuicTime::Delta::Zero(), QuicTime::Zero());
91 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.min_rtt()); 91 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.min_rtt());
92 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200),
93 rtt_stats_.WindowedMinRtt());
94 rtt_stats_.UpdateRtt( 92 rtt_stats_.UpdateRtt(
95 QuicTime::Delta::FromMilliseconds(10), QuicTime::Delta::Zero(), 93 QuicTime::Delta::FromMilliseconds(10), QuicTime::Delta::Zero(),
96 QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(10)); 94 QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(10));
97 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt()); 95 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
98 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.WindowedMinRtt());
99 rtt_stats_.UpdateRtt( 96 rtt_stats_.UpdateRtt(
100 QuicTime::Delta::FromMilliseconds(50), QuicTime::Delta::Zero(), 97 QuicTime::Delta::FromMilliseconds(50), QuicTime::Delta::Zero(),
101 QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(20)); 98 QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(20));
102 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt()); 99 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
103 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.WindowedMinRtt());
104 rtt_stats_.UpdateRtt( 100 rtt_stats_.UpdateRtt(
105 QuicTime::Delta::FromMilliseconds(50), QuicTime::Delta::Zero(), 101 QuicTime::Delta::FromMilliseconds(50), QuicTime::Delta::Zero(),
106 QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(30)); 102 QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(30));
107 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt()); 103 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
108 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.WindowedMinRtt());
109 rtt_stats_.UpdateRtt( 104 rtt_stats_.UpdateRtt(
110 QuicTime::Delta::FromMilliseconds(50), QuicTime::Delta::Zero(), 105 QuicTime::Delta::FromMilliseconds(50), QuicTime::Delta::Zero(),
111 QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(40)); 106 QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(40));
112 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt()); 107 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
113 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.WindowedMinRtt());
114 // Verify that ack_delay does not go into recording of min_rtt_. 108 // Verify that ack_delay does not go into recording of min_rtt_.
115 rtt_stats_.UpdateRtt( 109 rtt_stats_.UpdateRtt(
116 QuicTime::Delta::FromMilliseconds(7), 110 QuicTime::Delta::FromMilliseconds(7),
117 QuicTime::Delta::FromMilliseconds(2), 111 QuicTime::Delta::FromMilliseconds(2),
118 QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(50)); 112 QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(50));
119 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(7), rtt_stats_.min_rtt()); 113 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(7), rtt_stats_.min_rtt());
120 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(7), rtt_stats_.WindowedMinRtt());
121 }
122
123 TEST_F(RttStatsTest, WindowedMinRtt) {
124 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(10),
125 QuicTime::Delta::Zero(), QuicTime::Zero());
126 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
127 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.WindowedMinRtt());
128
129 rtt_stats_.SampleNewWindowedMinRtt(4);
130 for (int i = 0; i < 3; ++i) {
131 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(50),
132 QuicTime::Delta::Zero(), QuicTime::Zero());
133 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
134 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10),
135 rtt_stats_.WindowedMinRtt());
136 }
137 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(50),
138 QuicTime::Delta::Zero(), QuicTime::Zero());
139 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
140 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(50), rtt_stats_.WindowedMinRtt());
141 } 114 }
142 115
143 TEST_F(RttStatsTest, ExpireSmoothedMetrics) { 116 TEST_F(RttStatsTest, ExpireSmoothedMetrics) {
144 QuicTime::Delta initial_rtt = QuicTime::Delta::FromMilliseconds(10); 117 QuicTime::Delta initial_rtt = QuicTime::Delta::FromMilliseconds(10);
145 rtt_stats_.UpdateRtt(initial_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); 118 rtt_stats_.UpdateRtt(initial_rtt, QuicTime::Delta::Zero(), QuicTime::Zero());
146 EXPECT_EQ(initial_rtt, rtt_stats_.min_rtt()); 119 EXPECT_EQ(initial_rtt, rtt_stats_.min_rtt());
147 EXPECT_EQ(initial_rtt, rtt_stats_.WindowedMinRtt());
148 EXPECT_EQ(initial_rtt, rtt_stats_.smoothed_rtt()); 120 EXPECT_EQ(initial_rtt, rtt_stats_.smoothed_rtt());
149 121
150 EXPECT_EQ(0.5 * initial_rtt, rtt_stats_.mean_deviation()); 122 EXPECT_EQ(0.5 * initial_rtt, rtt_stats_.mean_deviation());
151 123
152 // Update once with a 20ms RTT. 124 // Update once with a 20ms RTT.
153 QuicTime::Delta doubled_rtt = 2 * initial_rtt; 125 QuicTime::Delta doubled_rtt = 2 * initial_rtt;
154 rtt_stats_.UpdateRtt(doubled_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); 126 rtt_stats_.UpdateRtt(doubled_rtt, QuicTime::Delta::Zero(), QuicTime::Zero());
155 EXPECT_EQ(1.125 * initial_rtt, rtt_stats_.smoothed_rtt()); 127 EXPECT_EQ(1.125 * initial_rtt, rtt_stats_.smoothed_rtt());
156 128
157 // Expire the smoothed metrics, increasing smoothed rtt and mean deviation. 129 // Expire the smoothed metrics, increasing smoothed rtt and mean deviation.
158 rtt_stats_.ExpireSmoothedMetrics(); 130 rtt_stats_.ExpireSmoothedMetrics();
159 EXPECT_EQ(doubled_rtt, rtt_stats_.smoothed_rtt()); 131 EXPECT_EQ(doubled_rtt, rtt_stats_.smoothed_rtt());
160 EXPECT_EQ(0.875 * initial_rtt, rtt_stats_.mean_deviation()); 132 EXPECT_EQ(0.875 * initial_rtt, rtt_stats_.mean_deviation());
161 133
162 // Now go back down to 5ms and expire the smoothed metrics, and ensure the 134 // Now go back down to 5ms and expire the smoothed metrics, and ensure the
163 // mean deviation increases to 15ms. 135 // mean deviation increases to 15ms.
164 QuicTime::Delta half_rtt = 0.5 * initial_rtt; 136 QuicTime::Delta half_rtt = 0.5 * initial_rtt;
165 rtt_stats_.UpdateRtt(half_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); 137 rtt_stats_.UpdateRtt(half_rtt, QuicTime::Delta::Zero(), QuicTime::Zero());
166 EXPECT_GT(doubled_rtt, rtt_stats_.smoothed_rtt()); 138 EXPECT_GT(doubled_rtt, rtt_stats_.smoothed_rtt());
167 EXPECT_LT(initial_rtt, rtt_stats_.mean_deviation()); 139 EXPECT_LT(initial_rtt, rtt_stats_.mean_deviation());
168 } 140 }
169 141
170 TEST_F(RttStatsTest, UpdateRttWithBadSendDeltas) { 142 TEST_F(RttStatsTest, UpdateRttWithBadSendDeltas) {
171 // Make sure we ignore bad RTTs. 143 // Make sure we ignore bad RTTs.
172 base::test::MockLog log; 144 base::test::MockLog log;
173 145
174 QuicTime::Delta initial_rtt = QuicTime::Delta::FromMilliseconds(10); 146 QuicTime::Delta initial_rtt = QuicTime::Delta::FromMilliseconds(10);
175 rtt_stats_.UpdateRtt(initial_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); 147 rtt_stats_.UpdateRtt(initial_rtt, QuicTime::Delta::Zero(), QuicTime::Zero());
176 EXPECT_EQ(initial_rtt, rtt_stats_.min_rtt()); 148 EXPECT_EQ(initial_rtt, rtt_stats_.min_rtt());
177 EXPECT_EQ(initial_rtt, rtt_stats_.WindowedMinRtt());
178 EXPECT_EQ(initial_rtt, rtt_stats_.smoothed_rtt()); 149 EXPECT_EQ(initial_rtt, rtt_stats_.smoothed_rtt());
179 150
180 vector<QuicTime::Delta> bad_send_deltas; 151 vector<QuicTime::Delta> bad_send_deltas;
181 bad_send_deltas.push_back(QuicTime::Delta::Zero()); 152 bad_send_deltas.push_back(QuicTime::Delta::Zero());
182 bad_send_deltas.push_back(QuicTime::Delta::Infinite()); 153 bad_send_deltas.push_back(QuicTime::Delta::Infinite());
183 bad_send_deltas.push_back(QuicTime::Delta::FromMicroseconds(-1000)); 154 bad_send_deltas.push_back(QuicTime::Delta::FromMicroseconds(-1000));
184 log.StartCapturingLogs(); 155 log.StartCapturingLogs();
185 156
186 for (QuicTime::Delta bad_send_delta : bad_send_deltas) { 157 for (QuicTime::Delta bad_send_delta : bad_send_deltas) {
187 SCOPED_TRACE(Message() << "bad_send_delta = " 158 SCOPED_TRACE(Message() << "bad_send_delta = "
188 << bad_send_delta.ToMicroseconds()); 159 << bad_send_delta.ToMicroseconds());
189 EXPECT_CALL(log, Log(LOG_WARNING, _, _, _, HasSubstr("Ignoring"))); 160 EXPECT_CALL(log, Log(LOG_WARNING, _, _, _, HasSubstr("Ignoring")));
190 rtt_stats_.UpdateRtt(bad_send_delta, QuicTime::Delta::Zero(), 161 rtt_stats_.UpdateRtt(bad_send_delta, QuicTime::Delta::Zero(),
191 QuicTime::Zero()); 162 QuicTime::Zero());
192 EXPECT_EQ(initial_rtt, rtt_stats_.min_rtt()); 163 EXPECT_EQ(initial_rtt, rtt_stats_.min_rtt());
193 EXPECT_EQ(initial_rtt, rtt_stats_.WindowedMinRtt());
194 EXPECT_EQ(initial_rtt, rtt_stats_.smoothed_rtt()); 164 EXPECT_EQ(initial_rtt, rtt_stats_.smoothed_rtt());
195 } 165 }
196 } 166 }
197 167
198 TEST_F(RttStatsTest, ResetAfterConnectionMigrations) { 168 TEST_F(RttStatsTest, ResetAfterConnectionMigrations) {
199 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(300), 169 rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(300),
200 QuicTime::Delta::FromMilliseconds(100), 170 QuicTime::Delta::FromMilliseconds(100),
201 QuicTime::Zero()); 171 QuicTime::Zero());
202 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.latest_rtt()); 172 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.latest_rtt());
203 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.smoothed_rtt()); 173 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.smoothed_rtt());
204 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(300), rtt_stats_.min_rtt()); 174 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(300), rtt_stats_.min_rtt());
205 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(300),
206 rtt_stats_.WindowedMinRtt());
207 175
208 // Reset rtt stats on connection migrations. 176 // Reset rtt stats on connection migrations.
209 rtt_stats_.OnConnectionMigration(); 177 rtt_stats_.OnConnectionMigration();
210 EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.latest_rtt()); 178 EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.latest_rtt());
211 EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.smoothed_rtt()); 179 EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.smoothed_rtt());
212 EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.min_rtt()); 180 EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.min_rtt());
213 EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.WindowedMinRtt());
214 } 181 }
215 182
216 } // namespace test 183 } // namespace test
217 } // namespace net 184 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/congestion_control/rtt_stats.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698