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_(0), last_fraction_loss_(0), last_rtt_(0) {} | 34 : last_bitrate_(0), last_fraction_loss_(0), last_rtt_(0) {} |
25 | 35 |
26 virtual void OnBitrateUpdated(uint32_t bitrate, | 36 virtual void OnBitrateUpdated(uint32_t bitrate, |
27 uint8_t fraction_loss, | 37 uint8_t fraction_loss, |
28 int64_t rtt) { | 38 int64_t rtt) { |
29 last_bitrate_ = bitrate; | 39 last_bitrate_ = bitrate; |
30 last_fraction_loss_ = fraction_loss; | 40 last_fraction_loss_ = fraction_loss; |
31 last_rtt_ = rtt; | 41 last_rtt_ = rtt; |
32 } | 42 } |
33 uint32_t last_bitrate_; | 43 uint32_t last_bitrate_; |
34 uint8_t last_fraction_loss_; | 44 uint8_t last_fraction_loss_; |
35 int64_t last_rtt_; | 45 int64_t last_rtt_; |
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_); | 70 EXPECT_EQ(200000u, bitrate_observer.last_bitrate_); |
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_); | 75 EXPECT_EQ(3000000u, bitrate_observer.last_bitrate_); |
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_); | 89 EXPECT_EQ(3000000u, bitrate_observer.last_bitrate_); |
68 allocator_->OnNetworkChanged(1500000, 0, 0); | 90 allocator_->OnNetworkChanged(1500000, 0, 0); |
69 EXPECT_EQ(1500000u, bitrate_observer.last_bitrate_); | 91 EXPECT_EQ(1500000u, bitrate_observer.last_bitrate_); |
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_); | 109 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_); |
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_); | 111 EXPECT_EQ(50, bitrate_observer_1.last_rtt_); |
88 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_); | 112 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_); |
89 EXPECT_EQ(0, bitrate_observer_2.last_fraction_loss_); | 113 EXPECT_EQ(0, bitrate_observer_2.last_fraction_loss_); |
(...skipping 10 matching lines...) Expand all Loading... |
100 EXPECT_EQ(600000u, bitrate_observer_1.last_bitrate_); | 124 EXPECT_EQ(600000u, bitrate_observer_1.last_bitrate_); |
101 EXPECT_EQ(600000u, bitrate_observer_2.last_bitrate_); | 125 EXPECT_EQ(600000u, bitrate_observer_2.last_bitrate_); |
102 | 126 |
103 // Verify that if the bandwidth estimate is set to zero, the allocated rate is | 127 // Verify that if the bandwidth estimate is set to zero, the allocated rate is |
104 // zero. | 128 // zero. |
105 allocator_->OnNetworkChanged(0, 0, 50); | 129 allocator_->OnNetworkChanged(0, 0, 50); |
106 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_); | 130 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_); |
107 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_); | 131 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_); |
108 } | 132 } |
109 | 133 |
| 134 TEST_F(BitrateAllocatorTest, RemoveObserverTriggersLimitObserver) { |
| 135 TestBitrateObserver bitrate_observer; |
| 136 const uint32_t kMinSendBitrateBps = 100000; |
| 137 const uint32_t kPadUpToBitrateBps = 50000; |
| 138 |
| 139 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(kMinSendBitrateBps, |
| 140 kPadUpToBitrateBps)); |
| 141 allocator_->AddObserver(&bitrate_observer, kMinSendBitrateBps, 1500000, |
| 142 kPadUpToBitrateBps, true); |
| 143 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0)); |
| 144 allocator_->RemoveObserver(&bitrate_observer); |
| 145 } |
| 146 |
| 147 TEST_F(BitrateAllocatorTest, |
| 148 NotifyObserverInactiveTriggersLimitObserverWithNoPaddingBitrate) { |
| 149 TestBitrateObserver bitrate_observer; |
| 150 const uint32_t kMinSendBitrateBps = 100000; |
| 151 const uint32_t kPadUpToBitrateBps = 50000; |
| 152 |
| 153 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(kMinSendBitrateBps, |
| 154 kPadUpToBitrateBps)); |
| 155 allocator_->AddObserver(&bitrate_observer, kMinSendBitrateBps, 1500000, |
| 156 kPadUpToBitrateBps, true); |
| 157 |
| 158 EXPECT_CALL(limit_observer_, |
| 159 OnAllocationLimitsChanged(kMinSendBitrateBps, 0)); |
| 160 allocator_->NotifyObserverInactive(&bitrate_observer, true /* inactive */); |
| 161 |
| 162 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(kMinSendBitrateBps, |
| 163 kPadUpToBitrateBps)); |
| 164 allocator_->NotifyObserverInactive(&bitrate_observer, false /* inactive */); |
| 165 } |
| 166 |
110 class BitrateAllocatorTestNoEnforceMin : public ::testing::Test { | 167 class BitrateAllocatorTestNoEnforceMin : public ::testing::Test { |
111 protected: | 168 protected: |
112 BitrateAllocatorTestNoEnforceMin() : allocator_(new BitrateAllocator()) { | 169 BitrateAllocatorTestNoEnforceMin() |
| 170 : allocator_(new BitrateAllocator(&limit_observer_)) { |
113 allocator_->OnNetworkChanged(300000u, 0, 0); | 171 allocator_->OnNetworkChanged(300000u, 0, 0); |
114 } | 172 } |
115 ~BitrateAllocatorTestNoEnforceMin() {} | 173 ~BitrateAllocatorTestNoEnforceMin() {} |
116 | 174 |
| 175 NiceMock<MockLimitObserver> limit_observer_; |
117 std::unique_ptr<BitrateAllocator> allocator_; | 176 std::unique_ptr<BitrateAllocator> allocator_; |
118 }; | 177 }; |
119 | 178 |
120 // The following three tests verify that the EnforceMinBitrate() method works | 179 // The following three tests verify that the EnforceMinBitrate() method works |
121 // as intended. | 180 // as intended. |
122 TEST_F(BitrateAllocatorTestNoEnforceMin, OneBitrateObserver) { | 181 TEST_F(BitrateAllocatorTestNoEnforceMin, OneBitrateObserver) { |
123 TestBitrateObserver bitrate_observer_1; | 182 TestBitrateObserver bitrate_observer_1; |
| 183 // Expect OnAllocationLimitsChanged with |min_send_bitrate_bps| = 0 since |
| 184 // AddObserver is called with |enforce_min_bitrate| = false. |
| 185 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0)); |
124 int start_bitrate = | 186 int start_bitrate = |
125 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, false); | 187 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, 0, false); |
126 EXPECT_EQ(300000, start_bitrate); | 188 EXPECT_EQ(300000, start_bitrate); |
127 | 189 |
128 // High REMB. | 190 // High REMB. |
129 allocator_->OnNetworkChanged(150000, 0, 0); | 191 allocator_->OnNetworkChanged(150000, 0, 0); |
130 EXPECT_EQ(150000u, bitrate_observer_1.last_bitrate_); | 192 EXPECT_EQ(150000u, bitrate_observer_1.last_bitrate_); |
131 | 193 |
132 // Low REMB. | 194 // Low REMB. |
133 allocator_->OnNetworkChanged(10000, 0, 0); | 195 allocator_->OnNetworkChanged(10000, 0, 0); |
134 EXPECT_EQ(10000u, bitrate_observer_1.last_bitrate_); | 196 EXPECT_EQ(10000u, bitrate_observer_1.last_bitrate_); |
135 | 197 |
| 198 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0)); |
136 allocator_->RemoveObserver(&bitrate_observer_1); | 199 allocator_->RemoveObserver(&bitrate_observer_1); |
137 } | 200 } |
138 | 201 |
139 TEST_F(BitrateAllocatorTestNoEnforceMin, ThreeBitrateObservers) { | 202 TEST_F(BitrateAllocatorTestNoEnforceMin, ThreeBitrateObservers) { |
140 TestBitrateObserver bitrate_observer_1; | 203 TestBitrateObserver bitrate_observer_1; |
141 TestBitrateObserver bitrate_observer_2; | 204 TestBitrateObserver bitrate_observer_2; |
142 TestBitrateObserver bitrate_observer_3; | 205 TestBitrateObserver bitrate_observer_3; |
143 // Set up the observers with min bitrates at 100000, 200000, and 300000. | 206 // Set up the observers with min bitrates at 100000, 200000, and 300000. |
144 int start_bitrate = | 207 int start_bitrate = |
145 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, false); | 208 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, 0, false); |
146 EXPECT_EQ(300000, start_bitrate); | 209 EXPECT_EQ(300000, start_bitrate); |
147 | 210 |
148 start_bitrate = | 211 start_bitrate = |
149 allocator_->AddObserver(&bitrate_observer_2, 200000, 400000, false); | 212 allocator_->AddObserver(&bitrate_observer_2, 200000, 400000, 0, false); |
150 EXPECT_EQ(200000, start_bitrate); | 213 EXPECT_EQ(200000, start_bitrate); |
151 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_); | 214 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_); |
152 | 215 |
153 start_bitrate = | 216 start_bitrate = |
154 allocator_->AddObserver(&bitrate_observer_3, 300000, 400000, false); | 217 allocator_->AddObserver(&bitrate_observer_3, 300000, 400000, 0, false); |
155 EXPECT_EQ(0, start_bitrate); | 218 EXPECT_EQ(0, start_bitrate); |
156 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_); | 219 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_); |
157 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_); | 220 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_); |
158 | 221 |
159 // High REMB. Make sure the controllers get a fair share of the surplus | 222 // High REMB. Make sure the controllers get a fair share of the surplus |
160 // (i.e., what is left after each controller gets its min rate). | 223 // (i.e., what is left after each controller gets its min rate). |
161 allocator_->OnNetworkChanged(690000, 0, 0); | 224 allocator_->OnNetworkChanged(690000, 0, 0); |
162 // Verify that each observer gets its min rate (sum of min rates is 600000), | 225 // 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. | 226 // and that the remaining 90000 is divided equally among the three. |
164 uint32_t bitrate_to_share = 690000u - 100000u - 200000u - 300000u; | 227 uint32_t bitrate_to_share = 690000u - 100000u - 200000u - 300000u; |
(...skipping 26 matching lines...) Expand all Loading... |
191 allocator_->RemoveObserver(&bitrate_observer_1); | 254 allocator_->RemoveObserver(&bitrate_observer_1); |
192 allocator_->RemoveObserver(&bitrate_observer_2); | 255 allocator_->RemoveObserver(&bitrate_observer_2); |
193 allocator_->RemoveObserver(&bitrate_observer_3); | 256 allocator_->RemoveObserver(&bitrate_observer_3); |
194 } | 257 } |
195 | 258 |
196 TEST_F(BitrateAllocatorTest, ThreeBitrateObserversLowRembEnforceMin) { | 259 TEST_F(BitrateAllocatorTest, ThreeBitrateObserversLowRembEnforceMin) { |
197 TestBitrateObserver bitrate_observer_1; | 260 TestBitrateObserver bitrate_observer_1; |
198 TestBitrateObserver bitrate_observer_2; | 261 TestBitrateObserver bitrate_observer_2; |
199 TestBitrateObserver bitrate_observer_3; | 262 TestBitrateObserver bitrate_observer_3; |
200 int start_bitrate = | 263 int start_bitrate = |
201 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, true); | 264 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, 0, true); |
202 EXPECT_EQ(300000, start_bitrate); | 265 EXPECT_EQ(300000, start_bitrate); |
203 | 266 |
204 start_bitrate = | 267 start_bitrate = |
205 allocator_->AddObserver(&bitrate_observer_2, 200000, 400000, true); | 268 allocator_->AddObserver(&bitrate_observer_2, 200000, 400000, 0, true); |
206 EXPECT_EQ(200000, start_bitrate); | 269 EXPECT_EQ(200000, start_bitrate); |
207 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_); | 270 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_); |
208 | 271 |
209 start_bitrate = | 272 start_bitrate = |
210 allocator_->AddObserver(&bitrate_observer_3, 300000, 400000, true); | 273 allocator_->AddObserver(&bitrate_observer_3, 300000, 400000, 0, true); |
211 EXPECT_EQ(300000, start_bitrate); | 274 EXPECT_EQ(300000, start_bitrate); |
212 EXPECT_EQ(100000, static_cast<int>(bitrate_observer_1.last_bitrate_)); | 275 EXPECT_EQ(100000, static_cast<int>(bitrate_observer_1.last_bitrate_)); |
213 EXPECT_EQ(200000, static_cast<int>(bitrate_observer_2.last_bitrate_)); | 276 EXPECT_EQ(200000, static_cast<int>(bitrate_observer_2.last_bitrate_)); |
214 | 277 |
215 // Low REMB. Verify that all observers still get their respective min bitrate. | 278 // Low REMB. Verify that all observers still get their respective min bitrate. |
216 allocator_->OnNetworkChanged(1000, 0, 0); | 279 allocator_->OnNetworkChanged(1000, 0, 0); |
217 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_); // Min cap. | 280 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_); // Min cap. |
218 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_); // Min cap. | 281 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_); // Min cap. |
219 EXPECT_EQ(300000u, bitrate_observer_3.last_bitrate_); // Min cap. | 282 EXPECT_EQ(300000u, bitrate_observer_3.last_bitrate_); // Min cap. |
220 | 283 |
221 allocator_->RemoveObserver(&bitrate_observer_1); | 284 allocator_->RemoveObserver(&bitrate_observer_1); |
222 allocator_->RemoveObserver(&bitrate_observer_2); | 285 allocator_->RemoveObserver(&bitrate_observer_2); |
223 allocator_->RemoveObserver(&bitrate_observer_3); | 286 allocator_->RemoveObserver(&bitrate_observer_3); |
224 } | 287 } |
225 | 288 |
226 TEST_F(BitrateAllocatorTest, AddObserverWhileNetworkDown) { | 289 TEST_F(BitrateAllocatorTest, AddObserverWhileNetworkDown) { |
227 TestBitrateObserver bitrate_observer_1; | 290 TestBitrateObserver bitrate_observer_1; |
| 291 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(50000, 0)); |
228 int start_bitrate = | 292 int start_bitrate = |
229 allocator_->AddObserver(&bitrate_observer_1, 50000, 400000, true); | 293 allocator_->AddObserver(&bitrate_observer_1, 50000, 400000, 0, true); |
230 EXPECT_EQ(300000, start_bitrate); | 294 EXPECT_EQ(300000, start_bitrate); |
231 | 295 |
232 // Set network down, ie, no available bitrate. | 296 // Set network down, ie, no available bitrate. |
233 allocator_->OnNetworkChanged(0, 0, 0); | 297 allocator_->OnNetworkChanged(0, 0, 0); |
234 | 298 |
235 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_); | 299 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_); |
236 | 300 |
237 TestBitrateObserver bitrate_observer_2; | 301 TestBitrateObserver bitrate_observer_2; |
| 302 // Adding an observer while the network is down should not affect the limits. |
| 303 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(50000 + 50000, 0)); |
238 start_bitrate = | 304 start_bitrate = |
239 allocator_->AddObserver(&bitrate_observer_2, 50000, 400000, true); | 305 allocator_->AddObserver(&bitrate_observer_2, 50000, 400000, 0, true); |
240 | 306 |
241 // Expect the start_bitrate to be set as if the network was still up but that | 307 // Expect the start_bitrate to be set as if the network was still up but that |
242 // the new observer have been notified that the network is down. | 308 // the new observer have been notified that the network is down. |
243 EXPECT_EQ(300000 / 2, start_bitrate); | 309 EXPECT_EQ(300000 / 2, start_bitrate); |
244 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_); | 310 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_); |
245 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_); | 311 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_); |
246 | 312 |
247 // Set network back up. | 313 // Set network back up. |
248 allocator_->OnNetworkChanged(1500000, 0, 50); | 314 allocator_->OnNetworkChanged(1500000, 0, 50); |
249 EXPECT_EQ(750000u, bitrate_observer_1.last_bitrate_); | 315 EXPECT_EQ(750000u, bitrate_observer_1.last_bitrate_); |
250 EXPECT_EQ(750000u, bitrate_observer_2.last_bitrate_); | 316 EXPECT_EQ(750000u, bitrate_observer_2.last_bitrate_); |
251 } | 317 } |
252 | 318 |
253 } // namespace webrtc | 319 } // namespace webrtc |
OLD | NEW |