| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 bool red, | 44 bool red, |
| 45 bool report_perf_stats) | 45 bool report_perf_stats) |
| 46 : EndToEndTest(test::CallTest::kLongTimeoutMs), | 46 : EndToEndTest(test::CallTest::kLongTimeoutMs), |
| 47 stop_event_(false, false), | 47 stop_event_(false, false), |
| 48 clock_(Clock::GetRealTimeClock()), | 48 clock_(Clock::GetRealTimeClock()), |
| 49 num_video_streams_(num_video_streams), | 49 num_video_streams_(num_video_streams), |
| 50 num_audio_streams_(num_audio_streams), | 50 num_audio_streams_(num_audio_streams), |
| 51 num_flexfec_streams_(num_flexfec_streams), | 51 num_flexfec_streams_(num_flexfec_streams), |
| 52 rtx_(rtx), | 52 rtx_(rtx), |
| 53 red_(red), | 53 red_(red), |
| 54 report_perf_stats_(report_perf_stats), |
| 54 sender_call_(nullptr), | 55 sender_call_(nullptr), |
| 55 send_stream_(nullptr), | 56 send_stream_(nullptr), |
| 56 start_bitrate_bps_(start_bitrate_bps), | 57 start_bitrate_bps_(start_bitrate_bps), |
| 57 min_run_time_ms_(min_run_time_ms), | 58 min_run_time_ms_(min_run_time_ms), |
| 58 report_perf_stats_(report_perf_stats), | |
| 59 expected_bitrate_bps_(0), | 59 expected_bitrate_bps_(0), |
| 60 test_start_ms_(-1), | 60 test_start_ms_(-1), |
| 61 ramp_up_finished_ms_(-1), | 61 ramp_up_finished_ms_(-1), |
| 62 extension_type_(extension_type), | 62 extension_type_(extension_type), |
| 63 video_ssrcs_(GenerateSsrcs(num_video_streams_, 100)), | 63 video_ssrcs_(GenerateSsrcs(num_video_streams_, 100)), |
| 64 video_rtx_ssrcs_(GenerateSsrcs(num_video_streams_, 200)), | 64 video_rtx_ssrcs_(GenerateSsrcs(num_video_streams_, 200)), |
| 65 audio_ssrcs_(GenerateSsrcs(num_audio_streams_, 300)), | 65 audio_ssrcs_(GenerateSsrcs(num_audio_streams_, 300)), |
| 66 poller_thread_(&BitrateStatsPollingThread, | 66 poller_thread_(&BitrateStatsPollingThread, |
| 67 this, | 67 this, |
| 68 "BitrateStatsPollingThread") { | 68 "BitrateStatsPollingThread") { |
| (...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 383 poller_thread_.Stop(); | 383 poller_thread_.Stop(); |
| 384 } | 384 } |
| 385 | 385 |
| 386 RampUpDownUpTester::RampUpDownUpTester(size_t num_video_streams, | 386 RampUpDownUpTester::RampUpDownUpTester(size_t num_video_streams, |
| 387 size_t num_audio_streams, | 387 size_t num_audio_streams, |
| 388 size_t num_flexfec_streams, | 388 size_t num_flexfec_streams, |
| 389 unsigned int start_bitrate_bps, | 389 unsigned int start_bitrate_bps, |
| 390 const std::string& extension_type, | 390 const std::string& extension_type, |
| 391 bool rtx, | 391 bool rtx, |
| 392 bool red, | 392 bool red, |
| 393 const std::vector<int>& loss_rates) | 393 const std::vector<int>& loss_rates, |
| 394 bool report_perf_stats) |
| 394 : RampUpTester(num_video_streams, | 395 : RampUpTester(num_video_streams, |
| 395 num_audio_streams, | 396 num_audio_streams, |
| 396 num_flexfec_streams, | 397 num_flexfec_streams, |
| 397 start_bitrate_bps, | 398 start_bitrate_bps, |
| 398 0, | 399 0, |
| 399 extension_type, | 400 extension_type, |
| 400 rtx, | 401 rtx, |
| 401 red, | 402 red, |
| 402 true), | 403 report_perf_stats), |
| 403 link_rates_({GetHighLinkCapacity(), kLowBandwidthLimitBps / 1000, | 404 link_rates_({GetHighLinkCapacity(), kLowBandwidthLimitBps / 1000, |
| 404 GetHighLinkCapacity(), 0}), | 405 GetHighLinkCapacity(), 0}), |
| 405 test_state_(kFirstRampup), | 406 test_state_(kFirstRampup), |
| 406 next_state_(kTransitionToNextState), | 407 next_state_(kTransitionToNextState), |
| 407 state_start_ms_(clock_->TimeInMilliseconds()), | 408 state_start_ms_(clock_->TimeInMilliseconds()), |
| 408 interval_start_ms_(clock_->TimeInMilliseconds()), | 409 interval_start_ms_(clock_->TimeInMilliseconds()), |
| 409 sent_bytes_(0), | 410 sent_bytes_(0), |
| 410 loss_rates_(loss_rates) { | 411 loss_rates_(loss_rates) { |
| 411 forward_transport_config_.link_capacity_kbps = link_rates_[test_state_]; | 412 forward_transport_config_.link_capacity_kbps = link_rates_[test_state_]; |
| 412 forward_transport_config_.queue_delay_ms = 100; | 413 forward_transport_config_.queue_delay_ms = 100; |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 488 bool RampUpDownUpTester::ExpectingFec() const { | 489 bool RampUpDownUpTester::ExpectingFec() const { |
| 489 return num_flexfec_streams_ > 0 && forward_transport_config_.loss_percent > 0; | 490 return num_flexfec_streams_ > 0 && forward_transport_config_.loss_percent > 0; |
| 490 } | 491 } |
| 491 | 492 |
| 492 void RampUpDownUpTester::EvolveTestState(int bitrate_bps, bool suspended) { | 493 void RampUpDownUpTester::EvolveTestState(int bitrate_bps, bool suspended) { |
| 493 int64_t now = clock_->TimeInMilliseconds(); | 494 int64_t now = clock_->TimeInMilliseconds(); |
| 494 switch (test_state_) { | 495 switch (test_state_) { |
| 495 case kFirstRampup: | 496 case kFirstRampup: |
| 496 EXPECT_FALSE(suspended); | 497 EXPECT_FALSE(suspended); |
| 497 if (bitrate_bps >= GetExpectedHighBitrate()) { | 498 if (bitrate_bps >= GetExpectedHighBitrate()) { |
| 498 webrtc::test::PrintResult("ramp_up_down_up", GetModifierString(), | 499 if (report_perf_stats_) { |
| 499 "first_rampup", now - state_start_ms_, "ms", | 500 webrtc::test::PrintResult("ramp_up_down_up", GetModifierString(), |
| 500 false); | 501 "first_rampup", now - state_start_ms_, "ms", |
| 502 false); |
| 503 } |
| 501 // Apply loss during the transition between states if FEC is enabled. | 504 // Apply loss during the transition between states if FEC is enabled. |
| 502 forward_transport_config_.loss_percent = loss_rates_[test_state_]; | 505 forward_transport_config_.loss_percent = loss_rates_[test_state_]; |
| 503 test_state_ = kTransitionToNextState; | 506 test_state_ = kTransitionToNextState; |
| 504 next_state_ = kLowRate; | 507 next_state_ = kLowRate; |
| 505 } | 508 } |
| 506 break; | 509 break; |
| 507 case kLowRate: { | 510 case kLowRate: { |
| 508 // Audio streams are never suspended. | 511 // Audio streams are never suspended. |
| 509 bool check_suspend_state = num_video_streams_ > 0; | 512 bool check_suspend_state = num_video_streams_ > 0; |
| 510 if (bitrate_bps < kExpectedLowBitrateBps && | 513 if (bitrate_bps < kExpectedLowBitrateBps && |
| 511 suspended == check_suspend_state) { | 514 suspended == check_suspend_state) { |
| 512 webrtc::test::PrintResult("ramp_up_down_up", GetModifierString(), | 515 if (report_perf_stats_) { |
| 513 "rampdown", now - state_start_ms_, "ms", | 516 webrtc::test::PrintResult("ramp_up_down_up", GetModifierString(), |
| 514 false); | 517 "rampdown", now - state_start_ms_, "ms", |
| 518 false); |
| 519 } |
| 515 // Apply loss during the transition between states if FEC is enabled. | 520 // Apply loss during the transition between states if FEC is enabled. |
| 516 forward_transport_config_.loss_percent = loss_rates_[test_state_]; | 521 forward_transport_config_.loss_percent = loss_rates_[test_state_]; |
| 517 test_state_ = kTransitionToNextState; | 522 test_state_ = kTransitionToNextState; |
| 518 next_state_ = kSecondRampup; | 523 next_state_ = kSecondRampup; |
| 519 } | 524 } |
| 520 break; | 525 break; |
| 521 } | 526 } |
| 522 case kSecondRampup: | 527 case kSecondRampup: |
| 523 if (bitrate_bps >= GetExpectedHighBitrate() && !suspended) { | 528 if (bitrate_bps >= GetExpectedHighBitrate() && !suspended) { |
| 524 webrtc::test::PrintResult("ramp_up_down_up", GetModifierString(), | 529 if (report_perf_stats_) { |
| 525 "second_rampup", now - state_start_ms_, "ms", | 530 webrtc::test::PrintResult("ramp_up_down_up", GetModifierString(), |
| 526 false); | 531 "second_rampup", now - state_start_ms_, |
| 527 ReportResult("ramp-up-down-up-average-network-latency", | 532 "ms", false); |
| 528 send_transport_->GetAverageDelayMs(), "milliseconds"); | 533 ReportResult("ramp-up-down-up-average-network-latency", |
| 534 send_transport_->GetAverageDelayMs(), "milliseconds"); |
| 535 } |
| 529 // Apply loss during the transition between states if FEC is enabled. | 536 // Apply loss during the transition between states if FEC is enabled. |
| 530 forward_transport_config_.loss_percent = loss_rates_[test_state_]; | 537 forward_transport_config_.loss_percent = loss_rates_[test_state_]; |
| 531 test_state_ = kTransitionToNextState; | 538 test_state_ = kTransitionToNextState; |
| 532 next_state_ = kTestEnd; | 539 next_state_ = kTestEnd; |
| 533 } | 540 } |
| 534 break; | 541 break; |
| 535 case kTestEnd: | 542 case kTestEnd: |
| 536 observation_complete_.Set(); | 543 observation_complete_.Set(); |
| 537 break; | 544 break; |
| 538 case kTransitionToNextState: | 545 case kTransitionToNextState: |
| (...skipping 20 matching lines...) Expand all Loading... |
| 559 EXPECT_EQ(nullptr, video_send_stream_); | 566 EXPECT_EQ(nullptr, video_send_stream_); |
| 560 EXPECT_TRUE(video_receive_streams_.empty()); | 567 EXPECT_TRUE(video_receive_streams_.empty()); |
| 561 } | 568 } |
| 562 }; | 569 }; |
| 563 | 570 |
| 564 static const uint32_t kStartBitrateBps = 60000; | 571 static const uint32_t kStartBitrateBps = 60000; |
| 565 | 572 |
| 566 TEST_F(RampUpTest, UpDownUpAbsSendTimeSimulcastRedRtx) { | 573 TEST_F(RampUpTest, UpDownUpAbsSendTimeSimulcastRedRtx) { |
| 567 std::vector<int> loss_rates = {0, 0, 0, 0}; | 574 std::vector<int> loss_rates = {0, 0, 0, 0}; |
| 568 RampUpDownUpTester test(3, 0, 0, kStartBitrateBps, | 575 RampUpDownUpTester test(3, 0, 0, kStartBitrateBps, |
| 569 RtpExtension::kAbsSendTimeUri, true, true, | 576 RtpExtension::kAbsSendTimeUri, true, true, loss_rates, |
| 570 loss_rates); | 577 true); |
| 571 RunBaseTest(&test); | 578 RunBaseTest(&test); |
| 572 } | 579 } |
| 573 | 580 |
| 574 TEST_F(RampUpTest, UpDownUpTransportSequenceNumberRtx) { | 581 TEST_F(RampUpTest, UpDownUpTransportSequenceNumberRtx) { |
| 575 std::vector<int> loss_rates = {0, 0, 0, 0}; | 582 std::vector<int> loss_rates = {0, 0, 0, 0}; |
| 576 RampUpDownUpTester test(3, 0, 0, kStartBitrateBps, | 583 RampUpDownUpTester test(3, 0, 0, kStartBitrateBps, |
| 577 RtpExtension::kTransportSequenceNumberUri, true, | 584 RtpExtension::kTransportSequenceNumberUri, true, |
| 578 false, loss_rates); | 585 false, loss_rates, true); |
| 579 RunBaseTest(&test); | 586 RunBaseTest(&test); |
| 580 } | 587 } |
| 581 | 588 |
| 582 TEST_F(RampUpTest, UpDownUpTransportSequenceNumberPacketLoss) { | 589 TEST_F(RampUpTest, UpDownUpTransportSequenceNumberPacketLoss) { |
| 583 std::vector<int> loss_rates = {20, 0, 0, 0}; | 590 std::vector<int> loss_rates = {20, 0, 0, 0}; |
| 584 RampUpDownUpTester test(1, 0, 1, kStartBitrateBps, | 591 RampUpDownUpTester test(1, 0, 1, kStartBitrateBps, |
| 585 RtpExtension::kTransportSequenceNumberUri, true, | 592 RtpExtension::kTransportSequenceNumberUri, true, |
| 586 false, loss_rates); | 593 false, loss_rates, false); |
| 587 RunBaseTest(&test); | 594 RunBaseTest(&test); |
| 588 } | 595 } |
| 589 | 596 |
| 590 TEST_F(RampUpTest, UpDownUpAudioVideoTransportSequenceNumberRtx) { | 597 TEST_F(RampUpTest, UpDownUpAudioVideoTransportSequenceNumberRtx) { |
| 591 std::vector<int> loss_rates = {0, 0, 0, 0}; | 598 std::vector<int> loss_rates = {0, 0, 0, 0}; |
| 592 RampUpDownUpTester test(3, 1, 0, kStartBitrateBps, | 599 RampUpDownUpTester test(3, 1, 0, kStartBitrateBps, |
| 593 RtpExtension::kTransportSequenceNumberUri, true, | 600 RtpExtension::kTransportSequenceNumberUri, true, |
| 594 false, loss_rates); | 601 false, loss_rates, true); |
| 595 RunBaseTest(&test); | 602 RunBaseTest(&test); |
| 596 } | 603 } |
| 597 | 604 |
| 598 TEST_F(RampUpTest, UpDownUpAudioTransportSequenceNumberRtx) { | 605 TEST_F(RampUpTest, UpDownUpAudioTransportSequenceNumberRtx) { |
| 599 std::vector<int> loss_rates = {0, 0, 0, 0}; | 606 std::vector<int> loss_rates = {0, 0, 0, 0}; |
| 600 RampUpDownUpTester test(0, 1, 0, kStartBitrateBps, | 607 RampUpDownUpTester test(0, 1, 0, kStartBitrateBps, |
| 601 RtpExtension::kTransportSequenceNumberUri, true, | 608 RtpExtension::kTransportSequenceNumberUri, true, |
| 602 false, loss_rates); | 609 false, loss_rates, true); |
| 603 RunBaseTest(&test); | 610 RunBaseTest(&test); |
| 604 } | 611 } |
| 605 | 612 |
| 606 TEST_F(RampUpTest, TOffsetSimulcastRedRtx) { | 613 TEST_F(RampUpTest, TOffsetSimulcastRedRtx) { |
| 607 RampUpTester test(3, 0, 0, 0, 0, RtpExtension::kTimestampOffsetUri, true, | 614 RampUpTester test(3, 0, 0, 0, 0, RtpExtension::kTimestampOffsetUri, true, |
| 608 true, true); | 615 true, true); |
| 609 RunBaseTest(&test); | 616 RunBaseTest(&test); |
| 610 } | 617 } |
| 611 | 618 |
| 612 TEST_F(RampUpTest, AbsSendTime) { | 619 TEST_F(RampUpTest, AbsSendTime) { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 639 RunBaseTest(&test); | 646 RunBaseTest(&test); |
| 640 } | 647 } |
| 641 | 648 |
| 642 TEST_F(RampUpTest, AudioTransportSequenceNumber) { | 649 TEST_F(RampUpTest, AudioTransportSequenceNumber) { |
| 643 RampUpTester test(0, 1, 0, 300000, 10000, | 650 RampUpTester test(0, 1, 0, 300000, 10000, |
| 644 RtpExtension::kTransportSequenceNumberUri, false, false, | 651 RtpExtension::kTransportSequenceNumberUri, false, false, |
| 645 false); | 652 false); |
| 646 RunBaseTest(&test); | 653 RunBaseTest(&test); |
| 647 } | 654 } |
| 648 } // namespace webrtc | 655 } // namespace webrtc |
| OLD | NEW |