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

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

Issue 2117493002: Auto pause video streams based on encoder target bitrate. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase Created 4 years, 5 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/call/bitrate_allocator.cc ('k') | webrtc/video/full_stack.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 /* 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 13 matching lines...) Expand all
24 class MockLimitObserver : public BitrateAllocator::LimitObserver { 24 class MockLimitObserver : public BitrateAllocator::LimitObserver {
25 public: 25 public:
26 MOCK_METHOD2(OnAllocationLimitsChanged, 26 MOCK_METHOD2(OnAllocationLimitsChanged,
27 void(uint32_t min_send_bitrate_bps, 27 void(uint32_t min_send_bitrate_bps,
28 uint32_t max_padding_bitrate_bps)); 28 uint32_t max_padding_bitrate_bps));
29 }; 29 };
30 30
31 class TestBitrateObserver : public BitrateAllocatorObserver { 31 class TestBitrateObserver : public BitrateAllocatorObserver {
32 public: 32 public:
33 TestBitrateObserver() 33 TestBitrateObserver()
34 : last_bitrate_bps_(0), last_fraction_loss_(0), last_rtt_ms_(0) {} 34 : last_bitrate_bps_(0),
35 last_fraction_loss_(0),
36 last_rtt_ms_(0),
37 protection_ratio_(0.0) {}
35 38
36 void OnBitrateUpdated(uint32_t bitrate_bps, 39 void SetBitrateProtectionRatio(double protection_ratio) {
37 uint8_t fraction_loss, 40 protection_ratio_ = protection_ratio;
38 int64_t rtt) override { 41 }
42
43 uint32_t OnBitrateUpdated(uint32_t bitrate_bps,
44 uint8_t fraction_loss,
45 int64_t rtt) override {
39 last_bitrate_bps_ = bitrate_bps; 46 last_bitrate_bps_ = bitrate_bps;
40 last_fraction_loss_ = fraction_loss; 47 last_fraction_loss_ = fraction_loss;
41 last_rtt_ms_ = rtt; 48 last_rtt_ms_ = rtt;
49 return bitrate_bps * protection_ratio_;
42 } 50 }
43 uint32_t last_bitrate_bps_; 51 uint32_t last_bitrate_bps_;
44 uint8_t last_fraction_loss_; 52 uint8_t last_fraction_loss_;
45 int64_t last_rtt_ms_; 53 int64_t last_rtt_ms_;
54 double protection_ratio_;
46 }; 55 };
47 56
48 class BitrateAllocatorTest : public ::testing::Test { 57 class BitrateAllocatorTest : public ::testing::Test {
49 protected: 58 protected:
50 BitrateAllocatorTest() : allocator_(new BitrateAllocator(&limit_observer_)) { 59 BitrateAllocatorTest() : allocator_(new BitrateAllocator(&limit_observer_)) {
51 allocator_->OnNetworkChanged(300000u, 0, 0); 60 allocator_->OnNetworkChanged(300000u, 0, 0);
52 } 61 }
53 ~BitrateAllocatorTest() {} 62 ~BitrateAllocatorTest() {}
54 63
55 NiceMock<MockLimitObserver> limit_observer_; 64 NiceMock<MockLimitObserver> limit_observer_;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 EXPECT_EQ(3000000, allocator_->GetStartBitrate(&bitrate_observer)); 97 EXPECT_EQ(3000000, allocator_->GetStartBitrate(&bitrate_observer));
89 EXPECT_EQ(3000000u, bitrate_observer.last_bitrate_bps_); 98 EXPECT_EQ(3000000u, bitrate_observer.last_bitrate_bps_);
90 allocator_->OnNetworkChanged(1500000, 0, 0); 99 allocator_->OnNetworkChanged(1500000, 0, 0);
91 EXPECT_EQ(1500000u, bitrate_observer.last_bitrate_bps_); 100 EXPECT_EQ(1500000u, bitrate_observer.last_bitrate_bps_);
92 } 101 }
93 102
94 TEST_F(BitrateAllocatorTest, TwoBitrateObserversOneRtcpObserver) { 103 TEST_F(BitrateAllocatorTest, TwoBitrateObserversOneRtcpObserver) {
95 TestBitrateObserver bitrate_observer_1; 104 TestBitrateObserver bitrate_observer_1;
96 TestBitrateObserver bitrate_observer_2; 105 TestBitrateObserver bitrate_observer_2;
97 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(100000, 0)); 106 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(100000, 0));
98 allocator_->AddObserver(&bitrate_observer_1, 100000, 300000, 0, true); 107 allocator_->AddObserver(&bitrate_observer_1, 100000, 300000, 0, true);
99 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1)); 108 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1));
100 EXPECT_CALL(limit_observer_, 109 EXPECT_CALL(limit_observer_,
101 OnAllocationLimitsChanged(100000 + 200000, 0)); 110 OnAllocationLimitsChanged(100000 + 200000, 0));
102 allocator_->AddObserver(&bitrate_observer_2, 200000, 300000, 0, true); 111 allocator_->AddObserver(&bitrate_observer_2, 200000, 300000, 0, true);
103 EXPECT_EQ(200000, allocator_->GetStartBitrate(&bitrate_observer_2)); 112 EXPECT_EQ(200000, allocator_->GetStartBitrate(&bitrate_observer_2));
104 113
105 // Test too low start bitrate, hence lower than sum of min. Min bitrates 114 // Test too low start bitrate, hence lower than sum of min. Min bitrates
106 // will 115 // will
107 // be allocated to all observers. 116 // be allocated to all observers.
108 allocator_->OnNetworkChanged(200000, 0, 50); 117 allocator_->OnNetworkChanged(200000, 0, 50);
109 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); 118 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_);
110 EXPECT_EQ(0, bitrate_observer_1.last_fraction_loss_); 119 EXPECT_EQ(0, bitrate_observer_1.last_fraction_loss_);
111 EXPECT_EQ(50, bitrate_observer_1.last_rtt_ms_); 120 EXPECT_EQ(50, bitrate_observer_1.last_rtt_ms_);
112 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_bps_); 121 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_bps_);
113 EXPECT_EQ(0, bitrate_observer_2.last_fraction_loss_); 122 EXPECT_EQ(0, bitrate_observer_2.last_fraction_loss_);
114 EXPECT_EQ(50, bitrate_observer_2.last_rtt_ms_); 123 EXPECT_EQ(50, bitrate_observer_2.last_rtt_ms_);
115 124
116 // Test a bitrate which should be distributed equally. 125 // Test a bitrate which should be distributed equally.
117 allocator_->OnNetworkChanged(500000, 0, 50); 126 allocator_->OnNetworkChanged(500000, 0, 50);
118 const uint32_t kBitrateToShare = 500000 - 200000 - 100000; 127 const uint32_t kBitrateToShare = 500000 - 200000 - 100000;
119 EXPECT_EQ(100000u + kBitrateToShare / 2, 128 EXPECT_EQ(100000u + kBitrateToShare / 2,
120 bitrate_observer_1.last_bitrate_bps_); 129 bitrate_observer_1.last_bitrate_bps_);
121 EXPECT_EQ(200000u + kBitrateToShare / 2, 130 EXPECT_EQ(200000u + kBitrateToShare / 2,
122 bitrate_observer_2.last_bitrate_bps_); 131 bitrate_observer_2.last_bitrate_bps_);
123 132
124 // Limited by 2x max bitrates since we leave room for FEC and 133 // Limited by 2x max bitrates since we leave room for FEC and
125 // retransmissions. 134 // retransmissions.
126 allocator_->OnNetworkChanged(1500000, 0, 50); 135 allocator_->OnNetworkChanged(1500000, 0, 50);
127 EXPECT_EQ(600000u, bitrate_observer_1.last_bitrate_bps_); 136 EXPECT_EQ(600000u, bitrate_observer_1.last_bitrate_bps_);
128 EXPECT_EQ(600000u, bitrate_observer_2.last_bitrate_bps_); 137 EXPECT_EQ(600000u, bitrate_observer_2.last_bitrate_bps_);
129 138
130 // Verify that if the bandwidth estimate is set to zero, the allocated 139 // Verify that if the bandwidth estimate is set to zero, the allocated
131 // rate is 140 // rate is
132 // zero. 141 // zero.
133 allocator_->OnNetworkChanged(0, 0, 50); 142 allocator_->OnNetworkChanged(0, 0, 50);
134 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); 143 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_);
135 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); 144 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_);
136 } 145 }
137 146
138 TEST_F(BitrateAllocatorTest, RemoveObserverTriggersLimitObserver) { 147 TEST_F(BitrateAllocatorTest, RemoveObserverTriggersLimitObserver) {
139 TestBitrateObserver bitrate_observer; 148 TestBitrateObserver bitrate_observer;
140 const uint32_t kMinSendBitrateBps = 100000; 149 const uint32_t kMinSendBitrateBps = 100000;
141 const uint32_t kPadUpToBitrateBps = 50000; 150 const uint32_t kPadUpToBitrateBps = 50000;
142 151
143 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(kMinSendBitrateBps, 152 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(kMinSendBitrateBps,
144 kPadUpToBitrateBps)); 153 kPadUpToBitrateBps));
145 allocator_->AddObserver(&bitrate_observer, kMinSendBitrateBps, 1500000, 154 allocator_->AddObserver(&bitrate_observer, kMinSendBitrateBps, 1500000,
(...skipping 14 matching lines...) Expand all
160 std::unique_ptr<BitrateAllocator> allocator_; 169 std::unique_ptr<BitrateAllocator> allocator_;
161 }; 170 };
162 171
163 // The following three tests verify enforcing a minimum bitrate works as 172 // The following three tests verify enforcing a minimum bitrate works as
164 // intended. 173 // intended.
165 TEST_F(BitrateAllocatorTestNoEnforceMin, OneBitrateObserver) { 174 TEST_F(BitrateAllocatorTestNoEnforceMin, OneBitrateObserver) {
166 TestBitrateObserver bitrate_observer_1; 175 TestBitrateObserver bitrate_observer_1;
167 // Expect OnAllocationLimitsChanged with |min_send_bitrate_bps| = 0 since 176 // Expect OnAllocationLimitsChanged with |min_send_bitrate_bps| = 0 since
168 // AddObserver is called with |enforce_min_bitrate| = false. 177 // AddObserver is called with |enforce_min_bitrate| = false.
169 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0)); 178 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0));
170 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, 0, false); 179 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, 0, false);
171 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1)); 180 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1));
172 181
173 // High BWE. 182 // High BWE.
174 allocator_->OnNetworkChanged(150000, 0, 0); 183 allocator_->OnNetworkChanged(150000, 0, 0);
175 EXPECT_EQ(150000u, bitrate_observer_1.last_bitrate_bps_); 184 EXPECT_EQ(150000u, bitrate_observer_1.last_bitrate_bps_);
176 185
177 // Low BWE. 186 // Low BWE.
178 allocator_->OnNetworkChanged(10000, 0, 0); 187 allocator_->OnNetworkChanged(10000, 0, 0);
179 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); 188 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_);
180 189
181 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0)); 190 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0));
182 allocator_->RemoveObserver(&bitrate_observer_1); 191 allocator_->RemoveObserver(&bitrate_observer_1);
183 } 192 }
184 193
185 TEST_F(BitrateAllocatorTestNoEnforceMin, ThreeBitrateObservers) { 194 TEST_F(BitrateAllocatorTestNoEnforceMin, ThreeBitrateObservers) {
186 TestBitrateObserver bitrate_observer_1; 195 TestBitrateObserver bitrate_observer_1;
187 TestBitrateObserver bitrate_observer_2; 196 TestBitrateObserver bitrate_observer_2;
188 TestBitrateObserver bitrate_observer_3; 197 TestBitrateObserver bitrate_observer_3;
189 // Set up the observers with min bitrates at 100000, 200000, and 300000. 198 // Set up the observers with min bitrates at 100000, 200000, and 300000.
190 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, 0, false); 199 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, 0, false);
191 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1)); 200 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1));
192 201
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 allocator_->OnNetworkChanged(0, 0, 0); 245 allocator_->OnNetworkChanged(0, 0, 0);
237 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); 246 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_);
238 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); 247 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_);
239 EXPECT_EQ(0u, bitrate_observer_3.last_bitrate_bps_); 248 EXPECT_EQ(0u, bitrate_observer_3.last_bitrate_bps_);
240 249
241 allocator_->RemoveObserver(&bitrate_observer_1); 250 allocator_->RemoveObserver(&bitrate_observer_1);
242 allocator_->RemoveObserver(&bitrate_observer_2); 251 allocator_->RemoveObserver(&bitrate_observer_2);
243 allocator_->RemoveObserver(&bitrate_observer_3); 252 allocator_->RemoveObserver(&bitrate_observer_3);
244 } 253 }
245 254
255 TEST_F(BitrateAllocatorTestNoEnforceMin, OneBitrateObserverWithPacketLoss) {
256 TestBitrateObserver bitrate_observer;
257 // Expect OnAllocationLimitsChanged with |min_send_bitrate_bps| = 0 since
258 // AddObserver is called with |enforce_min_bitrate| = false.
259 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0));
260 allocator_->AddObserver(
261 &bitrate_observer, 100000, 400000, 0, false);
262 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer));
263
264 // High BWE.
265 allocator_->OnNetworkChanged(150000, 0, 0);
266 EXPECT_EQ(150000u, bitrate_observer.last_bitrate_bps_);
267
268 // Add loss and use a part of the bitrate for protection.
269 double protection_ratio = 0.4;
270 uint8_t fraction_loss = protection_ratio * 256;
271 bitrate_observer.SetBitrateProtectionRatio(protection_ratio);
272 allocator_->OnNetworkChanged(200000, 0, fraction_loss);
273 EXPECT_EQ(200000u, bitrate_observer.last_bitrate_bps_);
274
275 // Above the min threshold, but not enough given the protection used.
276 allocator_->OnNetworkChanged(139000, 0, fraction_loss);
277 EXPECT_EQ(0u, bitrate_observer.last_bitrate_bps_);
278
279 // Verify the hysteresis is added for the protection.
280 allocator_->OnNetworkChanged(150000, 0, fraction_loss);
281 EXPECT_EQ(0u, bitrate_observer.last_bitrate_bps_);
282
283 // Just enough to enable video again.
284 allocator_->OnNetworkChanged(168000, 0, fraction_loss);
285 EXPECT_EQ(168000u, bitrate_observer.last_bitrate_bps_);
286
287 // Remove all protection and make sure video is not paused as earlier.
288 bitrate_observer.SetBitrateProtectionRatio(0.0);
289 allocator_->OnNetworkChanged(140000, 0, 0);
290 EXPECT_EQ(140000u, bitrate_observer.last_bitrate_bps_);
291
292 allocator_->OnNetworkChanged(139000, 0, 0);
293 EXPECT_EQ(139000u, bitrate_observer.last_bitrate_bps_);
294
295 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0));
296 allocator_->RemoveObserver(&bitrate_observer);
297 }
298
299 TEST_F(BitrateAllocatorTestNoEnforceMin, TwoBitrateObserverWithPacketLoss) {
300 TestBitrateObserver bitrate_observer_1;
301 TestBitrateObserver bitrate_observer_2;
302
303 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, 0, false);
304 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1));
305 allocator_->AddObserver(&bitrate_observer_2, 200000, 400000, 0, false);
306 EXPECT_EQ(200000, allocator_->GetStartBitrate(&bitrate_observer_2));
307 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_);
308
309 // Enough bitrate for both.
310 bitrate_observer_2.SetBitrateProtectionRatio(0.5);
311 allocator_->OnNetworkChanged(300000, 0, 0);
312 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_);
313 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_bps_);
314
315 // Above min for observer 2, but too little given the protection used.
316 allocator_->OnNetworkChanged(330000, 0, 0);
317 EXPECT_EQ(330000u, bitrate_observer_1.last_bitrate_bps_);
318 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_);
319
320 allocator_->OnNetworkChanged(100000, 0, 0);
321 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_);
322 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_);
323
324 allocator_->OnNetworkChanged(99999, 0, 0);
325 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_);
326 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_);
327
328 allocator_->OnNetworkChanged(119000, 0, 0);
329 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_);
330 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_);
331
332 allocator_->OnNetworkChanged(120000, 0, 0);
333 EXPECT_EQ(120000u, bitrate_observer_1.last_bitrate_bps_);
334 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_);
335
336 // Verify the protection is accounted for before resuming observer 2.
337 allocator_->OnNetworkChanged(429000, 0, 0);
338 EXPECT_EQ(400000u, bitrate_observer_1.last_bitrate_bps_);
339 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_);
340
341 allocator_->OnNetworkChanged(430000, 0, 0);
342 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_);
343 EXPECT_EQ(330000u, bitrate_observer_2.last_bitrate_bps_);
344
345 allocator_->RemoveObserver(&bitrate_observer_1);
346 allocator_->RemoveObserver(&bitrate_observer_2);
347 }
348
246 TEST_F(BitrateAllocatorTest, ThreeBitrateObserversLowBweEnforceMin) { 349 TEST_F(BitrateAllocatorTest, ThreeBitrateObserversLowBweEnforceMin) {
247 TestBitrateObserver bitrate_observer_1; 350 TestBitrateObserver bitrate_observer_1;
248 TestBitrateObserver bitrate_observer_2; 351 TestBitrateObserver bitrate_observer_2;
249 TestBitrateObserver bitrate_observer_3; 352 TestBitrateObserver bitrate_observer_3;
250 353
251 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, 0, true); 354 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, 0, true);
252 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1)); 355 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1));
253 356
254 allocator_->AddObserver(&bitrate_observer_2, 200000, 400000, 0, true); 357 allocator_->AddObserver(&bitrate_observer_2, 200000, 400000, 0, true);
255 EXPECT_EQ(200000, allocator_->GetStartBitrate(&bitrate_observer_2)); 358 EXPECT_EQ(200000, allocator_->GetStartBitrate(&bitrate_observer_2));
256 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); 359 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_);
257 360
258 allocator_->AddObserver(&bitrate_observer_3, 300000, 400000, 0, true); 361 allocator_->AddObserver(&bitrate_observer_3, 300000, 400000, 0, true);
259 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_3)); 362 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_3));
260 EXPECT_EQ(100000, static_cast<int>(bitrate_observer_1.last_bitrate_bps_)); 363 EXPECT_EQ(100000, static_cast<int>(bitrate_observer_1.last_bitrate_bps_));
261 EXPECT_EQ(200000, static_cast<int>(bitrate_observer_2.last_bitrate_bps_)); 364 EXPECT_EQ(200000, static_cast<int>(bitrate_observer_2.last_bitrate_bps_));
262 365
263 // Low BWE. Verify that all observers still get their respective min 366 // Low BWE. Verify that all observers still get their respective min
264 // bitrate. 367 // bitrate.
265 allocator_->OnNetworkChanged(1000, 0, 0); 368 allocator_->OnNetworkChanged(1000, 0, 0);
266 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); // Min cap. 369 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); // Min cap.
267 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_bps_); // Min cap. 370 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_bps_); // Min cap.
268 EXPECT_EQ(300000u, bitrate_observer_3.last_bitrate_bps_); // Min cap. 371 EXPECT_EQ(300000u, bitrate_observer_3.last_bitrate_bps_); // Min cap.
269 372
270 allocator_->RemoveObserver(&bitrate_observer_1); 373 allocator_->RemoveObserver(&bitrate_observer_1);
271 allocator_->RemoveObserver(&bitrate_observer_2); 374 allocator_->RemoveObserver(&bitrate_observer_2);
272 allocator_->RemoveObserver(&bitrate_observer_3); 375 allocator_->RemoveObserver(&bitrate_observer_3);
273 } 376 }
274 377
275 TEST_F(BitrateAllocatorTest, AddObserverWhileNetworkDown) { 378 TEST_F(BitrateAllocatorTest, AddObserverWhileNetworkDown) {
276 TestBitrateObserver bitrate_observer_1; 379 TestBitrateObserver bitrate_observer_1;
277 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(50000, 0)); 380 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(50000, 0));
278 381
279 allocator_->AddObserver(&bitrate_observer_1, 50000, 400000, 0, true); 382 allocator_->AddObserver(&bitrate_observer_1, 50000, 400000, 0, true);
280 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1)); 383 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1));
281 384
282 // Set network down, ie, no available bitrate. 385 // Set network down, ie, no available bitrate.
(...skipping 13 matching lines...) Expand all
296 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); 399 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_);
297 400
298 // Set network back up. 401 // Set network back up.
299 allocator_->OnNetworkChanged(1500000, 0, 50); 402 allocator_->OnNetworkChanged(1500000, 0, 50);
300 EXPECT_EQ(750000u, bitrate_observer_1.last_bitrate_bps_); 403 EXPECT_EQ(750000u, bitrate_observer_1.last_bitrate_bps_);
301 EXPECT_EQ(750000u, bitrate_observer_2.last_bitrate_bps_); 404 EXPECT_EQ(750000u, bitrate_observer_2.last_bitrate_bps_);
302 } 405 }
303 406
304 TEST_F(BitrateAllocatorTest, MixedEnforecedConfigs) { 407 TEST_F(BitrateAllocatorTest, MixedEnforecedConfigs) {
305 TestBitrateObserver enforced_observer; 408 TestBitrateObserver enforced_observer;
306 allocator_->AddObserver(&enforced_observer, 6000, 30000, 0, true); 409 allocator_->AddObserver(&enforced_observer, 6000, 30000, 0, true);
307 EXPECT_EQ(60000, allocator_->GetStartBitrate(&enforced_observer)); 410 EXPECT_EQ(60000, allocator_->GetStartBitrate(&enforced_observer));
308 411
309 TestBitrateObserver not_enforced_observer; 412 TestBitrateObserver not_enforced_observer;
310 allocator_->AddObserver(&not_enforced_observer, 30000, 2500000, 0, false); 413 allocator_->AddObserver(&not_enforced_observer, 30000, 2500000, 0, false);
311 EXPECT_EQ(270000, allocator_->GetStartBitrate(&not_enforced_observer)); 414 EXPECT_EQ(270000, allocator_->GetStartBitrate(&not_enforced_observer));
312 EXPECT_EQ(30000u, enforced_observer.last_bitrate_bps_); 415 EXPECT_EQ(30000u, enforced_observer.last_bitrate_bps_);
313 416
314 allocator_->OnNetworkChanged(36000, 0, 50); 417 allocator_->OnNetworkChanged(36000, 0, 50);
315 EXPECT_EQ(6000u, enforced_observer.last_bitrate_bps_); 418 EXPECT_EQ(6000u, enforced_observer.last_bitrate_bps_);
316 EXPECT_EQ(30000u, not_enforced_observer.last_bitrate_bps_); 419 EXPECT_EQ(30000u, not_enforced_observer.last_bitrate_bps_);
317 420
318 allocator_->OnNetworkChanged(35000, 0, 50); 421 allocator_->OnNetworkChanged(35000, 0, 50);
319 EXPECT_EQ(30000u, enforced_observer.last_bitrate_bps_); 422 EXPECT_EQ(30000u, enforced_observer.last_bitrate_bps_);
320 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_bps_); 423 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_bps_);
321 424
322 allocator_->OnNetworkChanged(5000, 0, 50); 425 allocator_->OnNetworkChanged(5000, 0, 50);
323 EXPECT_EQ(6000u, enforced_observer.last_bitrate_bps_); 426 EXPECT_EQ(6000u, enforced_observer.last_bitrate_bps_);
324 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_bps_); 427 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_bps_);
325 428
326 allocator_->OnNetworkChanged(36000, 0, 50); 429 allocator_->OnNetworkChanged(36000, 0, 50);
327 EXPECT_EQ(30000u, enforced_observer.last_bitrate_bps_); 430 EXPECT_EQ(30000u, enforced_observer.last_bitrate_bps_);
328 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_bps_); 431 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_bps_);
329 432
330 allocator_->OnNetworkChanged(55000, 0, 50); 433 allocator_->OnNetworkChanged(55000, 0, 50);
331 EXPECT_EQ(30000u, enforced_observer.last_bitrate_bps_); 434 EXPECT_EQ(30000u, enforced_observer.last_bitrate_bps_);
332 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_bps_); 435 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_bps_);
333 436
334 allocator_->OnNetworkChanged(56000, 0, 50); 437 allocator_->OnNetworkChanged(56000, 0, 50);
335 EXPECT_EQ(6000u, enforced_observer.last_bitrate_bps_); 438 EXPECT_EQ(6000u, enforced_observer.last_bitrate_bps_);
336 EXPECT_EQ(50000u, not_enforced_observer.last_bitrate_bps_); 439 EXPECT_EQ(50000u, not_enforced_observer.last_bitrate_bps_);
337 440
338 allocator_->OnNetworkChanged(56000, 0, 50); 441 allocator_->OnNetworkChanged(56000, 0, 50);
339 EXPECT_EQ(16000u, enforced_observer.last_bitrate_bps_); 442 EXPECT_EQ(16000u, enforced_observer.last_bitrate_bps_);
340 EXPECT_EQ(40000u, not_enforced_observer.last_bitrate_bps_); 443 EXPECT_EQ(40000u, not_enforced_observer.last_bitrate_bps_);
341 444
342 allocator_->RemoveObserver(&enforced_observer); 445 allocator_->RemoveObserver(&enforced_observer);
343 allocator_->RemoveObserver(&not_enforced_observer); 446 allocator_->RemoveObserver(&not_enforced_observer);
344 } 447 }
345 448
346 TEST_F(BitrateAllocatorTest, AvoidToggleAbsolute) { 449 TEST_F(BitrateAllocatorTest, AvoidToggleAbsolute) {
347 TestBitrateObserver observer; 450 TestBitrateObserver observer;
348 allocator_->AddObserver(&observer, 30000, 300000, 0, false); 451 allocator_->AddObserver(&observer, 30000, 300000, 0, false);
349 EXPECT_EQ(300000, allocator_->GetStartBitrate(&observer)); 452 EXPECT_EQ(300000, allocator_->GetStartBitrate(&observer));
350 453
351 allocator_->OnNetworkChanged(30000, 0, 50); 454 allocator_->OnNetworkChanged(30000, 0, 50);
352 EXPECT_EQ(30000u, observer.last_bitrate_bps_); 455 EXPECT_EQ(30000u, observer.last_bitrate_bps_);
353 456
354 allocator_->OnNetworkChanged(20000, 0, 50); 457 allocator_->OnNetworkChanged(20000, 0, 50);
355 EXPECT_EQ(0u, observer.last_bitrate_bps_); 458 EXPECT_EQ(0u, observer.last_bitrate_bps_);
356 459
357 allocator_->OnNetworkChanged(30000, 0, 50); 460 allocator_->OnNetworkChanged(30000, 0, 50);
358 EXPECT_EQ(0u, observer.last_bitrate_bps_); 461 EXPECT_EQ(0u, observer.last_bitrate_bps_);
359 462
360 allocator_->OnNetworkChanged(49000, 0, 50); 463 allocator_->OnNetworkChanged(49000, 0, 50);
361 EXPECT_EQ(0u, observer.last_bitrate_bps_); 464 EXPECT_EQ(0u, observer.last_bitrate_bps_);
362 465
363 allocator_->OnNetworkChanged(50000, 0, 50); 466 allocator_->OnNetworkChanged(50000, 0, 50);
364 EXPECT_EQ(50000u, observer.last_bitrate_bps_); 467 EXPECT_EQ(50000u, observer.last_bitrate_bps_);
365 468
366 allocator_->OnNetworkChanged(30000, 0, 50); 469 allocator_->OnNetworkChanged(30000, 0, 50);
367 EXPECT_EQ(30000u, observer.last_bitrate_bps_); 470 EXPECT_EQ(30000u, observer.last_bitrate_bps_);
368 471
369 allocator_->RemoveObserver(&observer); 472 allocator_->RemoveObserver(&observer);
370 } 473 }
371 474
372 TEST_F(BitrateAllocatorTest, AvoidTogglePercent) { 475 TEST_F(BitrateAllocatorTest, AvoidTogglePercent) {
373 TestBitrateObserver observer; 476 TestBitrateObserver observer;
374 allocator_->AddObserver(&observer, 300000, 600000, 0, false); 477 allocator_->AddObserver(&observer, 300000, 600000, 0, false);
375 EXPECT_EQ(300000, allocator_->GetStartBitrate(&observer)); 478 EXPECT_EQ(300000, allocator_->GetStartBitrate(&observer));
376 479
377 allocator_->OnNetworkChanged(300000, 0, 50); 480 allocator_->OnNetworkChanged(300000, 0, 50);
378 EXPECT_EQ(300000u, observer.last_bitrate_bps_); 481 EXPECT_EQ(300000u, observer.last_bitrate_bps_);
379 482
380 allocator_->OnNetworkChanged(200000, 0, 50); 483 allocator_->OnNetworkChanged(200000, 0, 50);
381 EXPECT_EQ(0u, observer.last_bitrate_bps_); 484 EXPECT_EQ(0u, observer.last_bitrate_bps_);
382 485
383 allocator_->OnNetworkChanged(300000, 0, 50); 486 allocator_->OnNetworkChanged(300000, 0, 50);
384 EXPECT_EQ(0u, observer.last_bitrate_bps_); 487 EXPECT_EQ(0u, observer.last_bitrate_bps_);
385 488
386 allocator_->OnNetworkChanged(329000, 0, 50); 489 allocator_->OnNetworkChanged(329000, 0, 50);
387 EXPECT_EQ(0u, observer.last_bitrate_bps_); 490 EXPECT_EQ(0u, observer.last_bitrate_bps_);
388 491
389 allocator_->OnNetworkChanged(330000, 0, 50); 492 allocator_->OnNetworkChanged(330000, 0, 50);
390 EXPECT_EQ(330000u, observer.last_bitrate_bps_); 493 EXPECT_EQ(330000u, observer.last_bitrate_bps_);
391 494
392 allocator_->OnNetworkChanged(300000, 0, 50); 495 allocator_->OnNetworkChanged(300000, 0, 50);
393 EXPECT_EQ(300000u, observer.last_bitrate_bps_); 496 EXPECT_EQ(300000u, observer.last_bitrate_bps_);
394 497
395 allocator_->RemoveObserver(&observer); 498 allocator_->RemoveObserver(&observer);
396 } 499 }
397 500
398 } // namespace webrtc 501 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/call/bitrate_allocator.cc ('k') | webrtc/video/full_stack.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698