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

Side by Side Diff: webrtc/call/bitrate_allocator_unittest.cc

Issue 2035383002: Implementing auto pausing of video streams. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 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
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 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
(...skipping 12 matching lines...) Expand all
23 TestBitrateObserver() 23 TestBitrateObserver()
24 : last_bitrate_(0), last_fraction_loss_(0), last_rtt_(0) {} 24 : last_bitrate_(0), last_fraction_loss_(0), last_rtt_(0) {}
25 25
26 virtual void OnBitrateUpdated(uint32_t bitrate, 26 virtual void OnBitrateUpdated(uint32_t bitrate,
27 uint8_t fraction_loss, 27 uint8_t fraction_loss,
28 int64_t rtt) { 28 int64_t rtt) {
29 last_bitrate_ = bitrate; 29 last_bitrate_ = bitrate;
30 last_fraction_loss_ = fraction_loss; 30 last_fraction_loss_ = fraction_loss;
31 last_rtt_ = rtt; 31 last_rtt_ = rtt;
32 } 32 }
33 uint32_t last_bitrate_; 33 uint32_t last_bitrate_;
pbos-webrtc 2016/06/06 15:26:29 can you add _bps_ here?
mflodman 2016/06/09 13:23:13 Done.
34 uint8_t last_fraction_loss_; 34 uint8_t last_fraction_loss_;
35 int64_t last_rtt_; 35 int64_t last_rtt_;
pbos-webrtc 2016/06/06 15:26:29 rtt_ms_
mflodman 2016/06/09 13:23:13 Done.
36 }; 36 };
37 37
38 class BitrateAllocatorTest : public ::testing::Test { 38 class BitrateAllocatorTest : public ::testing::Test {
39 protected: 39 protected:
40 BitrateAllocatorTest() : allocator_(new BitrateAllocator()) { 40 BitrateAllocatorTest() : allocator_(new BitrateAllocator()) {
41 allocator_->OnNetworkChanged(300000u, 0, 0); 41 allocator_->OnNetworkChanged(300000u, 0, 0);
42 } 42 }
43 ~BitrateAllocatorTest() {} 43 ~BitrateAllocatorTest() {}
44 44
45 std::unique_ptr<BitrateAllocator> allocator_; 45 std::unique_ptr<BitrateAllocator> allocator_;
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 }; 118 };
119 119
120 // The following three tests verify that the EnforceMinBitrate() method works 120 // The following three tests verify that the EnforceMinBitrate() method works
121 // as intended. 121 // as intended.
122 TEST_F(BitrateAllocatorTestNoEnforceMin, OneBitrateObserver) { 122 TEST_F(BitrateAllocatorTestNoEnforceMin, OneBitrateObserver) {
123 TestBitrateObserver bitrate_observer_1; 123 TestBitrateObserver bitrate_observer_1;
124 int start_bitrate = 124 int start_bitrate =
125 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, false); 125 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, false);
126 EXPECT_EQ(300000, start_bitrate); 126 EXPECT_EQ(300000, start_bitrate);
127 127
128 // High REMB. 128 // High BWE.
129 allocator_->OnNetworkChanged(150000, 0, 0); 129 allocator_->OnNetworkChanged(150000, 0, 0);
130 EXPECT_EQ(150000u, bitrate_observer_1.last_bitrate_); 130 EXPECT_EQ(150000u, bitrate_observer_1.last_bitrate_);
131 131
132 // Low REMB. 132 // Low BWE.
133 allocator_->OnNetworkChanged(10000, 0, 0); 133 allocator_->OnNetworkChanged(10000, 0, 0);
134 EXPECT_EQ(10000u, bitrate_observer_1.last_bitrate_); 134 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_);
pbos-webrtc 2016/06/06 15:26:29 Does this still verify EnforceMinBitrate() or shou
mflodman 2016/06/09 13:23:13 Comment updated.
135 135
136 allocator_->RemoveObserver(&bitrate_observer_1); 136 allocator_->RemoveObserver(&bitrate_observer_1);
137 } 137 }
138 138
139 TEST_F(BitrateAllocatorTestNoEnforceMin, ThreeBitrateObservers) { 139 TEST_F(BitrateAllocatorTestNoEnforceMin, ThreeBitrateObservers) {
140 TestBitrateObserver bitrate_observer_1; 140 TestBitrateObserver bitrate_observer_1;
141 TestBitrateObserver bitrate_observer_2; 141 TestBitrateObserver bitrate_observer_2;
142 TestBitrateObserver bitrate_observer_3; 142 TestBitrateObserver bitrate_observer_3;
143 // Set up the observers with min bitrates at 100000, 200000, and 300000. 143 // Set up the observers with min bitrates at 100000, 200000, and 300000.
144 int start_bitrate = 144 int start_bitrate =
145 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, false); 145 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, false);
146 EXPECT_EQ(300000, start_bitrate); 146 EXPECT_EQ(300000, start_bitrate);
147 147
148 start_bitrate = 148 start_bitrate =
149 allocator_->AddObserver(&bitrate_observer_2, 200000, 400000, false); 149 allocator_->AddObserver(&bitrate_observer_2, 200000, 400000, false);
150 EXPECT_EQ(200000, start_bitrate); 150 EXPECT_EQ(200000, start_bitrate);
151 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_); 151 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_);
152 152
153 start_bitrate = 153 start_bitrate =
154 allocator_->AddObserver(&bitrate_observer_3, 300000, 400000, false); 154 allocator_->AddObserver(&bitrate_observer_3, 300000, 400000, false);
155 EXPECT_EQ(0, start_bitrate); 155 EXPECT_EQ(0, start_bitrate);
156 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_); 156 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_);
157 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_); 157 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_);
158 158
159 // High REMB. Make sure the controllers get a fair share of the surplus 159 // High BWE. Make sure the controllers get a fair share of the surplus (i.e.,
160 // (i.e., what is left after each controller gets its min rate). 160 // what is left after each controller gets its min rate).
161 allocator_->OnNetworkChanged(690000, 0, 0); 161 allocator_->OnNetworkChanged(690000, 0, 0);
162 // Verify that each observer gets its min rate (sum of min rates is 600000), 162 // Verify that each observer gets its min rate (sum of min rates is 600000),
163 // and that the remaining 90000 is divided equally among the three. 163 // and that the remaining 90000 is divided equally among the three.
164 uint32_t bitrate_to_share = 690000u - 100000u - 200000u - 300000u; 164 uint32_t bitrate_to_share = 690000u - 100000u - 200000u - 300000u;
165 EXPECT_EQ(100000u + bitrate_to_share / 3, bitrate_observer_1.last_bitrate_); 165 EXPECT_EQ(100000u + bitrate_to_share / 3, bitrate_observer_1.last_bitrate_);
166 EXPECT_EQ(200000u + bitrate_to_share / 3, bitrate_observer_2.last_bitrate_); 166 EXPECT_EQ(200000u + bitrate_to_share / 3, bitrate_observer_2.last_bitrate_);
167 EXPECT_EQ(300000u + bitrate_to_share / 3, bitrate_observer_3.last_bitrate_); 167 EXPECT_EQ(300000u + bitrate_to_share / 3, bitrate_observer_3.last_bitrate_);
168 168
169 // High REMB, but below the sum of min bitrates. 169 // BWE below the sum of observer's min bitrate.
170 allocator_->OnNetworkChanged(500000, 0, 0); 170 allocator_->OnNetworkChanged(300000, 0, 0);
171 // Verify that the first and second observers get their min bitrates, and the
172 // third gets the remainder.
173 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_); // Min bitrate. 171 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_); // Min bitrate.
174 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_); // Min bitrate. 172 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_); // Min bitrate.
175 EXPECT_EQ(200000u, bitrate_observer_3.last_bitrate_); // Remainder. 173 EXPECT_EQ(0u, bitrate_observer_3.last_bitrate_); // Nothing.
176 174
177 // Low REMB. 175 // Increased BWE, but still below the sum of configured min bitrates for all
176 // observers and too little for observer 3. 1 and 2 will share the rest.
177 allocator_->OnNetworkChanged(500000, 0, 0);
178 EXPECT_EQ(200000u, bitrate_observer_1.last_bitrate_); // Min + split.
179 EXPECT_EQ(300000u, bitrate_observer_2.last_bitrate_); // Min + split.
180 EXPECT_EQ(0u, bitrate_observer_3.last_bitrate_); // Nothing.
181
182 // Below min for all.
178 allocator_->OnNetworkChanged(10000, 0, 0); 183 allocator_->OnNetworkChanged(10000, 0, 0);
179 // Verify that the first observer gets all the rate, and the rest get zero. 184 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_);
180 EXPECT_EQ(10000u, bitrate_observer_1.last_bitrate_);
181 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_); 185 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_);
182 EXPECT_EQ(0u, bitrate_observer_3.last_bitrate_); 186 EXPECT_EQ(0u, bitrate_observer_3.last_bitrate_);
183 187
184 allocator_->OnNetworkChanged(0, 0, 0);
185 // Verify that zero estimated bandwidth, means that that all gets zero, 188 // Verify that zero estimated bandwidth, means that that all gets zero,
186 // regardless of set min bitrate. 189 // regardless of set min bitrate.
190 allocator_->OnNetworkChanged(0, 0, 0);
187 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_); 191 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_);
188 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_); 192 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_);
189 EXPECT_EQ(0u, bitrate_observer_3.last_bitrate_); 193 EXPECT_EQ(0u, bitrate_observer_3.last_bitrate_);
190 194
191 allocator_->RemoveObserver(&bitrate_observer_1); 195 allocator_->RemoveObserver(&bitrate_observer_1);
192 allocator_->RemoveObserver(&bitrate_observer_2); 196 allocator_->RemoveObserver(&bitrate_observer_2);
193 allocator_->RemoveObserver(&bitrate_observer_3); 197 allocator_->RemoveObserver(&bitrate_observer_3);
194 } 198 }
195 199
196 TEST_F(BitrateAllocatorTest, ThreeBitrateObserversLowRembEnforceMin) { 200 TEST_F(BitrateAllocatorTest, ThreeBitrateObserversLowBweEnforceMin) {
197 TestBitrateObserver bitrate_observer_1; 201 TestBitrateObserver bitrate_observer_1;
198 TestBitrateObserver bitrate_observer_2; 202 TestBitrateObserver bitrate_observer_2;
199 TestBitrateObserver bitrate_observer_3; 203 TestBitrateObserver bitrate_observer_3;
200 int start_bitrate = 204 int start_bitrate =
201 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, true); 205 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, true);
202 EXPECT_EQ(300000, start_bitrate); 206 EXPECT_EQ(300000, start_bitrate);
203 207
204 start_bitrate = 208 start_bitrate =
205 allocator_->AddObserver(&bitrate_observer_2, 200000, 400000, true); 209 allocator_->AddObserver(&bitrate_observer_2, 200000, 400000, true);
206 EXPECT_EQ(200000, start_bitrate); 210 EXPECT_EQ(200000, start_bitrate);
207 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_); 211 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_);
208 212
209 start_bitrate = 213 start_bitrate =
210 allocator_->AddObserver(&bitrate_observer_3, 300000, 400000, true); 214 allocator_->AddObserver(&bitrate_observer_3, 300000, 400000, true);
211 EXPECT_EQ(300000, start_bitrate); 215 EXPECT_EQ(300000, start_bitrate);
212 EXPECT_EQ(100000, static_cast<int>(bitrate_observer_1.last_bitrate_)); 216 EXPECT_EQ(100000, static_cast<int>(bitrate_observer_1.last_bitrate_));
213 EXPECT_EQ(200000, static_cast<int>(bitrate_observer_2.last_bitrate_)); 217 EXPECT_EQ(200000, static_cast<int>(bitrate_observer_2.last_bitrate_));
214 218
215 // Low REMB. Verify that all observers still get their respective min bitrate. 219 // Low BWE. Verify that all observers still get their respective min bitrate.
216 allocator_->OnNetworkChanged(1000, 0, 0); 220 allocator_->OnNetworkChanged(1000, 0, 0);
217 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_); // Min cap. 221 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_); // Min cap.
218 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_); // Min cap. 222 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_); // Min cap.
219 EXPECT_EQ(300000u, bitrate_observer_3.last_bitrate_); // Min cap. 223 EXPECT_EQ(300000u, bitrate_observer_3.last_bitrate_); // Min cap.
220 224
221 allocator_->RemoveObserver(&bitrate_observer_1); 225 allocator_->RemoveObserver(&bitrate_observer_1);
222 allocator_->RemoveObserver(&bitrate_observer_2); 226 allocator_->RemoveObserver(&bitrate_observer_2);
223 allocator_->RemoveObserver(&bitrate_observer_3); 227 allocator_->RemoveObserver(&bitrate_observer_3);
224 } 228 }
225 229
(...skipping 17 matching lines...) Expand all
243 EXPECT_EQ(300000 / 2, start_bitrate); 247 EXPECT_EQ(300000 / 2, start_bitrate);
244 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_); 248 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_);
245 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_); 249 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_);
246 250
247 // Set network back up. 251 // Set network back up.
248 allocator_->OnNetworkChanged(1500000, 0, 50); 252 allocator_->OnNetworkChanged(1500000, 0, 50);
249 EXPECT_EQ(750000u, bitrate_observer_1.last_bitrate_); 253 EXPECT_EQ(750000u, bitrate_observer_1.last_bitrate_);
250 EXPECT_EQ(750000u, bitrate_observer_2.last_bitrate_); 254 EXPECT_EQ(750000u, bitrate_observer_2.last_bitrate_);
251 } 255 }
252 256
257 TEST_F(BitrateAllocatorTest, MixedEnforecedConfigs) {
258 TestBitrateObserver enforced_observer;
259 int start_bitrate =
260 allocator_->AddObserver(&enforced_observer, 6000, 30000, true);
261 EXPECT_EQ(60000, start_bitrate);
262
263 TestBitrateObserver not_enforced_observer;
264 start_bitrate =
265 allocator_->AddObserver(&not_enforced_observer, 30000, 2500000, false);
266 EXPECT_EQ(270000, start_bitrate);
267 EXPECT_EQ(30000u, enforced_observer.last_bitrate_);
268
269 allocator_->OnNetworkChanged(36000, 0, 50);
270 EXPECT_EQ(6000u, enforced_observer.last_bitrate_);
271 EXPECT_EQ(30000u, not_enforced_observer.last_bitrate_);
272
273 allocator_->OnNetworkChanged(35000, 0, 50);
274 EXPECT_EQ(30000u, enforced_observer.last_bitrate_);
275 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_);
276
277 allocator_->OnNetworkChanged(5000, 0, 50);
278 EXPECT_EQ(6000u, enforced_observer.last_bitrate_);
279 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_);
280
281 allocator_->OnNetworkChanged(36000, 0, 50);
282 EXPECT_EQ(30000u, enforced_observer.last_bitrate_);
283 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_);
284
285 allocator_->OnNetworkChanged(55000, 0, 50);
286 EXPECT_EQ(30000u, enforced_observer.last_bitrate_);
287 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_);
288
289 allocator_->OnNetworkChanged(56000, 0, 50);
290 EXPECT_EQ(6000u, enforced_observer.last_bitrate_);
291 EXPECT_EQ(50000u, not_enforced_observer.last_bitrate_);
292
293 allocator_->OnNetworkChanged(56000, 0, 50);
294 EXPECT_EQ(16000u, enforced_observer.last_bitrate_);
295 EXPECT_EQ(40000u, not_enforced_observer.last_bitrate_);
296
297 allocator_->RemoveObserver(&enforced_observer);
298 allocator_->RemoveObserver(&not_enforced_observer);
299 }
300
301 TEST_F(BitrateAllocatorTest, AvoidToggleAbsolute) {
302 TestBitrateObserver observer;
303 int start_bitrate =
304 allocator_->AddObserver(&observer, 30000, 300000, false);
305 EXPECT_EQ(300000, start_bitrate);
306
307 allocator_->OnNetworkChanged(30000, 0, 50);
308 EXPECT_EQ(30000u, observer.last_bitrate_);
309
310 allocator_->OnNetworkChanged(20000, 0, 50);
311 EXPECT_EQ(0u, observer.last_bitrate_);
312
313 allocator_->OnNetworkChanged(30000, 0, 50);
314 EXPECT_EQ(0u, observer.last_bitrate_);
315
316 allocator_->OnNetworkChanged(49000, 0, 50);
317 EXPECT_EQ(0u, observer.last_bitrate_);
318
319 allocator_->OnNetworkChanged(50000, 0, 50);
320 EXPECT_EQ(50000u, observer.last_bitrate_);
321
322 allocator_->OnNetworkChanged(30000, 0, 50);
323 EXPECT_EQ(30000u, observer.last_bitrate_);
324
325 allocator_->RemoveObserver(&observer);
326 }
327
328 TEST_F(BitrateAllocatorTest, AvoidTogglePercent) {
329 TestBitrateObserver observer;
330 int start_bitrate =
331 allocator_->AddObserver(&observer, 300000, 600000, false);
332 EXPECT_EQ(300000, start_bitrate);
333
334 allocator_->OnNetworkChanged(300000, 0, 50);
335 EXPECT_EQ(300000u, observer.last_bitrate_);
336
337 allocator_->OnNetworkChanged(200000, 0, 50);
338 EXPECT_EQ(0u, observer.last_bitrate_);
339
340 allocator_->OnNetworkChanged(300000, 0, 50);
341 EXPECT_EQ(0u, observer.last_bitrate_);
342
343 allocator_->OnNetworkChanged(329000, 0, 50);
344 EXPECT_EQ(0u, observer.last_bitrate_);
345
346 allocator_->OnNetworkChanged(330000, 0, 50);
347 EXPECT_EQ(330000u, observer.last_bitrate_);
348
349 allocator_->OnNetworkChanged(300000, 0, 50);
350 EXPECT_EQ(300000u, observer.last_bitrate_);
351
352 allocator_->RemoveObserver(&observer);
353 }
354
253 } // namespace webrtc 355 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698