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 16 matching lines...) Expand all Loading... | |
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), | 34 : last_bitrate_bps_(0), |
35 last_fraction_loss_(0), | 35 last_fraction_loss_(0), |
36 last_rtt_ms_(0), | 36 last_rtt_ms_(0), |
37 last_probing_interval_ms_(0), | |
37 protection_ratio_(0.0) {} | 38 protection_ratio_(0.0) {} |
38 | 39 |
39 void SetBitrateProtectionRatio(double protection_ratio) { | 40 void SetBitrateProtectionRatio(double protection_ratio) { |
40 protection_ratio_ = protection_ratio; | 41 protection_ratio_ = protection_ratio; |
41 } | 42 } |
42 | 43 |
43 uint32_t OnBitrateUpdated(uint32_t bitrate_bps, | 44 uint32_t OnBitrateUpdated(uint32_t bitrate_bps, |
44 uint8_t fraction_loss, | 45 uint8_t fraction_loss, |
45 int64_t rtt) override { | 46 int64_t rtt, |
47 int64_t probing_interval_ms) override { | |
46 last_bitrate_bps_ = bitrate_bps; | 48 last_bitrate_bps_ = bitrate_bps; |
47 last_fraction_loss_ = fraction_loss; | 49 last_fraction_loss_ = fraction_loss; |
48 last_rtt_ms_ = rtt; | 50 last_rtt_ms_ = rtt; |
51 last_probing_interval_ms_ = probing_interval_ms; | |
49 return bitrate_bps * protection_ratio_; | 52 return bitrate_bps * protection_ratio_; |
50 } | 53 } |
51 uint32_t last_bitrate_bps_; | 54 uint32_t last_bitrate_bps_; |
52 uint8_t last_fraction_loss_; | 55 uint8_t last_fraction_loss_; |
53 int64_t last_rtt_ms_; | 56 int64_t last_rtt_ms_; |
57 int last_probing_interval_ms_; | |
54 double protection_ratio_; | 58 double protection_ratio_; |
55 }; | 59 }; |
56 | 60 |
57 class BitrateAllocatorTest : public ::testing::Test { | 61 class BitrateAllocatorTest : public ::testing::Test { |
58 protected: | 62 protected: |
59 BitrateAllocatorTest() : allocator_(new BitrateAllocator(&limit_observer_)) { | 63 BitrateAllocatorTest() : allocator_(new BitrateAllocator(&limit_observer_)) { |
60 allocator_->OnNetworkChanged(300000u, 0, 0); | 64 allocator_->OnNetworkChanged(300000u, 0, 0, 0); |
minyue-webrtc
2016/11/28 12:00:00
should we use something more meaningful, e.g., kDe
michaelt
2016/11/28 13:03:37
Done.
| |
61 } | 65 } |
62 ~BitrateAllocatorTest() {} | 66 ~BitrateAllocatorTest() {} |
63 | 67 |
64 NiceMock<MockLimitObserver> limit_observer_; | 68 NiceMock<MockLimitObserver> limit_observer_; |
65 std::unique_ptr<BitrateAllocator> allocator_; | 69 std::unique_ptr<BitrateAllocator> allocator_; |
66 }; | 70 }; |
67 | 71 |
68 TEST_F(BitrateAllocatorTest, UpdatingBitrateObserver) { | 72 TEST_F(BitrateAllocatorTest, UpdatingBitrateObserver) { |
69 TestBitrateObserver bitrate_observer; | 73 TestBitrateObserver bitrate_observer; |
70 const uint32_t kMinSendBitrateBps = 100000; | 74 const uint32_t kMinSendBitrateBps = 100000; |
71 const uint32_t kPadUpToBitrateBps = 50000; | 75 const uint32_t kPadUpToBitrateBps = 50000; |
72 | 76 |
73 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(kMinSendBitrateBps, | 77 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(kMinSendBitrateBps, |
74 kPadUpToBitrateBps)); | 78 kPadUpToBitrateBps)); |
75 allocator_->AddObserver(&bitrate_observer, kMinSendBitrateBps, 1500000, | 79 allocator_->AddObserver(&bitrate_observer, kMinSendBitrateBps, 1500000, |
76 kPadUpToBitrateBps, true); | 80 kPadUpToBitrateBps, true); |
77 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer)); | 81 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer)); |
78 allocator_->OnNetworkChanged(200000, 0, 0); | 82 allocator_->OnNetworkChanged(200000, 0, 0, 0); |
79 EXPECT_EQ(200000, allocator_->GetStartBitrate(&bitrate_observer)); | 83 EXPECT_EQ(200000, allocator_->GetStartBitrate(&bitrate_observer)); |
80 | 84 |
81 // TODO(pbos): Expect capping to 1.5M instead of 3M when not boosting the max | 85 // TODO(pbos): Expect capping to 1.5M instead of 3M when not boosting the max |
82 // bitrate for FEC/retransmissions (see todo in BitrateAllocator). | 86 // bitrate for FEC/retransmissions (see todo in BitrateAllocator). |
83 allocator_->OnNetworkChanged(4000000, 0, 0); | 87 allocator_->OnNetworkChanged(4000000, 0, 0, 0); |
84 EXPECT_EQ(3000000, allocator_->GetStartBitrate(&bitrate_observer)); | 88 EXPECT_EQ(3000000, allocator_->GetStartBitrate(&bitrate_observer)); |
85 | 89 |
86 // Expect |max_padding_bitrate_bps| to change to 0 if the observer is updated. | 90 // Expect |max_padding_bitrate_bps| to change to 0 if the observer is updated. |
87 EXPECT_CALL(limit_observer_, | 91 EXPECT_CALL(limit_observer_, |
88 OnAllocationLimitsChanged(kMinSendBitrateBps, 0)); | 92 OnAllocationLimitsChanged(kMinSendBitrateBps, 0)); |
89 allocator_->AddObserver(&bitrate_observer, kMinSendBitrateBps, 4000000, 0, | 93 allocator_->AddObserver(&bitrate_observer, kMinSendBitrateBps, 4000000, 0, |
90 true); | 94 true); |
91 EXPECT_EQ(4000000, allocator_->GetStartBitrate(&bitrate_observer)); | 95 EXPECT_EQ(4000000, allocator_->GetStartBitrate(&bitrate_observer)); |
92 | 96 |
93 EXPECT_CALL(limit_observer_, | 97 EXPECT_CALL(limit_observer_, |
94 OnAllocationLimitsChanged(kMinSendBitrateBps, 0)); | 98 OnAllocationLimitsChanged(kMinSendBitrateBps, 0)); |
95 allocator_->AddObserver(&bitrate_observer, kMinSendBitrateBps, 1500000, 0, | 99 allocator_->AddObserver(&bitrate_observer, kMinSendBitrateBps, 1500000, 0, |
96 true); | 100 true); |
97 EXPECT_EQ(3000000, allocator_->GetStartBitrate(&bitrate_observer)); | 101 EXPECT_EQ(3000000, allocator_->GetStartBitrate(&bitrate_observer)); |
98 EXPECT_EQ(3000000u, bitrate_observer.last_bitrate_bps_); | 102 EXPECT_EQ(3000000u, bitrate_observer.last_bitrate_bps_); |
99 allocator_->OnNetworkChanged(1500000, 0, 0); | 103 allocator_->OnNetworkChanged(1500000, 0, 0, 0); |
100 EXPECT_EQ(1500000u, bitrate_observer.last_bitrate_bps_); | 104 EXPECT_EQ(1500000u, bitrate_observer.last_bitrate_bps_); |
101 } | 105 } |
102 | 106 |
103 TEST_F(BitrateAllocatorTest, TwoBitrateObserversOneRtcpObserver) { | 107 TEST_F(BitrateAllocatorTest, TwoBitrateObserversOneRtcpObserver) { |
104 TestBitrateObserver bitrate_observer_1; | 108 TestBitrateObserver bitrate_observer_1; |
105 TestBitrateObserver bitrate_observer_2; | 109 TestBitrateObserver bitrate_observer_2; |
106 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(100000, 0)); | 110 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(100000, 0)); |
107 allocator_->AddObserver(&bitrate_observer_1, 100000, 300000, 0, true); | 111 allocator_->AddObserver(&bitrate_observer_1, 100000, 300000, 0, true); |
108 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1)); | 112 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1)); |
109 EXPECT_CALL(limit_observer_, | 113 EXPECT_CALL(limit_observer_, |
110 OnAllocationLimitsChanged(100000 + 200000, 0)); | 114 OnAllocationLimitsChanged(100000 + 200000, 0)); |
111 allocator_->AddObserver(&bitrate_observer_2, 200000, 300000, 0, true); | 115 allocator_->AddObserver(&bitrate_observer_2, 200000, 300000, 0, true); |
112 EXPECT_EQ(200000, allocator_->GetStartBitrate(&bitrate_observer_2)); | 116 EXPECT_EQ(200000, allocator_->GetStartBitrate(&bitrate_observer_2)); |
113 | 117 |
114 // Test too low start bitrate, hence lower than sum of min. Min bitrates | 118 // Test too low start bitrate, hence lower than sum of min. Min bitrates |
115 // will | 119 // will |
116 // be allocated to all observers. | 120 // be allocated to all observers. |
117 allocator_->OnNetworkChanged(200000, 0, 50); | 121 allocator_->OnNetworkChanged(200000, 0, 50, 0); |
118 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); | 122 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); |
119 EXPECT_EQ(0, bitrate_observer_1.last_fraction_loss_); | 123 EXPECT_EQ(0, bitrate_observer_1.last_fraction_loss_); |
120 EXPECT_EQ(50, bitrate_observer_1.last_rtt_ms_); | 124 EXPECT_EQ(50, bitrate_observer_1.last_rtt_ms_); |
121 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_bps_); | 125 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_bps_); |
122 EXPECT_EQ(0, bitrate_observer_2.last_fraction_loss_); | 126 EXPECT_EQ(0, bitrate_observer_2.last_fraction_loss_); |
123 EXPECT_EQ(50, bitrate_observer_2.last_rtt_ms_); | 127 EXPECT_EQ(50, bitrate_observer_2.last_rtt_ms_); |
124 | 128 |
125 // Test a bitrate which should be distributed equally. | 129 // Test a bitrate which should be distributed equally. |
126 allocator_->OnNetworkChanged(500000, 0, 50); | 130 allocator_->OnNetworkChanged(500000, 0, 50, 0); |
127 const uint32_t kBitrateToShare = 500000 - 200000 - 100000; | 131 const uint32_t kBitrateToShare = 500000 - 200000 - 100000; |
128 EXPECT_EQ(100000u + kBitrateToShare / 2, | 132 EXPECT_EQ(100000u + kBitrateToShare / 2, |
129 bitrate_observer_1.last_bitrate_bps_); | 133 bitrate_observer_1.last_bitrate_bps_); |
130 EXPECT_EQ(200000u + kBitrateToShare / 2, | 134 EXPECT_EQ(200000u + kBitrateToShare / 2, |
131 bitrate_observer_2.last_bitrate_bps_); | 135 bitrate_observer_2.last_bitrate_bps_); |
132 | 136 |
133 // Limited by 2x max bitrates since we leave room for FEC and | 137 // Limited by 2x max bitrates since we leave room for FEC and |
134 // retransmissions. | 138 // retransmissions. |
135 allocator_->OnNetworkChanged(1500000, 0, 50); | 139 allocator_->OnNetworkChanged(1500000, 0, 50, 0); |
136 EXPECT_EQ(600000u, bitrate_observer_1.last_bitrate_bps_); | 140 EXPECT_EQ(600000u, bitrate_observer_1.last_bitrate_bps_); |
137 EXPECT_EQ(600000u, bitrate_observer_2.last_bitrate_bps_); | 141 EXPECT_EQ(600000u, bitrate_observer_2.last_bitrate_bps_); |
138 | 142 |
139 // Verify that if the bandwidth estimate is set to zero, the allocated | 143 // Verify that if the bandwidth estimate is set to zero, the allocated |
140 // rate is | 144 // rate is |
141 // zero. | 145 // zero. |
142 allocator_->OnNetworkChanged(0, 0, 50); | 146 allocator_->OnNetworkChanged(0, 0, 50, 0); |
143 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); | 147 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); |
144 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); | 148 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); |
145 } | 149 } |
146 | 150 |
147 TEST_F(BitrateAllocatorTest, RemoveObserverTriggersLimitObserver) { | 151 TEST_F(BitrateAllocatorTest, RemoveObserverTriggersLimitObserver) { |
148 TestBitrateObserver bitrate_observer; | 152 TestBitrateObserver bitrate_observer; |
149 const uint32_t kMinSendBitrateBps = 100000; | 153 const uint32_t kMinSendBitrateBps = 100000; |
150 const uint32_t kPadUpToBitrateBps = 50000; | 154 const uint32_t kPadUpToBitrateBps = 50000; |
151 | 155 |
152 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(kMinSendBitrateBps, | 156 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(kMinSendBitrateBps, |
153 kPadUpToBitrateBps)); | 157 kPadUpToBitrateBps)); |
154 allocator_->AddObserver(&bitrate_observer, kMinSendBitrateBps, 1500000, | 158 allocator_->AddObserver(&bitrate_observer, kMinSendBitrateBps, 1500000, |
155 kPadUpToBitrateBps, true); | 159 kPadUpToBitrateBps, true); |
156 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0)); | 160 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0)); |
157 allocator_->RemoveObserver(&bitrate_observer); | 161 allocator_->RemoveObserver(&bitrate_observer); |
158 } | 162 } |
159 | 163 |
160 class BitrateAllocatorTestNoEnforceMin : public ::testing::Test { | 164 class BitrateAllocatorTestNoEnforceMin : public ::testing::Test { |
161 protected: | 165 protected: |
162 BitrateAllocatorTestNoEnforceMin() | 166 BitrateAllocatorTestNoEnforceMin() |
163 : allocator_(new BitrateAllocator(&limit_observer_)) { | 167 : allocator_(new BitrateAllocator(&limit_observer_)) { |
164 allocator_->OnNetworkChanged(300000u, 0, 0); | 168 allocator_->OnNetworkChanged(300000u, 0, 0, 0); |
165 } | 169 } |
166 ~BitrateAllocatorTestNoEnforceMin() {} | 170 ~BitrateAllocatorTestNoEnforceMin() {} |
167 | 171 |
168 NiceMock<MockLimitObserver> limit_observer_; | 172 NiceMock<MockLimitObserver> limit_observer_; |
169 std::unique_ptr<BitrateAllocator> allocator_; | 173 std::unique_ptr<BitrateAllocator> allocator_; |
170 }; | 174 }; |
171 | 175 |
172 // The following three tests verify enforcing a minimum bitrate works as | 176 // The following three tests verify enforcing a minimum bitrate works as |
173 // intended. | 177 // intended. |
174 TEST_F(BitrateAllocatorTestNoEnforceMin, OneBitrateObserver) { | 178 TEST_F(BitrateAllocatorTestNoEnforceMin, OneBitrateObserver) { |
175 TestBitrateObserver bitrate_observer_1; | 179 TestBitrateObserver bitrate_observer_1; |
176 // Expect OnAllocationLimitsChanged with |min_send_bitrate_bps| = 0 since | 180 // Expect OnAllocationLimitsChanged with |min_send_bitrate_bps| = 0 since |
177 // AddObserver is called with |enforce_min_bitrate| = false. | 181 // AddObserver is called with |enforce_min_bitrate| = false. |
178 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0)); | 182 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0)); |
179 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, 0, false); | 183 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, 0, false); |
180 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1)); | 184 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1)); |
181 | 185 |
182 // High BWE. | 186 // High BWE. |
183 allocator_->OnNetworkChanged(150000, 0, 0); | 187 allocator_->OnNetworkChanged(150000, 0, 0, 0); |
184 EXPECT_EQ(150000u, bitrate_observer_1.last_bitrate_bps_); | 188 EXPECT_EQ(150000u, bitrate_observer_1.last_bitrate_bps_); |
185 | 189 |
186 // Low BWE. | 190 // Low BWE. |
187 allocator_->OnNetworkChanged(10000, 0, 0); | 191 allocator_->OnNetworkChanged(10000, 0, 0, 0); |
188 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); | 192 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); |
189 | 193 |
190 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0)); | 194 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0)); |
191 allocator_->RemoveObserver(&bitrate_observer_1); | 195 allocator_->RemoveObserver(&bitrate_observer_1); |
192 } | 196 } |
193 | 197 |
194 TEST_F(BitrateAllocatorTestNoEnforceMin, ThreeBitrateObservers) { | 198 TEST_F(BitrateAllocatorTestNoEnforceMin, ThreeBitrateObservers) { |
195 TestBitrateObserver bitrate_observer_1; | 199 TestBitrateObserver bitrate_observer_1; |
196 TestBitrateObserver bitrate_observer_2; | 200 TestBitrateObserver bitrate_observer_2; |
197 TestBitrateObserver bitrate_observer_3; | 201 TestBitrateObserver bitrate_observer_3; |
198 // Set up the observers with min bitrates at 100000, 200000, and 300000. | 202 // Set up the observers with min bitrates at 100000, 200000, and 300000. |
199 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, 0, false); | 203 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, 0, false); |
200 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1)); | 204 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1)); |
201 | 205 |
202 allocator_->AddObserver(&bitrate_observer_2, 200000, 400000, 0, false); | 206 allocator_->AddObserver(&bitrate_observer_2, 200000, 400000, 0, false); |
203 EXPECT_EQ(200000, allocator_->GetStartBitrate(&bitrate_observer_2)); | 207 EXPECT_EQ(200000, allocator_->GetStartBitrate(&bitrate_observer_2)); |
204 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); | 208 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); |
205 | 209 |
206 allocator_->AddObserver(&bitrate_observer_3, 300000, 400000, 0, false); | 210 allocator_->AddObserver(&bitrate_observer_3, 300000, 400000, 0, false); |
207 EXPECT_EQ(0, allocator_->GetStartBitrate(&bitrate_observer_3)); | 211 EXPECT_EQ(0, allocator_->GetStartBitrate(&bitrate_observer_3)); |
208 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); | 212 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); |
209 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_bps_); | 213 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_bps_); |
210 | 214 |
211 // High BWE. Make sure the controllers get a fair share of the surplus (i.e., | 215 // High BWE. Make sure the controllers get a fair share of the surplus (i.e., |
212 // what is left after each controller gets its min rate). | 216 // what is left after each controller gets its min rate). |
213 allocator_->OnNetworkChanged(690000, 0, 0); | 217 allocator_->OnNetworkChanged(690000, 0, 0, 0); |
214 // Verify that each observer gets its min rate (sum of min rates is 600000), | 218 // Verify that each observer gets its min rate (sum of min rates is 600000), |
215 // and that the remaining 90000 is divided equally among the three. | 219 // and that the remaining 90000 is divided equally among the three. |
216 uint32_t bitrate_to_share = 690000u - 100000u - 200000u - 300000u; | 220 uint32_t bitrate_to_share = 690000u - 100000u - 200000u - 300000u; |
217 EXPECT_EQ(100000u + bitrate_to_share / 3, | 221 EXPECT_EQ(100000u + bitrate_to_share / 3, |
218 bitrate_observer_1.last_bitrate_bps_); | 222 bitrate_observer_1.last_bitrate_bps_); |
219 EXPECT_EQ(200000u + bitrate_to_share / 3, | 223 EXPECT_EQ(200000u + bitrate_to_share / 3, |
220 bitrate_observer_2.last_bitrate_bps_); | 224 bitrate_observer_2.last_bitrate_bps_); |
221 EXPECT_EQ(300000u + bitrate_to_share / 3, | 225 EXPECT_EQ(300000u + bitrate_to_share / 3, |
222 bitrate_observer_3.last_bitrate_bps_); | 226 bitrate_observer_3.last_bitrate_bps_); |
223 | 227 |
224 // BWE below the sum of observer's min bitrate. | 228 // BWE below the sum of observer's min bitrate. |
225 allocator_->OnNetworkChanged(300000, 0, 0); | 229 allocator_->OnNetworkChanged(300000, 0, 0, 0); |
226 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); // Min bitrate. | 230 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); // Min bitrate. |
227 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_bps_); // Min bitrate. | 231 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_bps_); // Min bitrate. |
228 EXPECT_EQ(0u, bitrate_observer_3.last_bitrate_bps_); // Nothing. | 232 EXPECT_EQ(0u, bitrate_observer_3.last_bitrate_bps_); // Nothing. |
229 | 233 |
230 // Increased BWE, but still below the sum of configured min bitrates for all | 234 // Increased BWE, but still below the sum of configured min bitrates for all |
231 // observers and too little for observer 3. 1 and 2 will share the rest. | 235 // observers and too little for observer 3. 1 and 2 will share the rest. |
232 allocator_->OnNetworkChanged(500000, 0, 0); | 236 allocator_->OnNetworkChanged(500000, 0, 0, 0); |
233 EXPECT_EQ(200000u, bitrate_observer_1.last_bitrate_bps_); // Min + split. | 237 EXPECT_EQ(200000u, bitrate_observer_1.last_bitrate_bps_); // Min + split. |
234 EXPECT_EQ(300000u, bitrate_observer_2.last_bitrate_bps_); // Min + split. | 238 EXPECT_EQ(300000u, bitrate_observer_2.last_bitrate_bps_); // Min + split. |
235 EXPECT_EQ(0u, bitrate_observer_3.last_bitrate_bps_); // Nothing. | 239 EXPECT_EQ(0u, bitrate_observer_3.last_bitrate_bps_); // Nothing. |
236 | 240 |
237 // Below min for all. | 241 // Below min for all. |
238 allocator_->OnNetworkChanged(10000, 0, 0); | 242 allocator_->OnNetworkChanged(10000, 0, 0, 0); |
239 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); | 243 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); |
240 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); | 244 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); |
241 EXPECT_EQ(0u, bitrate_observer_3.last_bitrate_bps_); | 245 EXPECT_EQ(0u, bitrate_observer_3.last_bitrate_bps_); |
242 | 246 |
243 // Verify that zero estimated bandwidth, means that that all gets zero, | 247 // Verify that zero estimated bandwidth, means that that all gets zero, |
244 // regardless of set min bitrate. | 248 // regardless of set min bitrate. |
245 allocator_->OnNetworkChanged(0, 0, 0); | 249 allocator_->OnNetworkChanged(0, 0, 0, 0); |
246 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); | 250 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); |
247 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); | 251 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); |
248 EXPECT_EQ(0u, bitrate_observer_3.last_bitrate_bps_); | 252 EXPECT_EQ(0u, bitrate_observer_3.last_bitrate_bps_); |
249 | 253 |
250 allocator_->RemoveObserver(&bitrate_observer_1); | 254 allocator_->RemoveObserver(&bitrate_observer_1); |
251 allocator_->RemoveObserver(&bitrate_observer_2); | 255 allocator_->RemoveObserver(&bitrate_observer_2); |
252 allocator_->RemoveObserver(&bitrate_observer_3); | 256 allocator_->RemoveObserver(&bitrate_observer_3); |
253 } | 257 } |
254 | 258 |
255 TEST_F(BitrateAllocatorTestNoEnforceMin, OneBitrateObserverWithPacketLoss) { | 259 TEST_F(BitrateAllocatorTestNoEnforceMin, OneBitrateObserverWithPacketLoss) { |
256 TestBitrateObserver bitrate_observer; | 260 TestBitrateObserver bitrate_observer; |
257 // Expect OnAllocationLimitsChanged with |min_send_bitrate_bps| = 0 since | 261 // Expect OnAllocationLimitsChanged with |min_send_bitrate_bps| = 0 since |
258 // AddObserver is called with |enforce_min_bitrate| = false. | 262 // AddObserver is called with |enforce_min_bitrate| = false. |
259 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0)); | 263 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0)); |
260 allocator_->AddObserver( | 264 allocator_->AddObserver( |
261 &bitrate_observer, 100000, 400000, 0, false); | 265 &bitrate_observer, 100000, 400000, 0, false); |
262 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer)); | 266 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer)); |
263 | 267 |
264 // High BWE. | 268 // High BWE. |
265 allocator_->OnNetworkChanged(150000, 0, 0); | 269 allocator_->OnNetworkChanged(150000, 0, 0, 0); |
266 EXPECT_EQ(150000u, bitrate_observer.last_bitrate_bps_); | 270 EXPECT_EQ(150000u, bitrate_observer.last_bitrate_bps_); |
267 | 271 |
268 // Add loss and use a part of the bitrate for protection. | 272 // Add loss and use a part of the bitrate for protection. |
269 double protection_ratio = 0.4; | 273 double protection_ratio = 0.4; |
270 uint8_t fraction_loss = protection_ratio * 256; | 274 uint8_t fraction_loss = protection_ratio * 256; |
271 bitrate_observer.SetBitrateProtectionRatio(protection_ratio); | 275 bitrate_observer.SetBitrateProtectionRatio(protection_ratio); |
272 allocator_->OnNetworkChanged(200000, 0, fraction_loss); | 276 allocator_->OnNetworkChanged(200000, 0, fraction_loss, 0); |
273 EXPECT_EQ(200000u, bitrate_observer.last_bitrate_bps_); | 277 EXPECT_EQ(200000u, bitrate_observer.last_bitrate_bps_); |
274 | 278 |
275 // Above the min threshold, but not enough given the protection used. | 279 // Above the min threshold, but not enough given the protection used. |
276 allocator_->OnNetworkChanged(139000, 0, fraction_loss); | 280 allocator_->OnNetworkChanged(139000, 0, fraction_loss, 0); |
277 EXPECT_EQ(0u, bitrate_observer.last_bitrate_bps_); | 281 EXPECT_EQ(0u, bitrate_observer.last_bitrate_bps_); |
278 | 282 |
279 // Verify the hysteresis is added for the protection. | 283 // Verify the hysteresis is added for the protection. |
280 allocator_->OnNetworkChanged(150000, 0, fraction_loss); | 284 allocator_->OnNetworkChanged(150000, 0, fraction_loss, 0); |
281 EXPECT_EQ(0u, bitrate_observer.last_bitrate_bps_); | 285 EXPECT_EQ(0u, bitrate_observer.last_bitrate_bps_); |
282 | 286 |
283 // Just enough to enable video again. | 287 // Just enough to enable video again. |
284 allocator_->OnNetworkChanged(168000, 0, fraction_loss); | 288 allocator_->OnNetworkChanged(168000, 0, fraction_loss, 0); |
285 EXPECT_EQ(168000u, bitrate_observer.last_bitrate_bps_); | 289 EXPECT_EQ(168000u, bitrate_observer.last_bitrate_bps_); |
286 | 290 |
287 // Remove all protection and make sure video is not paused as earlier. | 291 // Remove all protection and make sure video is not paused as earlier. |
288 bitrate_observer.SetBitrateProtectionRatio(0.0); | 292 bitrate_observer.SetBitrateProtectionRatio(0.0); |
289 allocator_->OnNetworkChanged(140000, 0, 0); | 293 allocator_->OnNetworkChanged(140000, 0, 0, 0); |
290 EXPECT_EQ(140000u, bitrate_observer.last_bitrate_bps_); | 294 EXPECT_EQ(140000u, bitrate_observer.last_bitrate_bps_); |
291 | 295 |
292 allocator_->OnNetworkChanged(139000, 0, 0); | 296 allocator_->OnNetworkChanged(139000, 0, 0, 0); |
293 EXPECT_EQ(139000u, bitrate_observer.last_bitrate_bps_); | 297 EXPECT_EQ(139000u, bitrate_observer.last_bitrate_bps_); |
294 | 298 |
295 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0)); | 299 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(0, 0)); |
296 allocator_->RemoveObserver(&bitrate_observer); | 300 allocator_->RemoveObserver(&bitrate_observer); |
297 } | 301 } |
298 | 302 |
299 TEST_F(BitrateAllocatorTestNoEnforceMin, TwoBitrateObserverWithPacketLoss) { | 303 TEST_F(BitrateAllocatorTestNoEnforceMin, TwoBitrateObserverWithPacketLoss) { |
300 TestBitrateObserver bitrate_observer_1; | 304 TestBitrateObserver bitrate_observer_1; |
301 TestBitrateObserver bitrate_observer_2; | 305 TestBitrateObserver bitrate_observer_2; |
302 | 306 |
303 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, 0, false); | 307 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, 0, false); |
304 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1)); | 308 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1)); |
305 allocator_->AddObserver(&bitrate_observer_2, 200000, 400000, 0, false); | 309 allocator_->AddObserver(&bitrate_observer_2, 200000, 400000, 0, false); |
306 EXPECT_EQ(200000, allocator_->GetStartBitrate(&bitrate_observer_2)); | 310 EXPECT_EQ(200000, allocator_->GetStartBitrate(&bitrate_observer_2)); |
307 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); | 311 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); |
308 | 312 |
309 // Enough bitrate for both. | 313 // Enough bitrate for both. |
310 bitrate_observer_2.SetBitrateProtectionRatio(0.5); | 314 bitrate_observer_2.SetBitrateProtectionRatio(0.5); |
311 allocator_->OnNetworkChanged(300000, 0, 0); | 315 allocator_->OnNetworkChanged(300000, 0, 0, 0); |
312 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); | 316 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); |
313 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_bps_); | 317 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_bps_); |
314 | 318 |
315 // Above min for observer 2, but too little given the protection used. | 319 // Above min for observer 2, but too little given the protection used. |
316 allocator_->OnNetworkChanged(330000, 0, 0); | 320 allocator_->OnNetworkChanged(330000, 0, 0, 0); |
317 EXPECT_EQ(330000u, bitrate_observer_1.last_bitrate_bps_); | 321 EXPECT_EQ(330000u, bitrate_observer_1.last_bitrate_bps_); |
318 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); | 322 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); |
319 | 323 |
320 allocator_->OnNetworkChanged(100000, 0, 0); | 324 allocator_->OnNetworkChanged(100000, 0, 0, 0); |
321 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); | 325 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); |
322 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); | 326 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); |
323 | 327 |
324 allocator_->OnNetworkChanged(99999, 0, 0); | 328 allocator_->OnNetworkChanged(99999, 0, 0, 0); |
325 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); | 329 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); |
326 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); | 330 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); |
327 | 331 |
328 allocator_->OnNetworkChanged(119000, 0, 0); | 332 allocator_->OnNetworkChanged(119000, 0, 0, 0); |
329 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); | 333 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); |
330 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); | 334 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); |
331 | 335 |
332 allocator_->OnNetworkChanged(120000, 0, 0); | 336 allocator_->OnNetworkChanged(120000, 0, 0, 0); |
333 EXPECT_EQ(120000u, bitrate_observer_1.last_bitrate_bps_); | 337 EXPECT_EQ(120000u, bitrate_observer_1.last_bitrate_bps_); |
334 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); | 338 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); |
335 | 339 |
336 // Verify the protection is accounted for before resuming observer 2. | 340 // Verify the protection is accounted for before resuming observer 2. |
337 allocator_->OnNetworkChanged(429000, 0, 0); | 341 allocator_->OnNetworkChanged(429000, 0, 0, 0); |
338 EXPECT_EQ(400000u, bitrate_observer_1.last_bitrate_bps_); | 342 EXPECT_EQ(400000u, bitrate_observer_1.last_bitrate_bps_); |
339 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); | 343 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); |
340 | 344 |
341 allocator_->OnNetworkChanged(430000, 0, 0); | 345 allocator_->OnNetworkChanged(430000, 0, 0, 0); |
342 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); | 346 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); |
343 EXPECT_EQ(330000u, bitrate_observer_2.last_bitrate_bps_); | 347 EXPECT_EQ(330000u, bitrate_observer_2.last_bitrate_bps_); |
344 | 348 |
345 allocator_->RemoveObserver(&bitrate_observer_1); | 349 allocator_->RemoveObserver(&bitrate_observer_1); |
346 allocator_->RemoveObserver(&bitrate_observer_2); | 350 allocator_->RemoveObserver(&bitrate_observer_2); |
347 } | 351 } |
348 | 352 |
349 TEST_F(BitrateAllocatorTest, ThreeBitrateObserversLowBweEnforceMin) { | 353 TEST_F(BitrateAllocatorTest, ThreeBitrateObserversLowBweEnforceMin) { |
350 TestBitrateObserver bitrate_observer_1; | 354 TestBitrateObserver bitrate_observer_1; |
351 TestBitrateObserver bitrate_observer_2; | 355 TestBitrateObserver bitrate_observer_2; |
352 TestBitrateObserver bitrate_observer_3; | 356 TestBitrateObserver bitrate_observer_3; |
353 | 357 |
354 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, 0, true); | 358 allocator_->AddObserver(&bitrate_observer_1, 100000, 400000, 0, true); |
355 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1)); | 359 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1)); |
356 | 360 |
357 allocator_->AddObserver(&bitrate_observer_2, 200000, 400000, 0, true); | 361 allocator_->AddObserver(&bitrate_observer_2, 200000, 400000, 0, true); |
358 EXPECT_EQ(200000, allocator_->GetStartBitrate(&bitrate_observer_2)); | 362 EXPECT_EQ(200000, allocator_->GetStartBitrate(&bitrate_observer_2)); |
359 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); | 363 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); |
360 | 364 |
361 allocator_->AddObserver(&bitrate_observer_3, 300000, 400000, 0, true); | 365 allocator_->AddObserver(&bitrate_observer_3, 300000, 400000, 0, true); |
362 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_3)); | 366 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_3)); |
363 EXPECT_EQ(100000, static_cast<int>(bitrate_observer_1.last_bitrate_bps_)); | 367 EXPECT_EQ(100000, static_cast<int>(bitrate_observer_1.last_bitrate_bps_)); |
364 EXPECT_EQ(200000, static_cast<int>(bitrate_observer_2.last_bitrate_bps_)); | 368 EXPECT_EQ(200000, static_cast<int>(bitrate_observer_2.last_bitrate_bps_)); |
365 | 369 |
366 // Low BWE. Verify that all observers still get their respective min | 370 // Low BWE. Verify that all observers still get their respective min |
367 // bitrate. | 371 // bitrate. |
368 allocator_->OnNetworkChanged(1000, 0, 0); | 372 allocator_->OnNetworkChanged(1000, 0, 0, 0); |
369 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); // Min cap. | 373 EXPECT_EQ(100000u, bitrate_observer_1.last_bitrate_bps_); // Min cap. |
370 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_bps_); // Min cap. | 374 EXPECT_EQ(200000u, bitrate_observer_2.last_bitrate_bps_); // Min cap. |
371 EXPECT_EQ(300000u, bitrate_observer_3.last_bitrate_bps_); // Min cap. | 375 EXPECT_EQ(300000u, bitrate_observer_3.last_bitrate_bps_); // Min cap. |
372 | 376 |
373 allocator_->RemoveObserver(&bitrate_observer_1); | 377 allocator_->RemoveObserver(&bitrate_observer_1); |
374 allocator_->RemoveObserver(&bitrate_observer_2); | 378 allocator_->RemoveObserver(&bitrate_observer_2); |
375 allocator_->RemoveObserver(&bitrate_observer_3); | 379 allocator_->RemoveObserver(&bitrate_observer_3); |
376 } | 380 } |
377 | 381 |
378 TEST_F(BitrateAllocatorTest, AddObserverWhileNetworkDown) { | 382 TEST_F(BitrateAllocatorTest, AddObserverWhileNetworkDown) { |
379 TestBitrateObserver bitrate_observer_1; | 383 TestBitrateObserver bitrate_observer_1; |
380 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(50000, 0)); | 384 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(50000, 0)); |
381 | 385 |
382 allocator_->AddObserver(&bitrate_observer_1, 50000, 400000, 0, true); | 386 allocator_->AddObserver(&bitrate_observer_1, 50000, 400000, 0, true); |
383 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1)); | 387 EXPECT_EQ(300000, allocator_->GetStartBitrate(&bitrate_observer_1)); |
384 | 388 |
385 // Set network down, ie, no available bitrate. | 389 // Set network down, ie, no available bitrate. |
386 allocator_->OnNetworkChanged(0, 0, 0); | 390 allocator_->OnNetworkChanged(0, 0, 0, 0); |
387 | 391 |
388 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); | 392 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); |
389 | 393 |
390 TestBitrateObserver bitrate_observer_2; | 394 TestBitrateObserver bitrate_observer_2; |
391 // Adding an observer while the network is down should not affect the limits. | 395 // Adding an observer while the network is down should not affect the limits. |
392 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(50000 + 50000, 0)); | 396 EXPECT_CALL(limit_observer_, OnAllocationLimitsChanged(50000 + 50000, 0)); |
393 allocator_->AddObserver(&bitrate_observer_2, 50000, 400000, 0, true); | 397 allocator_->AddObserver(&bitrate_observer_2, 50000, 400000, 0, true); |
394 | 398 |
395 // Expect the start_bitrate to be set as if the network was still up but that | 399 // Expect the start_bitrate to be set as if the network was still up but that |
396 // the new observer have been notified that the network is down. | 400 // the new observer have been notified that the network is down. |
397 EXPECT_EQ(300000 / 2, allocator_->GetStartBitrate(&bitrate_observer_2)); | 401 EXPECT_EQ(300000 / 2, allocator_->GetStartBitrate(&bitrate_observer_2)); |
398 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); | 402 EXPECT_EQ(0u, bitrate_observer_1.last_bitrate_bps_); |
399 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); | 403 EXPECT_EQ(0u, bitrate_observer_2.last_bitrate_bps_); |
400 | 404 |
401 // Set network back up. | 405 // Set network back up. |
402 allocator_->OnNetworkChanged(1500000, 0, 50); | 406 allocator_->OnNetworkChanged(1500000, 0, 50, 0); |
403 EXPECT_EQ(750000u, bitrate_observer_1.last_bitrate_bps_); | 407 EXPECT_EQ(750000u, bitrate_observer_1.last_bitrate_bps_); |
404 EXPECT_EQ(750000u, bitrate_observer_2.last_bitrate_bps_); | 408 EXPECT_EQ(750000u, bitrate_observer_2.last_bitrate_bps_); |
405 } | 409 } |
406 | 410 |
407 TEST_F(BitrateAllocatorTest, MixedEnforecedConfigs) { | 411 TEST_F(BitrateAllocatorTest, MixedEnforecedConfigs) { |
408 TestBitrateObserver enforced_observer; | 412 TestBitrateObserver enforced_observer; |
409 allocator_->AddObserver(&enforced_observer, 6000, 30000, 0, true); | 413 allocator_->AddObserver(&enforced_observer, 6000, 30000, 0, true); |
410 EXPECT_EQ(60000, allocator_->GetStartBitrate(&enforced_observer)); | 414 EXPECT_EQ(60000, allocator_->GetStartBitrate(&enforced_observer)); |
411 | 415 |
412 TestBitrateObserver not_enforced_observer; | 416 TestBitrateObserver not_enforced_observer; |
413 allocator_->AddObserver(¬_enforced_observer, 30000, 2500000, 0, false); | 417 allocator_->AddObserver(¬_enforced_observer, 30000, 2500000, 0, false); |
414 EXPECT_EQ(270000, allocator_->GetStartBitrate(¬_enforced_observer)); | 418 EXPECT_EQ(270000, allocator_->GetStartBitrate(¬_enforced_observer)); |
415 EXPECT_EQ(30000u, enforced_observer.last_bitrate_bps_); | 419 EXPECT_EQ(30000u, enforced_observer.last_bitrate_bps_); |
416 | 420 |
417 allocator_->OnNetworkChanged(36000, 0, 50); | 421 allocator_->OnNetworkChanged(36000, 0, 50, 0); |
418 EXPECT_EQ(6000u, enforced_observer.last_bitrate_bps_); | 422 EXPECT_EQ(6000u, enforced_observer.last_bitrate_bps_); |
419 EXPECT_EQ(30000u, not_enforced_observer.last_bitrate_bps_); | 423 EXPECT_EQ(30000u, not_enforced_observer.last_bitrate_bps_); |
420 | 424 |
421 allocator_->OnNetworkChanged(35000, 0, 50); | 425 allocator_->OnNetworkChanged(35000, 0, 50, 0); |
422 EXPECT_EQ(30000u, enforced_observer.last_bitrate_bps_); | 426 EXPECT_EQ(30000u, enforced_observer.last_bitrate_bps_); |
423 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_bps_); | 427 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_bps_); |
424 | 428 |
425 allocator_->OnNetworkChanged(5000, 0, 50); | 429 allocator_->OnNetworkChanged(5000, 0, 50, 0); |
426 EXPECT_EQ(6000u, enforced_observer.last_bitrate_bps_); | 430 EXPECT_EQ(6000u, enforced_observer.last_bitrate_bps_); |
427 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_bps_); | 431 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_bps_); |
428 | 432 |
429 allocator_->OnNetworkChanged(36000, 0, 50); | 433 allocator_->OnNetworkChanged(36000, 0, 50, 0); |
430 EXPECT_EQ(30000u, enforced_observer.last_bitrate_bps_); | 434 EXPECT_EQ(30000u, enforced_observer.last_bitrate_bps_); |
431 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_bps_); | 435 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_bps_); |
432 | 436 |
433 allocator_->OnNetworkChanged(55000, 0, 50); | 437 allocator_->OnNetworkChanged(55000, 0, 50, 0); |
434 EXPECT_EQ(30000u, enforced_observer.last_bitrate_bps_); | 438 EXPECT_EQ(30000u, enforced_observer.last_bitrate_bps_); |
435 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_bps_); | 439 EXPECT_EQ(0u, not_enforced_observer.last_bitrate_bps_); |
436 | 440 |
437 allocator_->OnNetworkChanged(56000, 0, 50); | 441 allocator_->OnNetworkChanged(56000, 0, 50, 0); |
438 EXPECT_EQ(6000u, enforced_observer.last_bitrate_bps_); | 442 EXPECT_EQ(6000u, enforced_observer.last_bitrate_bps_); |
439 EXPECT_EQ(50000u, not_enforced_observer.last_bitrate_bps_); | 443 EXPECT_EQ(50000u, not_enforced_observer.last_bitrate_bps_); |
440 | 444 |
441 allocator_->OnNetworkChanged(56000, 0, 50); | 445 allocator_->OnNetworkChanged(56000, 0, 50, 0); |
442 EXPECT_EQ(16000u, enforced_observer.last_bitrate_bps_); | 446 EXPECT_EQ(16000u, enforced_observer.last_bitrate_bps_); |
443 EXPECT_EQ(40000u, not_enforced_observer.last_bitrate_bps_); | 447 EXPECT_EQ(40000u, not_enforced_observer.last_bitrate_bps_); |
444 | 448 |
445 allocator_->RemoveObserver(&enforced_observer); | 449 allocator_->RemoveObserver(&enforced_observer); |
446 allocator_->RemoveObserver(¬_enforced_observer); | 450 allocator_->RemoveObserver(¬_enforced_observer); |
447 } | 451 } |
448 | 452 |
449 TEST_F(BitrateAllocatorTest, AvoidToggleAbsolute) { | 453 TEST_F(BitrateAllocatorTest, AvoidToggleAbsolute) { |
450 TestBitrateObserver observer; | 454 TestBitrateObserver observer; |
451 allocator_->AddObserver(&observer, 30000, 300000, 0, false); | 455 allocator_->AddObserver(&observer, 30000, 300000, 0, false); |
452 EXPECT_EQ(300000, allocator_->GetStartBitrate(&observer)); | 456 EXPECT_EQ(300000, allocator_->GetStartBitrate(&observer)); |
453 | 457 |
454 allocator_->OnNetworkChanged(30000, 0, 50); | 458 allocator_->OnNetworkChanged(30000, 0, 50, 0); |
455 EXPECT_EQ(30000u, observer.last_bitrate_bps_); | 459 EXPECT_EQ(30000u, observer.last_bitrate_bps_); |
456 | 460 |
457 allocator_->OnNetworkChanged(20000, 0, 50); | 461 allocator_->OnNetworkChanged(20000, 0, 50, 0); |
458 EXPECT_EQ(0u, observer.last_bitrate_bps_); | 462 EXPECT_EQ(0u, observer.last_bitrate_bps_); |
459 | 463 |
460 allocator_->OnNetworkChanged(30000, 0, 50); | 464 allocator_->OnNetworkChanged(30000, 0, 50, 0); |
461 EXPECT_EQ(0u, observer.last_bitrate_bps_); | 465 EXPECT_EQ(0u, observer.last_bitrate_bps_); |
462 | 466 |
463 allocator_->OnNetworkChanged(49000, 0, 50); | 467 allocator_->OnNetworkChanged(49000, 0, 50, 0); |
464 EXPECT_EQ(0u, observer.last_bitrate_bps_); | 468 EXPECT_EQ(0u, observer.last_bitrate_bps_); |
465 | 469 |
466 allocator_->OnNetworkChanged(50000, 0, 50); | 470 allocator_->OnNetworkChanged(50000, 0, 50, 0); |
467 EXPECT_EQ(50000u, observer.last_bitrate_bps_); | 471 EXPECT_EQ(50000u, observer.last_bitrate_bps_); |
468 | 472 |
469 allocator_->OnNetworkChanged(30000, 0, 50); | 473 allocator_->OnNetworkChanged(30000, 0, 50, 0); |
470 EXPECT_EQ(30000u, observer.last_bitrate_bps_); | 474 EXPECT_EQ(30000u, observer.last_bitrate_bps_); |
471 | 475 |
472 allocator_->RemoveObserver(&observer); | 476 allocator_->RemoveObserver(&observer); |
473 } | 477 } |
474 | 478 |
475 TEST_F(BitrateAllocatorTest, AvoidTogglePercent) { | 479 TEST_F(BitrateAllocatorTest, AvoidTogglePercent) { |
476 TestBitrateObserver observer; | 480 TestBitrateObserver observer; |
477 allocator_->AddObserver(&observer, 300000, 600000, 0, false); | 481 allocator_->AddObserver(&observer, 300000, 600000, 0, false); |
478 EXPECT_EQ(300000, allocator_->GetStartBitrate(&observer)); | 482 EXPECT_EQ(300000, allocator_->GetStartBitrate(&observer)); |
479 | 483 |
480 allocator_->OnNetworkChanged(300000, 0, 50); | 484 allocator_->OnNetworkChanged(300000, 0, 50, 0); |
481 EXPECT_EQ(300000u, observer.last_bitrate_bps_); | 485 EXPECT_EQ(300000u, observer.last_bitrate_bps_); |
482 | 486 |
483 allocator_->OnNetworkChanged(200000, 0, 50); | 487 allocator_->OnNetworkChanged(200000, 0, 50, 0); |
484 EXPECT_EQ(0u, observer.last_bitrate_bps_); | 488 EXPECT_EQ(0u, observer.last_bitrate_bps_); |
485 | 489 |
486 allocator_->OnNetworkChanged(300000, 0, 50); | 490 allocator_->OnNetworkChanged(300000, 0, 50, 0); |
487 EXPECT_EQ(0u, observer.last_bitrate_bps_); | 491 EXPECT_EQ(0u, observer.last_bitrate_bps_); |
488 | 492 |
489 allocator_->OnNetworkChanged(329000, 0, 50); | 493 allocator_->OnNetworkChanged(329000, 0, 50, 0); |
490 EXPECT_EQ(0u, observer.last_bitrate_bps_); | 494 EXPECT_EQ(0u, observer.last_bitrate_bps_); |
491 | 495 |
492 allocator_->OnNetworkChanged(330000, 0, 50); | 496 allocator_->OnNetworkChanged(330000, 0, 50, 0); |
493 EXPECT_EQ(330000u, observer.last_bitrate_bps_); | 497 EXPECT_EQ(330000u, observer.last_bitrate_bps_); |
494 | 498 |
495 allocator_->OnNetworkChanged(300000, 0, 50); | 499 allocator_->OnNetworkChanged(300000, 0, 50, 0); |
496 EXPECT_EQ(300000u, observer.last_bitrate_bps_); | 500 EXPECT_EQ(300000u, observer.last_bitrate_bps_); |
497 | 501 |
498 allocator_->RemoveObserver(&observer); | 502 allocator_->RemoveObserver(&observer); |
499 } | 503 } |
500 | 504 |
505 TEST_F(BitrateAllocatorTest, PassProbingInterval) { | |
506 TestBitrateObserver observer; | |
507 allocator_->AddObserver(&observer, 300000, 600000, 0, false); | |
508 EXPECT_EQ(300000, allocator_->GetStartBitrate(&observer)); | |
509 | |
510 allocator_->OnNetworkChanged(300000, 0, 50, 5000); | |
511 EXPECT_EQ(5000, observer.last_probing_interval_ms_); | |
512 | |
513 allocator_->OnNetworkChanged(300000, 0, 50, 8000); | |
minyue-webrtc
2016/11/28 12:00:00
what is the additional value of testing the second
michaelt
2016/11/28 13:03:37
It shows that in the observe not just a fixed valu
| |
514 EXPECT_EQ(8000, observer.last_probing_interval_ms_); | |
515 | |
516 allocator_->RemoveObserver(&observer); | |
517 } | |
518 | |
501 } // namespace webrtc | 519 } // namespace webrtc |
OLD | NEW |