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 12 matching lines...) Expand all Loading... | |
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 Loading... | |
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 Loading... | |
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(¬_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(¬_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 |
OLD | NEW |