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

Side by Side Diff: webrtc/modules/remote_bitrate_estimator/test/estimators/nada_unittest.cc

Issue 2201093006: Tune BWE to be more sensitive on low capacity networks. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Tests passing. Created 4 years, 4 months 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
« no previous file with comments | « webrtc/modules/remote_bitrate_estimator/test/estimators/nada.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2015 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 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 private: 163 private:
164 // Arbitrary values, won't change these test results. 164 // Arbitrary values, won't change these test results.
165 static const int kFlowId = 2; 165 static const int kFlowId = 2;
166 static const int64_t kNowMs = 1000; 166 static const int64_t kNowMs = 1000;
167 }; 167 };
168 168
169 // Verify if AcceleratedRampUp is called and that bitrate increases. 169 // Verify if AcceleratedRampUp is called and that bitrate increases.
170 TEST_F(NadaSenderSideTest, AcceleratedRampUp) { 170 TEST_F(NadaSenderSideTest, AcceleratedRampUp) {
171 const int64_t kRefSignalMs = 1; 171 const int64_t kRefSignalMs = 1;
172 const int64_t kOneWayDelayMs = 50; 172 const int64_t kOneWayDelayMs = 50;
173 int original_bitrate = 2 * kMinBitrateKbps; 173 int original_bitrate = 2 * NadaBweSender::kMinNadaBitrateKbps;
174 size_t receiving_rate = static_cast<size_t>(original_bitrate); 174 size_t receiving_rate = static_cast<size_t>(original_bitrate);
175 int64_t send_time_ms = nada_sender_.NowMs() - kOneWayDelayMs; 175 int64_t send_time_ms = nada_sender_.NowMs() - kOneWayDelayMs;
176 176
177 NadaFeedback not_congested_fb = NadaFbGenerator::NotCongestedFb( 177 NadaFeedback not_congested_fb = NadaFbGenerator::NotCongestedFb(
178 receiving_rate, kRefSignalMs, send_time_ms); 178 receiving_rate, kRefSignalMs, send_time_ms);
179 179
180 nada_sender_.set_original_operating_mode(true); 180 nada_sender_.set_original_operating_mode(true);
181 nada_sender_.set_bitrate_kbps(original_bitrate); 181 nada_sender_.set_bitrate_kbps(original_bitrate);
182 182
183 // Trigger AcceleratedRampUp mode. 183 // Trigger AcceleratedRampUp mode.
(...skipping 11 matching lines...) Expand all
195 nada_sender_.GiveFeedback(not_congested_fb); 195 nada_sender_.GiveFeedback(not_congested_fb);
196 bitrate_1_kbps = nada_sender_.bitrate_kbps(); 196 bitrate_1_kbps = nada_sender_.bitrate_kbps();
197 EXPECT_GT(bitrate_1_kbps, original_bitrate); 197 EXPECT_GT(bitrate_1_kbps, original_bitrate);
198 nada_sender_.AcceleratedRampUp(not_congested_fb); 198 nada_sender_.AcceleratedRampUp(not_congested_fb);
199 EXPECT_EQ(nada_sender_.bitrate_kbps(), bitrate_1_kbps); 199 EXPECT_EQ(nada_sender_.bitrate_kbps(), bitrate_1_kbps);
200 } 200 }
201 201
202 // Verify if AcceleratedRampDown is called and if bitrate decreases. 202 // Verify if AcceleratedRampDown is called and if bitrate decreases.
203 TEST_F(NadaSenderSideTest, AcceleratedRampDown) { 203 TEST_F(NadaSenderSideTest, AcceleratedRampDown) {
204 const int64_t kOneWayDelayMs = 50; 204 const int64_t kOneWayDelayMs = 50;
205 int original_bitrate = 3 * kMinBitrateKbps; 205 int original_bitrate = 3 * NadaBweSender::kMinNadaBitrateKbps;
206 size_t receiving_rate = static_cast<size_t>(original_bitrate); 206 size_t receiving_rate = static_cast<size_t>(original_bitrate);
207 int64_t send_time_ms = nada_sender_.NowMs() - kOneWayDelayMs; 207 int64_t send_time_ms = nada_sender_.NowMs() - kOneWayDelayMs;
208 208
209 NadaFeedback congested_fb = 209 NadaFeedback congested_fb =
210 NadaFbGenerator::CongestedFb(receiving_rate, send_time_ms); 210 NadaFbGenerator::CongestedFb(receiving_rate, send_time_ms);
211 211
212 nada_sender_.set_original_operating_mode(false); 212 nada_sender_.set_original_operating_mode(false);
213 nada_sender_.set_bitrate_kbps(original_bitrate); 213 nada_sender_.set_bitrate_kbps(original_bitrate);
214 nada_sender_.GiveFeedback(congested_fb); // Trigger AcceleratedRampDown mode. 214 nada_sender_.GiveFeedback(congested_fb); // Trigger AcceleratedRampDown mode.
215 int bitrate_1_kbps = nada_sender_.bitrate_kbps(); 215 int bitrate_1_kbps = nada_sender_.bitrate_kbps();
216 EXPECT_LE(bitrate_1_kbps, original_bitrate * 0.9f + 0.5f); 216 EXPECT_LE(bitrate_1_kbps, original_bitrate * 0.9f + 0.5f);
217 EXPECT_LT(bitrate_1_kbps, original_bitrate); 217 EXPECT_LT(bitrate_1_kbps, original_bitrate);
218 218
219 // Updates the bitrate according to the receiving rate and other constant 219 // Updates the bitrate according to the receiving rate and other constant
220 // parameters. 220 // parameters.
221 nada_sender_.AcceleratedRampDown(congested_fb); 221 nada_sender_.AcceleratedRampDown(congested_fb);
222 int bitrate_2_kbps = std::max(nada_sender_.bitrate_kbps(), kMinBitrateKbps); 222 int bitrate_2_kbps =
223 std::max(nada_sender_.bitrate_kbps(), NadaBweSender::kMinNadaBitrateKbps);
223 EXPECT_EQ(bitrate_2_kbps, bitrate_1_kbps); 224 EXPECT_EQ(bitrate_2_kbps, bitrate_1_kbps);
224 } 225 }
225 226
226 TEST_F(NadaSenderSideTest, GradualRateUpdate) { 227 TEST_F(NadaSenderSideTest, GradualRateUpdate) {
227 const int64_t kDeltaSMs = 20; 228 const int64_t kDeltaSMs = 20;
228 const int64_t kRefSignalMs = 20; 229 const int64_t kRefSignalMs = 20;
229 const int64_t kOneWayDelayMs = 50; 230 const int64_t kOneWayDelayMs = 50;
230 int original_bitrate = 2 * kMinBitrateKbps; 231 int original_bitrate = 2 * NadaBweSender::kMinNadaBitrateKbps;
231 size_t receiving_rate = static_cast<size_t>(original_bitrate); 232 size_t receiving_rate = static_cast<size_t>(original_bitrate);
232 int64_t send_time_ms = nada_sender_.NowMs() - kOneWayDelayMs; 233 int64_t send_time_ms = nada_sender_.NowMs() - kOneWayDelayMs;
233 234
234 NadaFeedback congested_fb = 235 NadaFeedback congested_fb =
235 NadaFbGenerator::CongestedFb(receiving_rate, send_time_ms); 236 NadaFbGenerator::CongestedFb(receiving_rate, send_time_ms);
236 NadaFeedback not_congested_fb = NadaFbGenerator::NotCongestedFb( 237 NadaFeedback not_congested_fb = NadaFbGenerator::NotCongestedFb(
237 original_bitrate, kRefSignalMs, send_time_ms); 238 original_bitrate, kRefSignalMs, send_time_ms);
238 239
239 nada_sender_.set_bitrate_kbps(original_bitrate); 240 nada_sender_.set_bitrate_kbps(original_bitrate);
240 double smoothing_factor = 0.0; 241 double smoothing_factor = 0.0;
241 nada_sender_.GradualRateUpdate(congested_fb, kDeltaSMs, smoothing_factor); 242 nada_sender_.GradualRateUpdate(congested_fb, kDeltaSMs, smoothing_factor);
242 EXPECT_EQ(nada_sender_.bitrate_kbps(), original_bitrate); 243 EXPECT_EQ(nada_sender_.bitrate_kbps(), original_bitrate);
243 244
244 smoothing_factor = 1.0; 245 smoothing_factor = 1.0;
245 nada_sender_.GradualRateUpdate(congested_fb, kDeltaSMs, smoothing_factor); 246 nada_sender_.GradualRateUpdate(congested_fb, kDeltaSMs, smoothing_factor);
246 EXPECT_LT(nada_sender_.bitrate_kbps(), original_bitrate); 247 EXPECT_LT(nada_sender_.bitrate_kbps(), original_bitrate);
247 248
248 nada_sender_.set_bitrate_kbps(original_bitrate); 249 nada_sender_.set_bitrate_kbps(original_bitrate);
249 nada_sender_.GradualRateUpdate(not_congested_fb, kDeltaSMs, smoothing_factor); 250 nada_sender_.GradualRateUpdate(not_congested_fb, kDeltaSMs, smoothing_factor);
250 EXPECT_GT(nada_sender_.bitrate_kbps(), original_bitrate); 251 EXPECT_GT(nada_sender_.bitrate_kbps(), original_bitrate);
251 } 252 }
252 253
253 // Sending bitrate should decrease and reach its Min bound. 254 // Sending bitrate should decrease and reach its Min bound.
254 TEST_F(NadaSenderSideTest, VeryLowBandwith) { 255 TEST_F(NadaSenderSideTest, VeryLowBandwith) {
255 const int64_t kOneWayDelayMs = 50; 256 const int64_t kOneWayDelayMs = 50;
256 257
257 size_t receiving_rate = static_cast<size_t>(kMinBitrateKbps); 258 size_t receiving_rate =
259 static_cast<size_t>(NadaBweSender::kMinNadaBitrateKbps);
258 int64_t send_time_ms = nada_sender_.NowMs() - kOneWayDelayMs; 260 int64_t send_time_ms = nada_sender_.NowMs() - kOneWayDelayMs;
259 261
260 NadaFeedback extremely_congested_fb = 262 NadaFeedback extremely_congested_fb =
261 NadaFbGenerator::ExtremelyCongestedFb(receiving_rate, send_time_ms); 263 NadaFbGenerator::ExtremelyCongestedFb(receiving_rate, send_time_ms);
262 NadaFeedback congested_fb = 264 NadaFeedback congested_fb =
263 NadaFbGenerator::CongestedFb(receiving_rate, send_time_ms); 265 NadaFbGenerator::CongestedFb(receiving_rate, send_time_ms);
264 266
265 nada_sender_.set_bitrate_kbps(5 * kMinBitrateKbps); 267 nada_sender_.set_bitrate_kbps(5 * NadaBweSender::kMinNadaBitrateKbps);
266 nada_sender_.set_original_operating_mode(true); 268 nada_sender_.set_original_operating_mode(true);
267 for (int i = 0; i < 100; ++i) { 269 for (int i = 0; i < 100; ++i) {
268 // Trigger GradualRateUpdate mode. 270 // Trigger GradualRateUpdate mode.
269 nada_sender_.GiveFeedback(extremely_congested_fb); 271 nada_sender_.GiveFeedback(extremely_congested_fb);
270 } 272 }
271 // The original implementation doesn't allow the bitrate to stay at kMin, 273 // The original implementation doesn't allow the bitrate to stay at kMin,
272 // even if the congestion signal is very high. 274 // even if the congestion signal is very high.
273 EXPECT_GE(nada_sender_.bitrate_kbps(), kMinBitrateKbps); 275 EXPECT_GE(nada_sender_.bitrate_kbps(), NadaBweSender::kMinNadaBitrateKbps);
274 276
275 nada_sender_.set_original_operating_mode(false); 277 nada_sender_.set_original_operating_mode(false);
276 nada_sender_.set_bitrate_kbps(5 * kMinBitrateKbps); 278 nada_sender_.set_bitrate_kbps(5 * NadaBweSender::kMinNadaBitrateKbps);
277 279
278 for (int i = 0; i < 1000; ++i) { 280 for (int i = 0; i < 1000; ++i) {
279 int previous_bitrate = nada_sender_.bitrate_kbps(); 281 int previous_bitrate = nada_sender_.bitrate_kbps();
280 // Trigger AcceleratedRampDown mode. 282 // Trigger AcceleratedRampDown mode.
281 nada_sender_.GiveFeedback(congested_fb); 283 nada_sender_.GiveFeedback(congested_fb);
282 EXPECT_LE(nada_sender_.bitrate_kbps(), previous_bitrate); 284 EXPECT_LE(nada_sender_.bitrate_kbps(), previous_bitrate);
283 } 285 }
284 EXPECT_EQ(nada_sender_.bitrate_kbps(), kMinBitrateKbps); 286 EXPECT_EQ(nada_sender_.bitrate_kbps(), NadaBweSender::kMinNadaBitrateKbps);
285 } 287 }
286 288
287 // Sending bitrate should increase and reach its Max bound. 289 // Sending bitrate should increase and reach its Max bound.
288 TEST_F(NadaSenderSideTest, VeryHighBandwith) { 290 TEST_F(NadaSenderSideTest, VeryHighBandwith) {
289 const int64_t kOneWayDelayMs = 50; 291 const int64_t kOneWayDelayMs = 50;
290 const size_t kRecentReceivingRate = static_cast<size_t>(kMaxBitrateKbps); 292 const size_t kRecentReceivingRate = static_cast<size_t>(kMaxBitrateKbps);
291 const int64_t kRefSignalMs = 1; 293 const int64_t kRefSignalMs = 1;
292 int64_t send_time_ms = nada_sender_.NowMs() - kOneWayDelayMs; 294 int64_t send_time_ms = nada_sender_.NowMs() - kOneWayDelayMs;
293 295
294 NadaFeedback not_congested_fb = NadaFbGenerator::NotCongestedFb( 296 NadaFeedback not_congested_fb = NadaFbGenerator::NotCongestedFb(
295 kRecentReceivingRate, kRefSignalMs, send_time_ms); 297 kRecentReceivingRate, kRefSignalMs, send_time_ms);
296 298
297 nada_sender_.set_original_operating_mode(true); 299 nada_sender_.set_original_operating_mode(true);
298 for (int i = 0; i < 100; ++i) { 300 for (int i = 0; i < 100; ++i) {
299 int previous_bitrate = nada_sender_.bitrate_kbps(); 301 int previous_bitrate = nada_sender_.bitrate_kbps();
300 nada_sender_.GiveFeedback(not_congested_fb); 302 nada_sender_.GiveFeedback(not_congested_fb);
301 EXPECT_GE(nada_sender_.bitrate_kbps(), previous_bitrate); 303 EXPECT_GE(nada_sender_.bitrate_kbps(), previous_bitrate);
302 } 304 }
303 EXPECT_EQ(nada_sender_.bitrate_kbps(), kMaxBitrateKbps); 305 EXPECT_EQ(nada_sender_.bitrate_kbps(), kMaxBitrateKbps);
304 306
305 nada_sender_.set_original_operating_mode(false); 307 nada_sender_.set_original_operating_mode(false);
306 nada_sender_.set_bitrate_kbps(kMinBitrateKbps); 308 nada_sender_.set_bitrate_kbps(NadaBweSender::kMinNadaBitrateKbps);
307 309
308 for (int i = 0; i < 100; ++i) { 310 for (int i = 0; i < 100; ++i) {
309 int previous_bitrate = nada_sender_.bitrate_kbps(); 311 int previous_bitrate = nada_sender_.bitrate_kbps();
310 nada_sender_.GiveFeedback(not_congested_fb); 312 nada_sender_.GiveFeedback(not_congested_fb);
311 EXPECT_GE(nada_sender_.bitrate_kbps(), previous_bitrate); 313 EXPECT_GE(nada_sender_.bitrate_kbps(), previous_bitrate);
312 } 314 }
313 EXPECT_EQ(nada_sender_.bitrate_kbps(), kMaxBitrateKbps); 315 EXPECT_EQ(nada_sender_.bitrate_kbps(), kMaxBitrateKbps);
314 } 316 }
315 317
316 TEST_F(NadaReceiverSideTest, FeedbackInitialCases) { 318 TEST_F(NadaReceiverSideTest, FeedbackInitialCases) {
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 for (int i = 1; i < kNumElements; ++i) { 489 for (int i = 1; i < kNumElements; ++i) {
488 EXPECT_EQ( 490 EXPECT_EQ(
489 exp_smoothed[i], 491 exp_smoothed[i],
490 static_cast<int64_t>(exp_smoothed[i - 1] * (1.0f - kAlpha) + 0.5f)); 492 static_cast<int64_t>(exp_smoothed[i - 1] * (1.0f - kAlpha) + 0.5f));
491 } 493 }
492 } 494 }
493 495
494 } // namespace bwe 496 } // namespace bwe
495 } // namespace testing 497 } // namespace testing
496 } // namespace webrtc 498 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/remote_bitrate_estimator/test/estimators/nada.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698