Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(32)

Side by Side Diff: webrtc/call/bitrate_allocator_unittest.cc

Issue 2518923003: Pass time constant to bwe smoothing filter. (Closed)
Patch Set: Removed Optional in SetBitrate Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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(&not_enforced_observer, 30000, 2500000, 0, false); 417 allocator_->AddObserver(&not_enforced_observer, 30000, 2500000, 0, false);
414 EXPECT_EQ(270000, allocator_->GetStartBitrate(&not_enforced_observer)); 418 EXPECT_EQ(270000, allocator_->GetStartBitrate(&not_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(&not_enforced_observer); 450 allocator_->RemoveObserver(&not_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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698