OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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(¬_enforced_observer, 30000, 2500000, 0, false); | 413 allocator_->AddObserver(¬_enforced_observer, 30000, 2500000, 0, false); |
311 EXPECT_EQ(270000, allocator_->GetStartBitrate(¬_enforced_observer)); | 414 EXPECT_EQ(270000, allocator_->GetStartBitrate(¬_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(¬_enforced_observer); | 446 allocator_->RemoveObserver(¬_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 |
OLD | NEW |