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 |
11 #include <algorithm> | 11 #include <algorithm> |
12 #include <memory> | 12 #include <memory> |
13 #include <vector> | 13 #include <vector> |
14 | 14 |
| 15 #include "testing/gmock/include/gmock/gmock.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
16 #include "webrtc/call/bitrate_allocator.h" | 17 #include "webrtc/call/bitrate_allocator.h" |
17 #include "webrtc/modules/bitrate_controller/include/bitrate_controller.h" | 18 #include "webrtc/modules/bitrate_controller/include/bitrate_controller.h" |
18 | 19 |
| 20 using testing::NiceMock; |
| 21 |
19 namespace webrtc { | 22 namespace webrtc { |
20 | 23 |
| 24 class MockLimitObserver : public BitrateAllocator::LimitObserver { |
| 25 public: |
| 26 MOCK_METHOD2(OnAllocationLimitsChanged, |
| 27 void(uint32_t min_send_bitrate_bps, |
| 28 uint32_t max_padding_bitrate_bps)); |
| 29 }; |
| 30 |
21 class TestBitrateObserver : public BitrateAllocatorObserver { | 31 class TestBitrateObserver : public BitrateAllocatorObserver { |
22 public: | 32 public: |
23 TestBitrateObserver() | 33 TestBitrateObserver() |
24 : last_bitrate_bps_(0), last_fraction_loss_(0), last_rtt_ms_(0) {} | 34 : last_bitrate_bps_(0), last_fraction_loss_(0), last_rtt_ms_(0) {} |
25 | 35 |
26 void OnBitrateUpdated(uint32_t bitrate_bps, | 36 void OnBitrateUpdated(uint32_t bitrate_bps, |
27 uint8_t fraction_loss, | 37 uint8_t fraction_loss, |
28 int64_t rtt) override { | 38 int64_t rtt) override { |
29 last_bitrate_bps_ = bitrate_bps; | 39 last_bitrate_bps_ = bitrate_bps; |
30 last_fraction_loss_ = fraction_loss; | 40 last_fraction_loss_ = fraction_loss; |
31 last_rtt_ms_ = rtt; | 41 last_rtt_ms_ = rtt; |
32 } | 42 } |
33 uint32_t last_bitrate_bps_; | 43 uint32_t last_bitrate_bps_; |
34 uint8_t last_fraction_loss_; | 44 uint8_t last_fraction_loss_; |
35 int64_t last_rtt_ms_; | 45 int64_t last_rtt_ms_; |
36 }; | 46 }; |
37 | 47 |
38 class BitrateAllocatorTest : public ::testing::Test { | 48 class BitrateAllocatorTest : public ::testing::Test { |
39 protected: | 49 protected: |
40 BitrateAllocatorTest() : allocator_(new BitrateAllocator()) { | 50 BitrateAllocatorTest() : allocator_(new BitrateAllocator(&limit_observer_)) { |
41 allocator_->OnNetworkChanged(300000u, 0, 0); | 51 allocator_->OnNetworkChanged(300000u, 0, 0); |
42 } | 52 } |
43 ~BitrateAllocatorTest() {} | 53 ~BitrateAllocatorTest() {} |
44 | 54 |
| 55 NiceMock<MockLimitObserver> limit_observer_; |
45 std::unique_ptr<BitrateAllocator> allocator_; | 56 std::unique_ptr<BitrateAllocator> allocator_; |
46 }; | 57 }; |
47 | 58 |
48 TEST_F(BitrateAllocatorTest, UpdatingBitrateObserver) { | 59 TEST_F(BitrateAllocatorTest, UpdatingBitrateObserver) { |
49 TestBitrateObserver bitrate_observer; | 60 TestBitrateObserver bitrate_observer; |
50 int start_bitrate = | 61 const uint32_t kMinSendBitrateBps = 100000; |
51 allocator_->AddObserver(&bitrate_observer, 100000, 1500000, true); | 62 const uint32_t kPadUpToBitrateBps = 50000; |
| 63 |
| 64 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(kMinSendBitrateBps, |
| 65 kPadUpToBitrateBps)); |
| 66 int start_bitrate = allocator_->AddObserver( |
| 67 &bitrate_observer, kMinSendBitrateBps, 1500000, kPadUpToBitrateBps, true); |
52 EXPECT_EQ(300000, start_bitrate); | 68 EXPECT_EQ(300000, start_bitrate); |
53 allocator_->OnNetworkChanged(200000, 0, 0); | 69 allocator_->OnNetworkChanged(200000, 0, 0); |
54 EXPECT_EQ(200000u, bitrate_observer.last_bitrate_bps_); | 70 EXPECT_EQ(200000u, bitrate_observer.last_bitrate_bps_); |
55 | 71 |
56 // TODO(pbos): Expect capping to 1.5M instead of 3M when not boosting the max | 72 // TODO(pbos): Expect capping to 1.5M instead of 3M when not boosting the max |
57 // bitrate for FEC/retransmissions (see todo in BitrateAllocator). | 73 // bitrate for FEC/retransmissions (see todo in BitrateAllocator). |
58 allocator_->OnNetworkChanged(4000000, 0, 0); | 74 allocator_->OnNetworkChanged(4000000, 0, 0); |
59 EXPECT_EQ(3000000u, bitrate_observer.last_bitrate_bps_); | 75 EXPECT_EQ(3000000u, bitrate_observer.last_bitrate_bps_); |
60 start_bitrate = | 76 |
61 allocator_->AddObserver(&bitrate_observer, 100000, 4000000, true); | 77 // Expect |max_padding_bitrate_bps| to change to 0 if the observer is updated. |
| 78 EXPECT_CALL(limit_observer_, |
| 79 OnAllocationLimitsChanged(kMinSendBitrateBps, 0)); |
| 80 start_bitrate = allocator_->AddObserver(&bitrate_observer, kMinSendBitrateBps, |
| 81 4000000, 0, true); |
62 EXPECT_EQ(4000000, start_bitrate); | 82 EXPECT_EQ(4000000, start_bitrate); |
63 | 83 |
64 start_bitrate = | 84 EXPECT_CALL(limit_observer_, |
65 allocator_->AddObserver(&bitrate_observer, 100000, 1500000, true); | 85 OnAllocationLimitsChanged(kMinSendBitrateBps, 0)); |
| 86 start_bitrate = allocator_->AddObserver(&bitrate_observer, kMinSendBitrateBps, |
| 87 1500000, 0, true); |
66 EXPECT_EQ(3000000, start_bitrate); | 88 EXPECT_EQ(3000000, start_bitrate); |
67 EXPECT_EQ(3000000u, bitrate_observer.last_bitrate_bps_); | 89 EXPECT_EQ(3000000u, bitrate_observer.last_bitrate_bps_); |
68 allocator_->OnNetworkChanged(1500000, 0, 0); | 90 allocator_->OnNetworkChanged(1500000, 0, 0); |
69 EXPECT_EQ(1500000u, bitrate_observer.last_bitrate_bps_); | 91 EXPECT_EQ(1500000u, bitrate_observer.last_bitrate_bps_); |
70 } | 92 } |
71 | 93 |
72 TEST_F(BitrateAllocatorTest, TwoBitrateObserversOneRtcpObserver) { | 94 TEST_F(BitrateAllocatorTest, TwoBitrateObserversOneRtcpObserver) { |
73 TestBitrateObserver bitrate_observer_1; | 95 TestBitrateObserver bitrate_observer_1; |
74 TestBitrateObserver bitrate_observer_2; | 96 TestBitrateObserver bitrate_observer_2; |
| 97 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(100000, 0)); |
75 int start_bitrate = | 98 int start_bitrate = |
76 allocator_->AddObserver(&bitrate_observer_1, 100000, 300000, true); | 99 allocator_->AddObserver(&bitrate_observer_1, 100000, 300000, 0, true); |
77 EXPECT_EQ(300000, start_bitrate); | 100 EXPECT_EQ(300000, start_bitrate); |
| 101 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(100000 + 200000, 0)); |
78 start_bitrate = | 102 start_bitrate = |
79 allocator_->AddObserver(&bitrate_observer_2, 200000, 300000, true); | 103 allocator_->AddObserver(&bitrate_observer_2, 200000, 300000, 0, true); |
80 EXPECT_EQ(200000, start_bitrate); | 104 EXPECT_EQ(200000, start_bitrate); |
81 | 105 |
82 // Test too low start bitrate, hence lower than sum of min. Min bitrates will | 106 // Test too low start bitrate, hence lower than sum of min. Min bitrates will |
83 // be allocated to all observers. | 107 // be allocated to all observers. |
84 allocator_->OnNetworkChanged(200000, 0, 50); | 108 allocator_->OnNetworkChanged(200000, 0, 50); |
85 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); | 109 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); |
86 EXPECT_EQ(0, bitrate_observer_1.last_fraction_loss_); | 110 EXPECT_EQ(0, bitrate_observer_1.last_fraction_loss_); |
87 EXPECT_EQ(50, bitrate_observer_1.last_rtt_ms_); | 111 EXPECT_EQ(50, bitrate_observer_1.last_rtt_ms_); |
88 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_bps_); | 112 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_bps_); |
89 EXPECT_EQ(0, bitrate_observer_2.last_fraction_loss_); | 113 EXPECT_EQ(0, bitrate_observer_2.last_fraction_loss_); |
(...skipping 12 matching lines...) Expand all Loading... |
102 EXPECT_EQ(600000u, bitrate_observer_1.last_bitrate_bps_); | 126 EXPECT_EQ(600000u, bitrate_observer_1.last_bitrate_bps_); |
103 EXPECT_EQ(600000u, bitrate_observer_2.last_bitrate_bps_); | 127 EXPECT_EQ(600000u, bitrate_observer_2.last_bitrate_bps_); |
104 | 128 |
105 // Verify that if the bandwidth estimate is set to zero, the allocated rate is | 129 // Verify that if the bandwidth estimate is set to zero, the allocated rate is |
106 // zero. | 130 // zero. |
107 allocator_->OnNetworkChanged(0, 0, 50); | 131 allocator_->OnNetworkChanged(0, 0, 50); |
108 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); | 132 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); |
109 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); | 133 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); |
110 } | 134 } |
111 | 135 |
| 136 TEST_F(BitrateAllocatorTest, RemoveObserverTriggersLimitObserver) { |
| 137 TestBitrateObserver bitrate_observer; |
| 138 const uint32_t kMinSendBitrateBps = 100000; |
| 139 const uint32_t kPadUpToBitrateBps = 50000; |
| 140 |
| 141 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(kMinSendBitrateBps, |
| 142 kPadUpToBitrateBps)); |
| 143 allocator_->AddObserver(&bitrate_observer, kMinSendBitrateBps, 1500000, |
| 144 kPadUpToBitrateBps, true); |
| 145 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0)); |
| 146 allocator_->RemoveObserver(&bitrate_observer); |
| 147 } |
| 148 |
112 class BitrateAllocatorTestNoEnforceMin : public ::testing::Test { | 149 class BitrateAllocatorTestNoEnforceMin : public ::testing::Test { |
113 protected: | 150 protected: |
114 BitrateAllocatorTestNoEnforceMin() : allocator_(new BitrateAllocator()) { | 151 BitrateAllocatorTestNoEnforceMin() |
| 152 : allocator_(new BitrateAllocator(&limit_observer_)) { |
115 allocator_->OnNetworkChanged(300000u, 0, 0); | 153 allocator_->OnNetworkChanged(300000u, 0, 0); |
116 } | 154 } |
117 ~BitrateAllocatorTestNoEnforceMin() {} | 155 ~BitrateAllocatorTestNoEnforceMin() {} |
118 | 156 |
| 157 NiceMock<MockLimitObserver> limit_observer_; |
119 std::unique_ptr<BitrateAllocator> allocator_; | 158 std::unique_ptr<BitrateAllocator> allocator_; |
120 }; | 159 }; |
121 | 160 |
122 // The following three tests verify enforcing a minimum bitrate works as | 161 // The following three tests verify enforcing a minimum bitrate works as |
123 // intended. | 162 // intended. |
124 TEST_F(BitrateAllocatorTestNoEnforceMin, OneBitrateObserver) { | 163 TEST_F(BitrateAllocatorTestNoEnforceMin, OneBitrateObserver) { |
125 TestBitrateObserver bitrate_observer_1; | 164 TestBitrateObserver bitrate_observer_1; |
| 165 // Expect OnAllocationLimitsChanged with |min_send_bitrate_bps| = 0 since |
| 166 // AddObserver is called with |enforce_min_bitrate| = false. |
| 167 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0)); |
126 int start_bitrate = | 168 int start_bitrate = |
127 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, false); | 169 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, 0, false); |
128 EXPECT_EQ(300000, start_bitrate); | 170 EXPECT_EQ(300000, start_bitrate); |
129 | 171 |
130 // High BWE. | 172 // High BWE. |
131 allocator_->OnNetworkChanged(150000, 0, 0); | 173 allocator_->OnNetworkChanged(150000, 0, 0); |
132 EXPECT_EQ(150000u, bitrate_observer_1.last_bitrate_bps_); | 174 EXPECT_EQ(150000u, bitrate_observer_1.last_bitrate_bps_); |
133 | 175 |
134 // Low BWE. | 176 // Low BWE. |
135 allocator_->OnNetworkChanged(10000, 0, 0); | 177 allocator_->OnNetworkChanged(10000, 0, 0); |
136 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); | 178 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); |
137 | 179 |
| 180 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0)); |
138 allocator_->RemoveObserver(&bitrate_observer_1); | 181 allocator_->RemoveObserver(&bitrate_observer_1); |
139 } | 182 } |
140 | 183 |
141 TEST_F(BitrateAllocatorTestNoEnforceMin, ThreeBitrateObservers) { | 184 TEST_F(BitrateAllocatorTestNoEnforceMin, ThreeBitrateObservers) { |
142 TestBitrateObserver bitrate_observer_1; | 185 TestBitrateObserver bitrate_observer_1; |
143 TestBitrateObserver bitrate_observer_2; | 186 TestBitrateObserver bitrate_observer_2; |
144 TestBitrateObserver bitrate_observer_3; | 187 TestBitrateObserver bitrate_observer_3; |
145 // Set up the observers with min bitrates at 100000, 200000, and 300000. | 188 // Set up the observers with min bitrates at 100000, 200000, and 300000. |
146 int start_bitrate = | 189 int start_bitrate = |
147 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, false); | 190 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, 0, false); |
148 EXPECT_EQ(300000, start_bitrate); | 191 EXPECT_EQ(300000, start_bitrate); |
149 | 192 |
150 start_bitrate = | 193 start_bitrate = |
151 allocator_->AddObserver(&bitrate_observer_2, 200000, 400000, false); | 194 allocator_->AddObserver(&bitrate_observer_2, 200000, 400000, 0, false); |
152 EXPECT_EQ(200000, start_bitrate); | 195 EXPECT_EQ(200000, start_bitrate); |
153 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); | 196 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); |
154 | 197 |
155 start_bitrate = | 198 start_bitrate = |
156 allocator_->AddObserver(&bitrate_observer_3, 300000, 400000, false); | 199 allocator_->AddObserver(&bitrate_observer_3, 300000, 400000, 0, false); |
157 EXPECT_EQ(0, start_bitrate); | 200 EXPECT_EQ(0, start_bitrate); |
158 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); | 201 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); |
159 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_bps_); | 202 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_bps_); |
160 | 203 |
161 // High BWE. Make sure the controllers get a fair share of the surplus (i.e., | 204 // High BWE. Make sure the controllers get a fair share of the surplus (i.e., |
162 // what is left after each controller gets its min rate). | 205 // what is left after each controller gets its min rate). |
163 allocator_->OnNetworkChanged(690000, 0, 0); | 206 allocator_->OnNetworkChanged(690000, 0, 0); |
164 // Verify that each observer gets its min rate (sum of min rates is 600000), | 207 // Verify that each observer gets its min rate (sum of min rates is 600000), |
165 // and that the remaining 90000 is divided equally among the three. | 208 // and that the remaining 90000 is divided equally among the three. |
166 uint32_t bitrate_to_share = 690000u - 100000u - 200000u - 300000u; | 209 uint32_t bitrate_to_share = 690000u - 100000u - 200000u - 300000u; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
200 allocator_->RemoveObserver(&bitrate_observer_1); | 243 allocator_->RemoveObserver(&bitrate_observer_1); |
201 allocator_->RemoveObserver(&bitrate_observer_2); | 244 allocator_->RemoveObserver(&bitrate_observer_2); |
202 allocator_->RemoveObserver(&bitrate_observer_3); | 245 allocator_->RemoveObserver(&bitrate_observer_3); |
203 } | 246 } |
204 | 247 |
205 TEST_F(BitrateAllocatorTest, ThreeBitrateObserversLowBweEnforceMin) { | 248 TEST_F(BitrateAllocatorTest, ThreeBitrateObserversLowBweEnforceMin) { |
206 TestBitrateObserver bitrate_observer_1; | 249 TestBitrateObserver bitrate_observer_1; |
207 TestBitrateObserver bitrate_observer_2; | 250 TestBitrateObserver bitrate_observer_2; |
208 TestBitrateObserver bitrate_observer_3; | 251 TestBitrateObserver bitrate_observer_3; |
209 int start_bitrate = | 252 int start_bitrate = |
210 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, true); | 253 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, 0, true); |
211 EXPECT_EQ(300000, start_bitrate); | 254 EXPECT_EQ(300000, start_bitrate); |
212 | 255 |
213 start_bitrate = | 256 start_bitrate = |
214 allocator_->AddObserver(&bitrate_observer_2, 200000, 400000, true); | 257 allocator_->AddObserver(&bitrate_observer_2, 200000, 400000, 0, true); |
215 EXPECT_EQ(200000, start_bitrate); | 258 EXPECT_EQ(200000, start_bitrate); |
216 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); | 259 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); |
217 | 260 |
218 start_bitrate = | 261 start_bitrate = |
219 allocator_->AddObserver(&bitrate_observer_3, 300000, 400000, true); | 262 allocator_->AddObserver(&bitrate_observer_3, 300000, 400000, 0, true); |
220 EXPECT_EQ(300000, start_bitrate); | 263 EXPECT_EQ(300000, start_bitrate); |
221 EXPECT_EQ(100000, static_cast<int>(bitrate_observer_1.last_bitrate_bps_)); | 264 EXPECT_EQ(100000, static_cast<int>(bitrate_observer_1.last_bitrate_bps_)); |
222 EXPECT_EQ(200000, static_cast<int>(bitrate_observer_2.last_bitrate_bps_)); | 265 EXPECT_EQ(200000, static_cast<int>(bitrate_observer_2.last_bitrate_bps_)); |
223 | 266 |
224 // Low BWE. Verify that all observers still get their respective min bitrate. | 267 // Low BWE. Verify that all observers still get their respective min bitrate. |
225 allocator_->OnNetworkChanged(1000, 0, 0); | 268 allocator_->OnNetworkChanged(1000, 0, 0); |
226 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); // Min cap. | 269 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); // Min cap. |
227 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_bps_); // Min cap. | 270 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_bps_); // Min cap. |
228 EXPECT_EQ(300000u, bitrate_observer_3.last_bitrate_bps_); // Min cap. | 271 EXPECT_EQ(300000u, bitrate_observer_3.last_bitrate_bps_); // Min cap. |
229 | 272 |
230 allocator_->RemoveObserver(&bitrate_observer_1); | 273 allocator_->RemoveObserver(&bitrate_observer_1); |
231 allocator_->RemoveObserver(&bitrate_observer_2); | 274 allocator_->RemoveObserver(&bitrate_observer_2); |
232 allocator_->RemoveObserver(&bitrate_observer_3); | 275 allocator_->RemoveObserver(&bitrate_observer_3); |
233 } | 276 } |
234 | 277 |
235 TEST_F(BitrateAllocatorTest, AddObserverWhileNetworkDown) { | 278 TEST_F(BitrateAllocatorTest, AddObserverWhileNetworkDown) { |
236 TestBitrateObserver bitrate_observer_1; | 279 TestBitrateObserver bitrate_observer_1; |
| 280 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(50000, 0)); |
237 int start_bitrate = | 281 int start_bitrate = |
238 allocator_->AddObserver(&bitrate_observer_1, 50000, 400000, true); | 282 allocator_->AddObserver(&bitrate_observer_1, 50000, 400000, 0, true); |
239 EXPECT_EQ(300000, start_bitrate); | 283 EXPECT_EQ(300000, start_bitrate); |
240 | 284 |
241 // Set network down, ie, no available bitrate. | 285 // Set network down, ie, no available bitrate. |
242 allocator_->OnNetworkChanged(0, 0, 0); | 286 allocator_->OnNetworkChanged(0, 0, 0); |
243 | 287 |
244 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); | 288 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); |
245 | 289 |
246 TestBitrateObserver bitrate_observer_2; | 290 TestBitrateObserver bitrate_observer_2; |
| 291 // Adding an observer while the network is down should not affect the limits. |
| 292 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(50000 + 50000, 0)); |
247 start_bitrate = | 293 start_bitrate = |
248 allocator_->AddObserver(&bitrate_observer_2, 50000, 400000, true); | 294 allocator_->AddObserver(&bitrate_observer_2, 50000, 400000, 0, true); |
249 | 295 |
250 // Expect the start_bitrate to be set as if the network was still up but that | 296 // Expect the start_bitrate to be set as if the network was still up but that |
251 // the new observer have been notified that the network is down. | 297 // the new observer have been notified that the network is down. |
252 EXPECT_EQ(300000 / 2, start_bitrate); | 298 EXPECT_EQ(300000 / 2, start_bitrate); |
253 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); | 299 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); |
254 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); | 300 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); |
255 | 301 |
256 // Set network back up. | 302 // Set network back up. |
257 allocator_->OnNetworkChanged(1500000, 0, 50); | 303 allocator_->OnNetworkChanged(1500000, 0, 50); |
258 EXPECT_EQ(750000u, bitrate_observer_1.last_bitrate_bps_); | 304 EXPECT_EQ(750000u, bitrate_observer_1.last_bitrate_bps_); |
259 EXPECT_EQ(750000u, bitrate_observer_2.last_bitrate_bps_); | 305 EXPECT_EQ(750000u, bitrate_observer_2.last_bitrate_bps_); |
260 } | 306 } |
261 | 307 |
262 TEST_F(BitrateAllocatorTest, MixedEnforecedConfigs) { | 308 TEST_F(BitrateAllocatorTest, MixedEnforecedConfigs) { |
263 TestBitrateObserver enforced_observer; | 309 TestBitrateObserver enforced_observer; |
264 int start_bitrate = | 310 int start_bitrate = |
265 allocator_->AddObserver(&enforced_observer, 6000, 30000, true); | 311 allocator_->AddObserver(&enforced_observer, 6000, 30000, 0, true); |
266 EXPECT_EQ(60000, start_bitrate); | 312 EXPECT_EQ(60000, start_bitrate); |
267 | 313 |
268 TestBitrateObserver not_enforced_observer; | 314 TestBitrateObserver not_enforced_observer; |
269 start_bitrate = | 315 start_bitrate = |
270 allocator_->AddObserver(¬_enforced_observer, 30000, 2500000, false); | 316 allocator_->AddObserver(¬_enforced_observer, 30000, 2500000, 0, false); |
271 EXPECT_EQ(270000, start_bitrate); | 317 EXPECT_EQ(270000, start_bitrate); |
272 EXPECT_EQ(30000u, enforced_observer.last_bitrate_bps_); | 318 EXPECT_EQ(30000u, enforced_observer.last_bitrate_bps_); |
273 | 319 |
274 allocator_->OnNetworkChanged(36000, 0, 50); | 320 allocator_->OnNetworkChanged(36000, 0, 50); |
275 EXPECT_EQ(6000u, enforced_observer.last_bitrate_bps_); | 321 EXPECT_EQ(6000u, enforced_observer.last_bitrate_bps_); |
276 EXPECT_EQ(30000u, not_enforced_observer.last_bitrate_bps_); | 322 EXPECT_EQ(30000u, not_enforced_observer.last_bitrate_bps_); |
277 | 323 |
278 allocator_->OnNetworkChanged(35000, 0, 50); | 324 allocator_->OnNetworkChanged(35000, 0, 50); |
279 EXPECT_EQ(30000u, enforced_observer.last_bitrate_bps_); | 325 EXPECT_EQ(30000u, enforced_observer.last_bitrate_bps_); |
280 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_bps_); | 326 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_bps_); |
(...skipping 18 matching lines...) Expand all Loading... |
299 EXPECT_EQ(16000u, enforced_observer.last_bitrate_bps_); | 345 EXPECT_EQ(16000u, enforced_observer.last_bitrate_bps_); |
300 EXPECT_EQ(40000u, not_enforced_observer.last_bitrate_bps_); | 346 EXPECT_EQ(40000u, not_enforced_observer.last_bitrate_bps_); |
301 | 347 |
302 allocator_->RemoveObserver(&enforced_observer); | 348 allocator_->RemoveObserver(&enforced_observer); |
303 allocator_->RemoveObserver(¬_enforced_observer); | 349 allocator_->RemoveObserver(¬_enforced_observer); |
304 } | 350 } |
305 | 351 |
306 TEST_F(BitrateAllocatorTest, AvoidToggleAbsolute) { | 352 TEST_F(BitrateAllocatorTest, AvoidToggleAbsolute) { |
307 TestBitrateObserver observer; | 353 TestBitrateObserver observer; |
308 int start_bitrate = | 354 int start_bitrate = |
309 allocator_->AddObserver(&observer, 30000, 300000, false); | 355 allocator_->AddObserver(&observer, 30000, 300000, 0, false); |
310 EXPECT_EQ(300000, start_bitrate); | 356 EXPECT_EQ(300000, start_bitrate); |
311 | 357 |
312 allocator_->OnNetworkChanged(30000, 0, 50); | 358 allocator_->OnNetworkChanged(30000, 0, 50); |
313 EXPECT_EQ(30000u, observer.last_bitrate_bps_); | 359 EXPECT_EQ(30000u, observer.last_bitrate_bps_); |
314 | 360 |
315 allocator_->OnNetworkChanged(20000, 0, 50); | 361 allocator_->OnNetworkChanged(20000, 0, 50); |
316 EXPECT_EQ(0u, observer.last_bitrate_bps_); | 362 EXPECT_EQ(0u, observer.last_bitrate_bps_); |
317 | 363 |
318 allocator_->OnNetworkChanged(30000, 0, 50); | 364 allocator_->OnNetworkChanged(30000, 0, 50); |
319 EXPECT_EQ(0u, observer.last_bitrate_bps_); | 365 EXPECT_EQ(0u, observer.last_bitrate_bps_); |
320 | 366 |
321 allocator_->OnNetworkChanged(49000, 0, 50); | 367 allocator_->OnNetworkChanged(49000, 0, 50); |
322 EXPECT_EQ(0u, observer.last_bitrate_bps_); | 368 EXPECT_EQ(0u, observer.last_bitrate_bps_); |
323 | 369 |
324 allocator_->OnNetworkChanged(50000, 0, 50); | 370 allocator_->OnNetworkChanged(50000, 0, 50); |
325 EXPECT_EQ(50000u, observer.last_bitrate_bps_); | 371 EXPECT_EQ(50000u, observer.last_bitrate_bps_); |
326 | 372 |
327 allocator_->OnNetworkChanged(30000, 0, 50); | 373 allocator_->OnNetworkChanged(30000, 0, 50); |
328 EXPECT_EQ(30000u, observer.last_bitrate_bps_); | 374 EXPECT_EQ(30000u, observer.last_bitrate_bps_); |
329 | 375 |
330 allocator_->RemoveObserver(&observer); | 376 allocator_->RemoveObserver(&observer); |
331 } | 377 } |
332 | 378 |
333 TEST_F(BitrateAllocatorTest, AvoidTogglePercent) { | 379 TEST_F(BitrateAllocatorTest, AvoidTogglePercent) { |
334 TestBitrateObserver observer; | 380 TestBitrateObserver observer; |
335 int start_bitrate = | 381 int start_bitrate = |
336 allocator_->AddObserver(&observer, 300000, 600000, false); | 382 allocator_->AddObserver(&observer, 300000, 600000, 0, false); |
337 EXPECT_EQ(300000, start_bitrate); | 383 EXPECT_EQ(300000, start_bitrate); |
338 | 384 |
339 allocator_->OnNetworkChanged(300000, 0, 50); | 385 allocator_->OnNetworkChanged(300000, 0, 50); |
340 EXPECT_EQ(300000u, observer.last_bitrate_bps_); | 386 EXPECT_EQ(300000u, observer.last_bitrate_bps_); |
341 | 387 |
342 allocator_->OnNetworkChanged(200000, 0, 50); | 388 allocator_->OnNetworkChanged(200000, 0, 50); |
343 EXPECT_EQ(0u, observer.last_bitrate_bps_); | 389 EXPECT_EQ(0u, observer.last_bitrate_bps_); |
344 | 390 |
345 allocator_->OnNetworkChanged(300000, 0, 50); | 391 allocator_->OnNetworkChanged(300000, 0, 50); |
346 EXPECT_EQ(0u, observer.last_bitrate_bps_); | 392 EXPECT_EQ(0u, observer.last_bitrate_bps_); |
347 | 393 |
348 allocator_->OnNetworkChanged(329000, 0, 50); | 394 allocator_->OnNetworkChanged(329000, 0, 50); |
349 EXPECT_EQ(0u, observer.last_bitrate_bps_); | 395 EXPECT_EQ(0u, observer.last_bitrate_bps_); |
350 | 396 |
351 allocator_->OnNetworkChanged(330000, 0, 50); | 397 allocator_->OnNetworkChanged(330000, 0, 50); |
352 EXPECT_EQ(330000u, observer.last_bitrate_bps_); | 398 EXPECT_EQ(330000u, observer.last_bitrate_bps_); |
353 | 399 |
354 allocator_->OnNetworkChanged(300000, 0, 50); | 400 allocator_->OnNetworkChanged(300000, 0, 50); |
355 EXPECT_EQ(300000u, observer.last_bitrate_bps_); | 401 EXPECT_EQ(300000u, observer.last_bitrate_bps_); |
356 | 402 |
357 allocator_->RemoveObserver(&observer); | 403 allocator_->RemoveObserver(&observer); |
358 } | 404 } |
359 | 405 |
360 } // namespace webrtc | 406 } // namespace webrtc |
OLD | NEW |