OLD | NEW |
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 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
313 EXPECT_NE(stream, nullptr); | 313 EXPECT_NE(stream, nullptr); |
314 streams.push_back(stream); | 314 streams.push_back(stream); |
315 | 315 |
316 for (auto s : streams) { | 316 for (auto s : streams) { |
317 call->DestroyFlexfecReceiveStream(s); | 317 call->DestroyFlexfecReceiveStream(s); |
318 } | 318 } |
319 } | 319 } |
320 | 320 |
321 namespace { | 321 namespace { |
322 struct CallBitrateHelper { | 322 struct CallBitrateHelper { |
323 CallBitrateHelper() : CallBitrateHelper(Call::Config::BitrateConfig()) {} | 323 CallBitrateHelper() : CallBitrateHelper(Call::Config(&event_log_)) {} |
324 | 324 |
325 explicit CallBitrateHelper(const Call::Config::BitrateConfig& bitrate_config) | 325 explicit CallBitrateHelper(const Call::Config& config) |
326 : mock_cc_(Clock::GetRealTimeClock(), &event_log_, &packet_router_) { | 326 : mock_cc_(Clock::GetRealTimeClock(), &event_log_, &packet_router_), |
327 Call::Config config(&event_log_); | 327 call_(Call::Create( |
328 config.bitrate_config = bitrate_config; | 328 config, |
329 call_.reset( | 329 rtc::MakeUnique<FakeRtpTransportControllerSend>(&packet_router_, |
330 Call::Create(config, rtc::MakeUnique<FakeRtpTransportControllerSend>( | 330 &mock_cc_))) {} |
331 &packet_router_, &mock_cc_))); | |
332 } | |
333 | 331 |
334 webrtc::Call* operator->() { return call_.get(); } | 332 webrtc::Call* operator->() { return call_.get(); } |
335 testing::NiceMock<test::MockSendSideCongestionController>& mock_cc() { | 333 testing::NiceMock<test::MockSendSideCongestionController>& mock_cc() { |
336 return mock_cc_; | 334 return mock_cc_; |
337 } | 335 } |
338 | 336 |
339 private: | 337 private: |
340 webrtc::RtcEventLogNullImpl event_log_; | 338 webrtc::RtcEventLogNullImpl event_log_; |
341 PacketRouter packet_router_; | 339 PacketRouter packet_router_; |
342 testing::NiceMock<test::MockSendSideCongestionController> mock_cc_; | 340 testing::NiceMock<test::MockSendSideCongestionController> mock_cc_; |
(...skipping 16 matching lines...) Expand all Loading... |
359 TEST(CallBitrateTest, SetBitrateConfigWithDifferentMinCallsSetBweBitrates) { | 357 TEST(CallBitrateTest, SetBitrateConfigWithDifferentMinCallsSetBweBitrates) { |
360 CallBitrateHelper call; | 358 CallBitrateHelper call; |
361 | 359 |
362 Call::Config::BitrateConfig bitrate_config; | 360 Call::Config::BitrateConfig bitrate_config; |
363 bitrate_config.min_bitrate_bps = 10; | 361 bitrate_config.min_bitrate_bps = 10; |
364 bitrate_config.start_bitrate_bps = 20; | 362 bitrate_config.start_bitrate_bps = 20; |
365 bitrate_config.max_bitrate_bps = 30; | 363 bitrate_config.max_bitrate_bps = 30; |
366 call->SetBitrateConfig(bitrate_config); | 364 call->SetBitrateConfig(bitrate_config); |
367 | 365 |
368 bitrate_config.min_bitrate_bps = 11; | 366 bitrate_config.min_bitrate_bps = 11; |
369 EXPECT_CALL(call.mock_cc(), SetBweBitrates(11, -1, 30)); | 367 EXPECT_CALL(call.mock_cc(), SetBweBitrates(11, 20, 30)); |
370 call->SetBitrateConfig(bitrate_config); | 368 call->SetBitrateConfig(bitrate_config); |
371 } | 369 } |
372 | 370 |
373 TEST(CallBitrateTest, SetBitrateConfigWithDifferentStartCallsSetBweBitrates) { | 371 TEST(CallBitrateTest, SetBitrateConfigWithDifferentStartCallsSetBweBitrates) { |
374 CallBitrateHelper call; | 372 CallBitrateHelper call; |
375 | 373 |
376 Call::Config::BitrateConfig bitrate_config; | 374 Call::Config::BitrateConfig bitrate_config; |
377 bitrate_config.min_bitrate_bps = 10; | 375 bitrate_config.min_bitrate_bps = 10; |
378 bitrate_config.start_bitrate_bps = 20; | 376 bitrate_config.start_bitrate_bps = 20; |
379 bitrate_config.max_bitrate_bps = 30; | 377 bitrate_config.max_bitrate_bps = 30; |
380 call->SetBitrateConfig(bitrate_config); | 378 call->SetBitrateConfig(bitrate_config); |
381 | 379 |
382 bitrate_config.start_bitrate_bps = 21; | 380 bitrate_config.start_bitrate_bps = 21; |
383 EXPECT_CALL(call.mock_cc(), SetBweBitrates(10, 21, 30)); | 381 EXPECT_CALL(call.mock_cc(), SetBweBitrates(10, 21, 30)); |
384 call->SetBitrateConfig(bitrate_config); | 382 call->SetBitrateConfig(bitrate_config); |
385 } | 383 } |
386 | 384 |
387 TEST(CallBitrateTest, SetBitrateConfigWithDifferentMaxCallsSetBweBitrates) { | 385 TEST(CallBitrateTest, SetBitrateConfigWithDifferentMaxCallsSetBweBitrates) { |
388 CallBitrateHelper call; | 386 CallBitrateHelper call; |
389 | 387 |
390 Call::Config::BitrateConfig bitrate_config; | 388 Call::Config::BitrateConfig bitrate_config; |
391 bitrate_config.min_bitrate_bps = 10; | 389 bitrate_config.min_bitrate_bps = 10; |
392 bitrate_config.start_bitrate_bps = 20; | 390 bitrate_config.start_bitrate_bps = 20; |
393 bitrate_config.max_bitrate_bps = 30; | 391 bitrate_config.max_bitrate_bps = 30; |
394 call->SetBitrateConfig(bitrate_config); | 392 call->SetBitrateConfig(bitrate_config); |
395 | 393 |
396 bitrate_config.max_bitrate_bps = 31; | 394 bitrate_config.max_bitrate_bps = 31; |
397 EXPECT_CALL(call.mock_cc(), SetBweBitrates(10, -1, 31)); | 395 EXPECT_CALL(call.mock_cc(), SetBweBitrates(10, 20, 31)); |
398 call->SetBitrateConfig(bitrate_config); | 396 call->SetBitrateConfig(bitrate_config); |
399 } | 397 } |
400 | 398 |
401 TEST(CallBitrateTest, SetBitrateConfigWithSameConfigElidesSecondCall) { | 399 TEST(CallBitrateTest, SetBitrateConfigWithSameConfigElidesSecondCall) { |
402 CallBitrateHelper call; | 400 CallBitrateHelper call; |
| 401 |
403 Call::Config::BitrateConfig bitrate_config; | 402 Call::Config::BitrateConfig bitrate_config; |
404 bitrate_config.min_bitrate_bps = 1; | 403 bitrate_config.min_bitrate_bps = 1; |
405 bitrate_config.start_bitrate_bps = 2; | 404 bitrate_config.start_bitrate_bps = 2; |
406 bitrate_config.max_bitrate_bps = 3; | 405 bitrate_config.max_bitrate_bps = 3; |
407 | 406 |
408 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1, 2, 3)).Times(1); | 407 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1, 2, 3)).Times(1); |
409 call->SetBitrateConfig(bitrate_config); | 408 call->SetBitrateConfig(bitrate_config); |
410 call->SetBitrateConfig(bitrate_config); | 409 call->SetBitrateConfig(bitrate_config); |
411 } | 410 } |
412 | 411 |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
483 const RtpState rtp_state2 = create_stream_and_get_rtp_state(kSSRC); | 482 const RtpState rtp_state2 = create_stream_and_get_rtp_state(kSSRC); |
484 | 483 |
485 EXPECT_EQ(rtp_state1.sequence_number, rtp_state2.sequence_number); | 484 EXPECT_EQ(rtp_state1.sequence_number, rtp_state2.sequence_number); |
486 EXPECT_EQ(rtp_state1.start_timestamp, rtp_state2.start_timestamp); | 485 EXPECT_EQ(rtp_state1.start_timestamp, rtp_state2.start_timestamp); |
487 EXPECT_EQ(rtp_state1.timestamp, rtp_state2.timestamp); | 486 EXPECT_EQ(rtp_state1.timestamp, rtp_state2.timestamp); |
488 EXPECT_EQ(rtp_state1.capture_time_ms, rtp_state2.capture_time_ms); | 487 EXPECT_EQ(rtp_state1.capture_time_ms, rtp_state2.capture_time_ms); |
489 EXPECT_EQ(rtp_state1.last_timestamp_time_ms, | 488 EXPECT_EQ(rtp_state1.last_timestamp_time_ms, |
490 rtp_state2.last_timestamp_time_ms); | 489 rtp_state2.last_timestamp_time_ms); |
491 EXPECT_EQ(rtp_state1.media_has_been_sent, rtp_state2.media_has_been_sent); | 490 EXPECT_EQ(rtp_state1.media_has_been_sent, rtp_state2.media_has_been_sent); |
492 } | 491 } |
493 TEST(CallBitrateTest, BiggerMaskMinUsed) { | |
494 CallBitrateHelper call; | |
495 Call::Config::BitrateConfigMask mask; | |
496 mask.min_bitrate_bps = rtc::Optional<int>(1234); | |
497 | |
498 EXPECT_CALL(call.mock_cc(), | |
499 SetBweBitrates(*mask.min_bitrate_bps, testing::_, testing::_)); | |
500 call->SetBitrateConfigMask(mask); | |
501 } | |
502 | |
503 TEST(CallBitrateTest, BiggerConfigMinUsed) { | |
504 CallBitrateHelper call; | |
505 Call::Config::BitrateConfigMask mask; | |
506 mask.min_bitrate_bps = rtc::Optional<int>(1000); | |
507 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1000, testing::_, testing::_)); | |
508 call->SetBitrateConfigMask(mask); | |
509 | |
510 Call::Config::BitrateConfig config; | |
511 config.min_bitrate_bps = 1234; | |
512 | |
513 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1234, testing::_, testing::_)); | |
514 call->SetBitrateConfig(config); | |
515 } | |
516 | |
517 // The last call to set start should be used. | |
518 TEST(CallBitrateTest, LatestStartMaskPreferred) { | |
519 CallBitrateHelper call; | |
520 Call::Config::BitrateConfigMask mask; | |
521 mask.start_bitrate_bps = rtc::Optional<int>(1300); | |
522 | |
523 EXPECT_CALL(call.mock_cc(), | |
524 SetBweBitrates(testing::_, *mask.start_bitrate_bps, testing::_)); | |
525 call->SetBitrateConfigMask(mask); | |
526 | |
527 Call::Config::BitrateConfig bitrate_config; | |
528 bitrate_config.start_bitrate_bps = 1200; | |
529 | |
530 EXPECT_CALL( | |
531 call.mock_cc(), | |
532 SetBweBitrates(testing::_, bitrate_config.start_bitrate_bps, testing::_)); | |
533 call->SetBitrateConfig(bitrate_config); | |
534 } | |
535 | |
536 TEST(CallBitrateTest, SmallerMaskMaxUsed) { | |
537 Call::Config::BitrateConfig bitrate_config; | |
538 bitrate_config.max_bitrate_bps = bitrate_config.start_bitrate_bps + 2000; | |
539 CallBitrateHelper call(bitrate_config); | |
540 | |
541 Call::Config::BitrateConfigMask mask; | |
542 mask.max_bitrate_bps = | |
543 rtc::Optional<int>(bitrate_config.start_bitrate_bps + 1000); | |
544 | |
545 EXPECT_CALL(call.mock_cc(), | |
546 SetBweBitrates(testing::_, testing::_, *mask.max_bitrate_bps)); | |
547 call->SetBitrateConfigMask(mask); | |
548 } | |
549 | |
550 TEST(CallBitrateTest, SmallerConfigMaxUsed) { | |
551 Call::Config::BitrateConfig bitrate_config; | |
552 bitrate_config.max_bitrate_bps = bitrate_config.start_bitrate_bps + 1000; | |
553 CallBitrateHelper call(bitrate_config); | |
554 | |
555 Call::Config::BitrateConfigMask mask; | |
556 mask.max_bitrate_bps = | |
557 rtc::Optional<int>(bitrate_config.start_bitrate_bps + 2000); | |
558 | |
559 // Expect no calls because nothing changes | |
560 EXPECT_CALL(call.mock_cc(), | |
561 SetBweBitrates(testing::_, testing::_, testing::_)) | |
562 .Times(0); | |
563 call->SetBitrateConfigMask(mask); | |
564 } | |
565 | |
566 TEST(CallBitrateTest, MaskStartLessThanConfigMinClamped) { | |
567 Call::Config::BitrateConfig bitrate_config; | |
568 bitrate_config.min_bitrate_bps = 2000; | |
569 CallBitrateHelper call(bitrate_config); | |
570 | |
571 Call::Config::BitrateConfigMask mask; | |
572 mask.start_bitrate_bps = rtc::Optional<int>(1000); | |
573 | |
574 EXPECT_CALL(call.mock_cc(), SetBweBitrates(2000, 2000, testing::_)); | |
575 call->SetBitrateConfigMask(mask); | |
576 } | |
577 | |
578 TEST(CallBitrateTest, MaskStartGreaterThanConfigMaxClamped) { | |
579 Call::Config::BitrateConfig bitrate_config; | |
580 bitrate_config.start_bitrate_bps = 2000; | |
581 CallBitrateHelper call(bitrate_config); | |
582 | |
583 Call::Config::BitrateConfigMask mask; | |
584 mask.max_bitrate_bps = rtc::Optional<int>(1000); | |
585 | |
586 EXPECT_CALL(call.mock_cc(), SetBweBitrates(testing::_, -1, 1000)); | |
587 call->SetBitrateConfigMask(mask); | |
588 } | |
589 | |
590 TEST(CallBitrateTest, MaskMinGreaterThanConfigMaxClamped) { | |
591 Call::Config::BitrateConfig bitrate_config; | |
592 bitrate_config.min_bitrate_bps = 2000; | |
593 CallBitrateHelper call(bitrate_config); | |
594 | |
595 Call::Config::BitrateConfigMask mask; | |
596 mask.max_bitrate_bps = rtc::Optional<int>(1000); | |
597 | |
598 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1000, testing::_, 1000)); | |
599 call->SetBitrateConfigMask(mask); | |
600 } | |
601 | |
602 TEST(CallBitrateTest, SettingMaskStartForcesUpdate) { | |
603 CallBitrateHelper call; | |
604 | |
605 Call::Config::BitrateConfigMask mask; | |
606 mask.start_bitrate_bps = rtc::Optional<int>(1000); | |
607 | |
608 // SetBweBitrates should be called twice with the same params since | |
609 // start_bitrate_bps is set. | |
610 EXPECT_CALL(call.mock_cc(), SetBweBitrates(testing::_, 1000, testing::_)) | |
611 .Times(2); | |
612 call->SetBitrateConfigMask(mask); | |
613 call->SetBitrateConfigMask(mask); | |
614 } | |
615 | |
616 TEST(CallBitrateTest, SetBitrateConfigWithNoChangesDoesNotCallSetBweBitrates) { | |
617 CallBitrateHelper call; | |
618 | |
619 Call::Config::BitrateConfig config1; | |
620 config1.min_bitrate_bps = 0; | |
621 config1.start_bitrate_bps = 1000; | |
622 config1.max_bitrate_bps = -1; | |
623 | |
624 Call::Config::BitrateConfig config2; | |
625 config2.min_bitrate_bps = 0; | |
626 config2.start_bitrate_bps = -1; | |
627 config2.max_bitrate_bps = -1; | |
628 | |
629 // The second call should not call SetBweBitrates because it doesn't | |
630 // change any values. | |
631 EXPECT_CALL(call.mock_cc(), SetBweBitrates(0, 1000, -1)); | |
632 call->SetBitrateConfig(config1); | |
633 call->SetBitrateConfig(config2); | |
634 } | |
635 | |
636 // If SetBitrateConfig changes the max, but not the effective max, | |
637 // SetBweBitrates shouldn't be called, to avoid unnecessary encoder | |
638 // reconfigurations. | |
639 TEST(CallBitrateTest, SetBweBitratesNotCalledWhenEffectiveMaxUnchanged) { | |
640 CallBitrateHelper call; | |
641 | |
642 Call::Config::BitrateConfig config; | |
643 config.min_bitrate_bps = 0; | |
644 config.start_bitrate_bps = -1; | |
645 config.max_bitrate_bps = 2000; | |
646 EXPECT_CALL(call.mock_cc(), SetBweBitrates(testing::_, testing::_, 2000)); | |
647 call->SetBitrateConfig(config); | |
648 | |
649 // Reduce effective max to 1000 with the mask. | |
650 Call::Config::BitrateConfigMask mask; | |
651 mask.max_bitrate_bps = rtc::Optional<int>(1000); | |
652 EXPECT_CALL(call.mock_cc(), SetBweBitrates(testing::_, testing::_, 1000)); | |
653 call->SetBitrateConfigMask(mask); | |
654 | |
655 // This leaves the effective max unchanged, so SetBweBitrates shouldn't be | |
656 // called again. | |
657 config.max_bitrate_bps = 1000; | |
658 call->SetBitrateConfig(config); | |
659 } | |
660 | |
661 // When the "start bitrate" mask is removed, SetBweBitrates shouldn't be called | |
662 // again, since nothing's changing. | |
663 TEST(CallBitrateTest, SetBweBitratesNotCalledWhenStartMaskRemoved) { | |
664 CallBitrateHelper call; | |
665 | |
666 Call::Config::BitrateConfigMask mask; | |
667 mask.start_bitrate_bps = rtc::Optional<int>(1000); | |
668 EXPECT_CALL(call.mock_cc(), SetBweBitrates(0, 1000, -1)); | |
669 call->SetBitrateConfigMask(mask); | |
670 | |
671 mask.start_bitrate_bps.reset(); | |
672 call->SetBitrateConfigMask(mask); | |
673 } | |
674 | |
675 // Test that if SetBitrateConfig is called after SetBitrateConfigMask applies a | |
676 // "start" value, the SetBitrateConfig call won't apply that start value a | |
677 // second time. | |
678 TEST(CallBitrateTest, SetBitrateConfigAfterSetBitrateConfigMaskWithStart) { | |
679 CallBitrateHelper call; | |
680 | |
681 Call::Config::BitrateConfigMask mask; | |
682 mask.start_bitrate_bps = rtc::Optional<int>(1000); | |
683 EXPECT_CALL(call.mock_cc(), SetBweBitrates(0, 1000, -1)); | |
684 call->SetBitrateConfigMask(mask); | |
685 | |
686 Call::Config::BitrateConfig config; | |
687 config.min_bitrate_bps = 0; | |
688 config.start_bitrate_bps = -1; | |
689 config.max_bitrate_bps = 5000; | |
690 // The start value isn't changing, so SetBweBitrates should be called with | |
691 // -1. | |
692 EXPECT_CALL(call.mock_cc(), SetBweBitrates(0, -1, 5000)); | |
693 call->SetBitrateConfig(config); | |
694 } | |
695 | |
696 TEST(CallBitrateTest, SetBweBitratesNotCalledWhenClampedMinUnchanged) { | |
697 Call::Config::BitrateConfig bitrate_config; | |
698 bitrate_config.start_bitrate_bps = 500; | |
699 bitrate_config.max_bitrate_bps = 1000; | |
700 CallBitrateHelper call(bitrate_config); | |
701 | |
702 // Set min to 2000; it is clamped to the max (1000). | |
703 Call::Config::BitrateConfigMask mask; | |
704 mask.min_bitrate_bps = rtc::Optional<int>(2000); | |
705 EXPECT_CALL(call.mock_cc(), SetBweBitrates(1000, -1, 1000)); | |
706 call->SetBitrateConfigMask(mask); | |
707 | |
708 // Set min to 3000; the clamped value stays the same so nothing happens. | |
709 mask.min_bitrate_bps = rtc::Optional<int>(3000); | |
710 call->SetBitrateConfigMask(mask); | |
711 } | |
712 | 492 |
713 } // namespace webrtc | 493 } // namespace webrtc |
OLD | NEW |