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

Side by Side Diff: webrtc/modules/congestion_controller/probe_bitrate_estimator_unittest.cc

Issue 2949203002: Only use 95% of the link capacity if the true link capacity is found by probing. (Closed)
Patch Set: Nit Created 3 years, 6 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 | « webrtc/modules/congestion_controller/probe_bitrate_estimator.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 /* 1 /*
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "webrtc/modules/congestion_controller/probe_bitrate_estimator.h" 11 #include "webrtc/modules/congestion_controller/probe_bitrate_estimator.h"
12 12
13 #include <vector> 13 #include <vector>
14 #include <utility> 14 #include <utility>
15 15
16 #include "webrtc/modules/remote_bitrate_estimator/aimd_rate_control.h" 16 #include "webrtc/modules/remote_bitrate_estimator/aimd_rate_control.h"
17 #include "webrtc/test/gmock.h" 17 #include "webrtc/test/gmock.h"
18 #include "webrtc/test/gtest.h" 18 #include "webrtc/test/gtest.h"
19 19
20 namespace webrtc { 20 namespace webrtc {
21 21
22 namespace { 22 namespace {
23 constexpr int kInvalidBitrate = -1; 23 constexpr int kInvalidBitrate = -1;
24 constexpr int kDefaultMinProbes = 5; 24 constexpr int kDefaultMinProbes = 5;
25 constexpr int kDefaultMinBytes = 5000; 25 constexpr int kDefaultMinBytes = 5000;
26 constexpr float kTargetUtilizationFraction = 0.95f;
26 } // anonymous namespace 27 } // anonymous namespace
27 28
28 class TestProbeBitrateEstimator : public ::testing::Test { 29 class TestProbeBitrateEstimator : public ::testing::Test {
29 public: 30 public:
30 TestProbeBitrateEstimator() : probe_bitrate_estimator_(nullptr) {} 31 TestProbeBitrateEstimator() : probe_bitrate_estimator_(nullptr) {}
31 32
32 // TODO(philipel): Use PacedPacketInfo when ProbeBitrateEstimator is rewritten 33 // TODO(philipel): Use PacedPacketInfo when ProbeBitrateEstimator is rewritten
33 // to use that information. 34 // to use that information.
34 void AddPacketFeedback(int probe_cluster_id, 35 void AddPacketFeedback(int probe_cluster_id,
35 size_t size_bytes, 36 size_t size_bytes,
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 AddPacketFeedback(0, 1000, 40, 27); 119 AddPacketFeedback(0, 1000, 40, 27);
119 120
120 EXPECT_EQ(measured_bps_, kInvalidBitrate); 121 EXPECT_EQ(measured_bps_, kInvalidBitrate);
121 } 122 }
122 123
123 TEST_F(TestProbeBitrateEstimator, SlowReceive) { 124 TEST_F(TestProbeBitrateEstimator, SlowReceive) {
124 AddPacketFeedback(0, 1000, 0, 10); 125 AddPacketFeedback(0, 1000, 0, 10);
125 AddPacketFeedback(0, 1000, 10, 40); 126 AddPacketFeedback(0, 1000, 10, 40);
126 AddPacketFeedback(0, 1000, 20, 70); 127 AddPacketFeedback(0, 1000, 20, 70);
127 AddPacketFeedback(0, 1000, 30, 85); 128 AddPacketFeedback(0, 1000, 30, 85);
129 // Expected send rate = 800 kbps, expected receive rate = 320 kbps.
128 130
129 EXPECT_NEAR(measured_bps_, 320000, 10); 131 EXPECT_NEAR(measured_bps_, kTargetUtilizationFraction * 320000, 10);
130 } 132 }
131 133
132 TEST_F(TestProbeBitrateEstimator, BurstReceive) { 134 TEST_F(TestProbeBitrateEstimator, BurstReceive) {
133 AddPacketFeedback(0, 1000, 0, 50); 135 AddPacketFeedback(0, 1000, 0, 50);
134 AddPacketFeedback(0, 1000, 10, 50); 136 AddPacketFeedback(0, 1000, 10, 50);
135 AddPacketFeedback(0, 1000, 20, 50); 137 AddPacketFeedback(0, 1000, 20, 50);
136 AddPacketFeedback(0, 1000, 40, 50); 138 AddPacketFeedback(0, 1000, 40, 50);
137 139
138 EXPECT_EQ(measured_bps_, kInvalidBitrate); 140 EXPECT_EQ(measured_bps_, kInvalidBitrate);
139 } 141 }
140 142
141 TEST_F(TestProbeBitrateEstimator, MultipleClusters) { 143 TEST_F(TestProbeBitrateEstimator, MultipleClusters) {
142 AddPacketFeedback(0, 1000, 0, 10); 144 AddPacketFeedback(0, 1000, 0, 10);
143 AddPacketFeedback(0, 1000, 10, 20); 145 AddPacketFeedback(0, 1000, 10, 20);
144 AddPacketFeedback(0, 1000, 20, 30); 146 AddPacketFeedback(0, 1000, 20, 30);
145 AddPacketFeedback(0, 1000, 40, 60); 147 AddPacketFeedback(0, 1000, 40, 60);
146 EXPECT_NEAR(measured_bps_, 480000, 10); 148 // Expected send rate = 600 kbps, expected receive rate = 480 kbps.
149 EXPECT_NEAR(measured_bps_, kTargetUtilizationFraction * 480000, 10);
147 150
148 AddPacketFeedback(0, 1000, 50, 60); 151 AddPacketFeedback(0, 1000, 50, 60);
152 // Expected send rate = 640 kbps, expected receive rate = 640 kbps.
149 EXPECT_NEAR(measured_bps_, 640000, 10); 153 EXPECT_NEAR(measured_bps_, 640000, 10);
150 154
151 AddPacketFeedback(1, 1000, 60, 70); 155 AddPacketFeedback(1, 1000, 60, 70);
152 AddPacketFeedback(1, 1000, 65, 77); 156 AddPacketFeedback(1, 1000, 65, 77);
153 AddPacketFeedback(1, 1000, 70, 84); 157 AddPacketFeedback(1, 1000, 70, 84);
154 AddPacketFeedback(1, 1000, 75, 90); 158 AddPacketFeedback(1, 1000, 75, 90);
159 // Expected send rate = 1600 kbps, expected receive rate = 1200 kbps.
155 160
156 EXPECT_NEAR(measured_bps_, 1200000, 10); 161 EXPECT_NEAR(measured_bps_, kTargetUtilizationFraction * 1200000, 10);
157 } 162 }
158 163
159 TEST_F(TestProbeBitrateEstimator, IgnoreOldClusters) { 164 TEST_F(TestProbeBitrateEstimator, IgnoreOldClusters) {
160 AddPacketFeedback(0, 1000, 0, 10); 165 AddPacketFeedback(0, 1000, 0, 10);
161 AddPacketFeedback(0, 1000, 10, 20); 166 AddPacketFeedback(0, 1000, 10, 20);
162 AddPacketFeedback(0, 1000, 20, 30); 167 AddPacketFeedback(0, 1000, 20, 30);
163 168
164 AddPacketFeedback(1, 1000, 60, 70); 169 AddPacketFeedback(1, 1000, 60, 70);
165 AddPacketFeedback(1, 1000, 65, 77); 170 AddPacketFeedback(1, 1000, 65, 77);
166 AddPacketFeedback(1, 1000, 70, 84); 171 AddPacketFeedback(1, 1000, 70, 84);
167 AddPacketFeedback(1, 1000, 75, 90); 172 AddPacketFeedback(1, 1000, 75, 90);
173 // Expected send rate = 1600 kbps, expected receive rate = 1200 kbps.
168 174
169 EXPECT_NEAR(measured_bps_, 1200000, 10); 175 EXPECT_NEAR(measured_bps_, kTargetUtilizationFraction * 1200000, 10);
170 176
171 // Coming in 6s later 177 // Coming in 6s later
172 AddPacketFeedback(0, 1000, 40 + 6000, 60 + 6000); 178 AddPacketFeedback(0, 1000, 40 + 6000, 60 + 6000);
173 179
174 EXPECT_EQ(measured_bps_, kInvalidBitrate); 180 EXPECT_EQ(measured_bps_, kInvalidBitrate);
175 } 181 }
176 182
177 TEST_F(TestProbeBitrateEstimator, IgnoreSizeLastSendPacket) { 183 TEST_F(TestProbeBitrateEstimator, IgnoreSizeLastSendPacket) {
178 AddPacketFeedback(0, 1000, 0, 10); 184 AddPacketFeedback(0, 1000, 0, 10);
179 AddPacketFeedback(0, 1000, 10, 20); 185 AddPacketFeedback(0, 1000, 10, 20);
180 AddPacketFeedback(0, 1000, 20, 30); 186 AddPacketFeedback(0, 1000, 20, 30);
181 AddPacketFeedback(0, 1000, 30, 40); 187 AddPacketFeedback(0, 1000, 30, 40);
182 AddPacketFeedback(0, 1500, 40, 50); 188 AddPacketFeedback(0, 1500, 40, 50);
189 // Expected send rate = 800 kbps, expected receive rate = 900 kbps.
183 190
184 EXPECT_NEAR(measured_bps_, 800000, 10); 191 EXPECT_NEAR(measured_bps_, 800000, 10);
185 } 192 }
186 193
187 TEST_F(TestProbeBitrateEstimator, IgnoreSizeFirstReceivePacket) { 194 TEST_F(TestProbeBitrateEstimator, IgnoreSizeFirstReceivePacket) {
188 AddPacketFeedback(0, 1500, 0, 10); 195 AddPacketFeedback(0, 1500, 0, 10);
189 AddPacketFeedback(0, 1000, 10, 20); 196 AddPacketFeedback(0, 1000, 10, 20);
190 AddPacketFeedback(0, 1000, 20, 30); 197 AddPacketFeedback(0, 1000, 20, 30);
191 AddPacketFeedback(0, 1000, 30, 40); 198 AddPacketFeedback(0, 1000, 30, 40);
199 // Expected send rate = 933 kbps, expected receive rate = 800 kbps.
192 200
193 EXPECT_NEAR(measured_bps_, 800000, 10); 201 EXPECT_NEAR(measured_bps_, kTargetUtilizationFraction * 800000, 10);
194 } 202 }
195 203
196 TEST_F(TestProbeBitrateEstimator, NoLastEstimatedBitrateBps) { 204 TEST_F(TestProbeBitrateEstimator, NoLastEstimatedBitrateBps) {
197 EXPECT_FALSE(probe_bitrate_estimator_.FetchAndResetLastEstimatedBitrateBps()); 205 EXPECT_FALSE(probe_bitrate_estimator_.FetchAndResetLastEstimatedBitrateBps());
198 } 206 }
199 207
200 TEST_F(TestProbeBitrateEstimator, FetchLastEstimatedBitrateBps) { 208 TEST_F(TestProbeBitrateEstimator, FetchLastEstimatedBitrateBps) {
201 AddPacketFeedback(0, 1000, 0, 10); 209 AddPacketFeedback(0, 1000, 0, 10);
202 AddPacketFeedback(0, 1000, 10, 20); 210 AddPacketFeedback(0, 1000, 10, 20);
203 AddPacketFeedback(0, 1000, 20, 30); 211 AddPacketFeedback(0, 1000, 20, 30);
204 AddPacketFeedback(0, 1000, 30, 40); 212 AddPacketFeedback(0, 1000, 30, 40);
205 213
206 auto estimated_bitrate_bps = 214 auto estimated_bitrate_bps =
207 probe_bitrate_estimator_.FetchAndResetLastEstimatedBitrateBps(); 215 probe_bitrate_estimator_.FetchAndResetLastEstimatedBitrateBps();
208 EXPECT_TRUE(estimated_bitrate_bps); 216 EXPECT_TRUE(estimated_bitrate_bps);
209 EXPECT_NEAR(*estimated_bitrate_bps, 800000, 10); 217 EXPECT_NEAR(*estimated_bitrate_bps, 800000, 10);
210 EXPECT_FALSE(probe_bitrate_estimator_.FetchAndResetLastEstimatedBitrateBps()); 218 EXPECT_FALSE(probe_bitrate_estimator_.FetchAndResetLastEstimatedBitrateBps());
211 } 219 }
212 220
213 } // namespace webrtc 221 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/congestion_controller/probe_bitrate_estimator.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698