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

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

Issue 2888303005: Add PeerConnectionInterface::UpdateCallBitrate. (Closed)
Patch Set: Add a missing test from Taylor's last CR. Created 3 years, 7 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
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 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 EXPECT_NE(stream, nullptr); 304 EXPECT_NE(stream, nullptr);
305 streams.push_back(stream); 305 streams.push_back(stream);
306 306
307 for (auto s : streams) { 307 for (auto s : streams) {
308 call->DestroyFlexfecReceiveStream(s); 308 call->DestroyFlexfecReceiveStream(s);
309 } 309 }
310 } 310 }
311 311
312 namespace { 312 namespace {
313 struct CallBitrateHelper { 313 struct CallBitrateHelper {
314 CallBitrateHelper() : CallBitrateHelper(Call::Config(&event_log_)) {} 314 CallBitrateHelper() : CallBitrateHelper(Call::Config::BitrateConfig()) {}
315 315
316 explicit CallBitrateHelper(const Call::Config& config) 316 explicit CallBitrateHelper(const Call::Config::BitrateConfig& bitrate_config)
317 : mock_cc_(Clock::GetRealTimeClock(), &event_log_, &packet_router_), 317 : mock_cc_(Clock::GetRealTimeClock(), &event_log_, &packet_router_) {
318 call_(Call::Create( 318 Call::Config config(&event_log_);
319 config, 319 config.bitrate_config = bitrate_config;
320 rtc::MakeUnique<FakeRtpTransportControllerSend>(&packet_router_, 320 call_.reset(
321 &mock_cc_))) {} 321 Call::Create(config, rtc::MakeUnique<FakeRtpTransportControllerSend>(
322 &packet_router_, &mock_cc_)));
323 }
322 324
323 webrtc::Call* operator->() { return call_.get(); } 325 webrtc::Call* operator->() { return call_.get(); }
324 testing::NiceMock<test::MockSendSideCongestionController>& mock_cc() { 326 testing::NiceMock<test::MockSendSideCongestionController>& mock_cc() {
325 return mock_cc_; 327 return mock_cc_;
326 } 328 }
327 329
328 private: 330 private:
329 webrtc::RtcEventLogNullImpl event_log_; 331 webrtc::RtcEventLogNullImpl event_log_;
330 PacketRouter packet_router_; 332 PacketRouter packet_router_;
331 testing::NiceMock<test::MockSendSideCongestionController> mock_cc_; 333 testing::NiceMock<test::MockSendSideCongestionController> mock_cc_;
(...skipping 16 matching lines...) Expand all
348 TEST(CallBitrateTest, SetBitrateConfigWithDifferentMinCallsSetBweBitrates) { 350 TEST(CallBitrateTest, SetBitrateConfigWithDifferentMinCallsSetBweBitrates) {
349 CallBitrateHelper call; 351 CallBitrateHelper call;
350 352
351 Call::Config::BitrateConfig bitrate_config; 353 Call::Config::BitrateConfig bitrate_config;
352 bitrate_config.min_bitrate_bps = 10; 354 bitrate_config.min_bitrate_bps = 10;
353 bitrate_config.start_bitrate_bps = 20; 355 bitrate_config.start_bitrate_bps = 20;
354 bitrate_config.max_bitrate_bps = 30; 356 bitrate_config.max_bitrate_bps = 30;
355 call->SetBitrateConfig(bitrate_config); 357 call->SetBitrateConfig(bitrate_config);
356 358
357 bitrate_config.min_bitrate_bps = 11; 359 bitrate_config.min_bitrate_bps = 11;
358 EXPECT_CALL(call.mock_cc(), SetBweBitrates(11, 20, 30)); 360 EXPECT_CALL(call.mock_cc(), SetBweBitrates(11, -1, 30));
359 call->SetBitrateConfig(bitrate_config); 361 call->SetBitrateConfig(bitrate_config);
360 } 362 }
361 363
362 TEST(CallBitrateTest, SetBitrateConfigWithDifferentStartCallsSetBweBitrates) { 364 TEST(CallBitrateTest, SetBitrateConfigWithDifferentStartCallsSetBweBitrates) {
363 CallBitrateHelper call; 365 CallBitrateHelper call;
364 366
365 Call::Config::BitrateConfig bitrate_config; 367 Call::Config::BitrateConfig bitrate_config;
366 bitrate_config.min_bitrate_bps = 10; 368 bitrate_config.min_bitrate_bps = 10;
367 bitrate_config.start_bitrate_bps = 20; 369 bitrate_config.start_bitrate_bps = 20;
368 bitrate_config.max_bitrate_bps = 30; 370 bitrate_config.max_bitrate_bps = 30;
369 call->SetBitrateConfig(bitrate_config); 371 call->SetBitrateConfig(bitrate_config);
370 372
371 bitrate_config.start_bitrate_bps = 21; 373 bitrate_config.start_bitrate_bps = 21;
372 EXPECT_CALL(call.mock_cc(), SetBweBitrates(10, 21, 30)); 374 EXPECT_CALL(call.mock_cc(), SetBweBitrates(10, 21, 30));
373 call->SetBitrateConfig(bitrate_config); 375 call->SetBitrateConfig(bitrate_config);
374 } 376 }
375 377
376 TEST(CallBitrateTest, SetBitrateConfigWithDifferentMaxCallsSetBweBitrates) { 378 TEST(CallBitrateTest, SetBitrateConfigWithDifferentMaxCallsSetBweBitrates) {
377 CallBitrateHelper call; 379 CallBitrateHelper call;
378 380
379 Call::Config::BitrateConfig bitrate_config; 381 Call::Config::BitrateConfig bitrate_config;
380 bitrate_config.min_bitrate_bps = 10; 382 bitrate_config.min_bitrate_bps = 10;
381 bitrate_config.start_bitrate_bps = 20; 383 bitrate_config.start_bitrate_bps = 20;
382 bitrate_config.max_bitrate_bps = 30; 384 bitrate_config.max_bitrate_bps = 30;
383 call->SetBitrateConfig(bitrate_config); 385 call->SetBitrateConfig(bitrate_config);
384 386
385 bitrate_config.max_bitrate_bps = 31; 387 bitrate_config.max_bitrate_bps = 31;
386 EXPECT_CALL(call.mock_cc(), SetBweBitrates(10, 20, 31)); 388 EXPECT_CALL(call.mock_cc(), SetBweBitrates(10, -1, 31));
387 call->SetBitrateConfig(bitrate_config); 389 call->SetBitrateConfig(bitrate_config);
388 } 390 }
389 391
390 TEST(CallBitrateTest, SetBitrateConfigWithSameConfigElidesSecondCall) { 392 TEST(CallBitrateTest, SetBitrateConfigWithSameConfigElidesSecondCall) {
391 CallBitrateHelper call; 393 CallBitrateHelper call;
392
393 Call::Config::BitrateConfig bitrate_config; 394 Call::Config::BitrateConfig bitrate_config;
394 bitrate_config.min_bitrate_bps = 1; 395 bitrate_config.min_bitrate_bps = 1;
395 bitrate_config.start_bitrate_bps = 2; 396 bitrate_config.start_bitrate_bps = 2;
396 bitrate_config.max_bitrate_bps = 3; 397 bitrate_config.max_bitrate_bps = 3;
397 398
398 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1, 2, 3)).Times(1); 399 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1, 2, 3)).Times(1);
399 call->SetBitrateConfig(bitrate_config); 400 call->SetBitrateConfig(bitrate_config);
400 call->SetBitrateConfig(bitrate_config); 401 call->SetBitrateConfig(bitrate_config);
401 } 402 }
402 403
403 TEST(CallBitrateTest, 404 TEST(CallBitrateTest,
404 SetBitrateConfigWithSameMinMaxAndNegativeStartElidesSecondCall) { 405 SetBitrateConfigWithSameMinMaxAndNegativeStartElidesSecondCall) {
405 CallBitrateHelper call; 406 CallBitrateHelper call;
406 407
407 Call::Config::BitrateConfig bitrate_config; 408 Call::Config::BitrateConfig bitrate_config;
408 bitrate_config.min_bitrate_bps = 1; 409 bitrate_config.min_bitrate_bps = 1;
409 bitrate_config.start_bitrate_bps = 2; 410 bitrate_config.start_bitrate_bps = 2;
410 bitrate_config.max_bitrate_bps = 3; 411 bitrate_config.max_bitrate_bps = 3;
411 412
412 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1, 2, 3)).Times(1); 413 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1, 2, 3)).Times(1);
413 call->SetBitrateConfig(bitrate_config); 414 call->SetBitrateConfig(bitrate_config);
414 415
415 bitrate_config.start_bitrate_bps = -1; 416 bitrate_config.start_bitrate_bps = -1;
416 call->SetBitrateConfig(bitrate_config); 417 call->SetBitrateConfig(bitrate_config);
417 } 418 }
418 419
420 TEST(CallBitrateTest, BiggerMaskMinUsed) {
421 CallBitrateHelper call;
422 Call::Config::BitrateConfigMask mask;
423 mask.min_bitrate_bps = rtc::Optional<int>(1234);
424
425 EXPECT_CALL(call.mock_cc(),
426 SetBweBitrates(*mask.min_bitrate_bps, testing::_, testing::_));
427 call->SetBitrateConfigMask(mask);
428 }
429
430 TEST(CallBitrateTest, BiggerConfigMinUsed) {
431 CallBitrateHelper call;
432 Call::Config::BitrateConfigMask mask;
433 mask.min_bitrate_bps = rtc::Optional<int>(1000);
434 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1000, testing::_, testing::_));
435 call->SetBitrateConfigMask(mask);
436
437 Call::Config::BitrateConfig config;
438 config.min_bitrate_bps = 1234;
439
440 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1234, testing::_, testing::_));
441 call->SetBitrateConfig(config);
442 }
443
444 // The last call to set start should be used.
445 TEST(CallBitrateTest, LatestStartMaskPreferred) {
446 CallBitrateHelper call;
447 Call::Config::BitrateConfigMask mask;
448 mask.start_bitrate_bps = rtc::Optional<int>(1300);
449
450 EXPECT_CALL(call.mock_cc(),
451 SetBweBitrates(testing::_, *mask.start_bitrate_bps, testing::_));
452 call->SetBitrateConfigMask(mask);
453
454 Call::Config::BitrateConfig bitrate_config;
455 bitrate_config.start_bitrate_bps = 1200;
456
457 EXPECT_CALL(
458 call.mock_cc(),
459 SetBweBitrates(testing::_, bitrate_config.start_bitrate_bps, testing::_));
460 call->SetBitrateConfig(bitrate_config);
461 }
462
463 TEST(CallBitrateTest, SmallerMaskMaxUsed) {
464 Call::Config::BitrateConfig bitrate_config;
465 bitrate_config.max_bitrate_bps = bitrate_config.start_bitrate_bps + 2000;
466 CallBitrateHelper call(bitrate_config);
467
468 Call::Config::BitrateConfigMask mask;
469 mask.max_bitrate_bps =
470 rtc::Optional<int>(bitrate_config.start_bitrate_bps + 1000);
471
472 EXPECT_CALL(call.mock_cc(),
473 SetBweBitrates(testing::_, testing::_, *mask.max_bitrate_bps));
474 call->SetBitrateConfigMask(mask);
475 }
476
477 TEST(CallBitrateTest, SmallerConfigMaxUsed) {
478 Call::Config::BitrateConfig bitrate_config;
479 bitrate_config.max_bitrate_bps = bitrate_config.start_bitrate_bps + 1000;
480 CallBitrateHelper call(bitrate_config);
481
482 Call::Config::BitrateConfigMask mask;
483 mask.max_bitrate_bps =
484 rtc::Optional<int>(bitrate_config.start_bitrate_bps + 2000);
485
486 // Expect no calls because nothing changes
487 EXPECT_CALL(call.mock_cc(),
488 SetBweBitrates(testing::_, testing::_, testing::_))
489 .Times(0);
490 call->SetBitrateConfigMask(mask);
491 }
492
493 TEST(CallBitrateTest, MaskStartLessThanConfigMinClamped) {
494 Call::Config::BitrateConfig bitrate_config;
495 bitrate_config.min_bitrate_bps = 2000;
496 CallBitrateHelper call(bitrate_config);
497
498 Call::Config::BitrateConfigMask mask;
499 mask.start_bitrate_bps = rtc::Optional<int>(1000);
500
501 EXPECT_CALL(call.mock_cc(), SetBweBitrates(2000, 2000, testing::_));
502 call->SetBitrateConfigMask(mask);
503 }
504
505 TEST(CallBitrateTest, MaskStartGreaterThanConfigMaxClamped) {
506 Call::Config::BitrateConfig bitrate_config;
507 bitrate_config.start_bitrate_bps = 2000;
508 CallBitrateHelper call(bitrate_config);
509
510 Call::Config::BitrateConfigMask mask;
511 mask.max_bitrate_bps = rtc::Optional<int>(1000);
512
513 EXPECT_CALL(call.mock_cc(), SetBweBitrates(testing::_, -1, 1000));
514 call->SetBitrateConfigMask(mask);
515 }
516
517 TEST(CallBitrateTest, MaskMinGreaterThanConfigMaxClamped) {
518 Call::Config::BitrateConfig bitrate_config;
519 bitrate_config.min_bitrate_bps = 2000;
520 CallBitrateHelper call(bitrate_config);
521
522 Call::Config::BitrateConfigMask mask;
523 mask.max_bitrate_bps = rtc::Optional<int>(1000);
524
525 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1000, testing::_, 1000));
526 call->SetBitrateConfigMask(mask);
527 }
528
529 TEST(CallBitrateTest, SettingMaskStartForcesUpdate) {
530 CallBitrateHelper call;
531
532 Call::Config::BitrateConfigMask mask;
533 mask.start_bitrate_bps = rtc::Optional<int>(1000);
534
535 // SetBweBitrates should be called twice with the same params since
536 // start_bitrate_bps is set.
537 EXPECT_CALL(call.mock_cc(), SetBweBitrates(testing::_, 1000, testing::_))
538 .Times(2);
539 call->SetBitrateConfigMask(mask);
540 call->SetBitrateConfigMask(mask);
541 }
542
543 TEST(CallBitrateTest, SetBitrateConfigWithNoChangesDoesNotCallSetBweBitrates) {
544 CallBitrateHelper call;
545
546 Call::Config::BitrateConfig config1;
547 config1.min_bitrate_bps = 0;
548 config1.start_bitrate_bps = 1000;
549 config1.max_bitrate_bps = -1;
550
551 Call::Config::BitrateConfig config2;
552 config2.min_bitrate_bps = 0;
553 config2.start_bitrate_bps = -1;
554 config2.max_bitrate_bps = -1;
555
556 // The second call should not call SetBweBitrates because it doesn't
557 // change any values.
558 EXPECT_CALL(call.mock_cc(), SetBweBitrates(0, 1000, -1));
559 call->SetBitrateConfig(config1);
560 call->SetBitrateConfig(config2);
561 }
562
563 // If SetBitrateConfig changes the max, but not the effective max,
564 // SetBweBitrates shouldn't be called, to avoid unnecessary encoder
565 // reconfigurations.
566 TEST(CallBitrateTest, SetBweBitratesNotCalledWhenEffectiveMaxUnchanged) {
567 CallBitrateHelper call;
568
569 Call::Config::BitrateConfig config;
570 config.min_bitrate_bps = 0;
571 config.start_bitrate_bps = -1;
572 config.max_bitrate_bps = 2000;
573 EXPECT_CALL(call.mock_cc(), SetBweBitrates(testing::_, testing::_, 2000));
574 call->SetBitrateConfig(config);
575
576 // Reduce effective max to 1000 with the mask.
577 Call::Config::BitrateConfigMask mask;
578 mask.max_bitrate_bps = rtc::Optional<int>(1000);
579 EXPECT_CALL(call.mock_cc(), SetBweBitrates(testing::_, testing::_, 1000));
580 call->SetBitrateConfigMask(mask);
581
582 // This leaves the effective max unchanged, so SetBweBitrates shouldn't be
583 // called again.
584 config.max_bitrate_bps = 1000;
585 call->SetBitrateConfig(config);
586 }
587
588 // When the "start bitrate" mask is removed, SetBweBitrates shouldn't be called
589 // again, since nothing's changing.
590 TEST(CallBitrateTest, SetBweBitratesNotCalledWhenStartMaskRemoved) {
591 CallBitrateHelper call;
592
593 Call::Config::BitrateConfigMask mask;
594 mask.start_bitrate_bps = rtc::Optional<int>(1000);
595 EXPECT_CALL(call.mock_cc(), SetBweBitrates(0, 1000, -1));
596 call->SetBitrateConfigMask(mask);
597
598 mask.start_bitrate_bps.reset();
599 call->SetBitrateConfigMask(mask);
600 }
601
602 // Test that if SetBitrateConfig is called after SetBitrateConfigMask applies a
603 // "start" value, the SetBitrateConfig call won't apply that start value a
604 // second time.
605 TEST(CallBitrateTest, SetBitrateConfigAfterSetBitrateConfigMaskWithStart) {
606 CallBitrateHelper call;
607
608 Call::Config::BitrateConfigMask mask;
609 mask.start_bitrate_bps = rtc::Optional<int>(1000);
610 EXPECT_CALL(call.mock_cc(), SetBweBitrates(0, 1000, -1));
611 call->SetBitrateConfigMask(mask);
612
613 Call::Config::BitrateConfig config;
614 config.min_bitrate_bps = 0;
615 config.start_bitrate_bps = -1;
616 config.max_bitrate_bps = 5000;
617 // The start value isn't changing, so SetBweBitrates should be called with
618 // -1.
619 EXPECT_CALL(call.mock_cc(), SetBweBitrates(0, -1, 5000));
620 call->SetBitrateConfig(config);
621 }
622
623 TEST(CallBitrateTest, SetBweBitrateNotCalledWhenClampedMinUnchanged) {
624 Call::Config::BitrateConfig bitrate_config;
625 bitrate_config.start_bitrate_bps = 500;
626 bitrate_config.max_bitrate_bps = 1000;
627 CallBitrateHelper call(bitrate_config);
628
629 // Set min to 2000; it is clamped to the max (1000).
630 Call::Config::BitrateConfigMask mask;
631 mask.min_bitrate_bps = rtc::Optional<int>(2000);
632 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1000, -1, 1000));
633 call->SetBitrateConfigMask(mask);
634
635 // Set min to 3000; the clamped value stays the same so nothing happens.
636 mask.min_bitrate_bps = rtc::Optional<int>(3000);
637 call->SetBitrateConfigMask(mask);
638 }
639
419 } // namespace webrtc 640 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698