| Index: webrtc/call/rampup_tests.cc
|
| diff --git a/webrtc/call/rampup_tests.cc b/webrtc/call/rampup_tests.cc
|
| index 94153b08ae62287978313b3cfcef526f6037e017..46e97cd2a5352ad97b9f6901bb5e7c6bda92fb24 100644
|
| --- a/webrtc/call/rampup_tests.cc
|
| +++ b/webrtc/call/rampup_tests.cc
|
| @@ -11,7 +11,6 @@
|
| #include "webrtc/call/rampup_tests.h"
|
|
|
| #include "webrtc/base/checks.h"
|
| -#include "webrtc/base/logging.h"
|
| #include "webrtc/base/platform_thread.h"
|
| #include "webrtc/test/encoder_settings.h"
|
| #include "webrtc/test/gtest.h"
|
| @@ -21,7 +20,7 @@
|
| namespace {
|
|
|
| static const int64_t kPollIntervalMs = 20;
|
| -static const int kExpectedHighVideoBitrateBps = 80000;
|
| +static const int kExpectedHighVideoBitrateBps = 60000;
|
| static const int kExpectedHighAudioBitrateBps = 30000;
|
| static const int kLowBandwidthLimitBps = 20000;
|
| static const int kExpectedLowBitrateBps = 20000;
|
| @@ -36,7 +35,6 @@
|
|
|
| RampUpTester::RampUpTester(size_t num_video_streams,
|
| size_t num_audio_streams,
|
| - size_t num_flexfec_streams,
|
| unsigned int start_bitrate_bps,
|
| int64_t min_run_time_ms,
|
| const std::string& extension_type,
|
| @@ -48,7 +46,6 @@
|
| clock_(Clock::GetRealTimeClock()),
|
| num_video_streams_(num_video_streams),
|
| num_audio_streams_(num_audio_streams),
|
| - num_flexfec_streams_(num_flexfec_streams),
|
| rtx_(rtx),
|
| red_(red),
|
| sender_call_(nullptr),
|
| @@ -66,8 +63,6 @@
|
| poller_thread_(&BitrateStatsPollingThread,
|
| this,
|
| "BitrateStatsPollingThread") {
|
| - if (red_)
|
| - EXPECT_EQ(0u, num_flexfec_streams_);
|
| EXPECT_LE(num_audio_streams_, 1u);
|
| }
|
|
|
| @@ -103,10 +98,6 @@
|
|
|
| size_t RampUpTester::GetNumAudioStreams() const {
|
| return num_audio_streams_;
|
| -}
|
| -
|
| -size_t RampUpTester::GetNumFlexfecStreams() const {
|
| - return num_flexfec_streams_;
|
| }
|
|
|
| class RampUpTester::VideoStreamFactory
|
| @@ -218,13 +209,6 @@
|
| }
|
| ++i;
|
| }
|
| -
|
| - RTC_DCHECK_LE(num_flexfec_streams_, 1);
|
| - if (num_flexfec_streams_ == 1) {
|
| - send_config->rtp.flexfec.payload_type = test::CallTest::kFlexfecPayloadType;
|
| - send_config->rtp.flexfec.ssrc = test::CallTest::kFlexfecSendSsrc;
|
| - send_config->rtp.flexfec.protected_media_ssrcs = {video_ssrcs_[0]};
|
| - }
|
| }
|
|
|
| void RampUpTester::ModifyAudioConfigs(
|
| @@ -235,8 +219,6 @@
|
|
|
| EXPECT_NE(RtpExtension::kTimestampOffsetUri, extension_type_)
|
| << "Audio BWE not supported with toffset.";
|
| - EXPECT_NE(RtpExtension::kAbsSendTimeUri, extension_type_)
|
| - << "Audio BWE not supported with abs-send-time.";
|
|
|
| send_config->rtp.ssrc = audio_ssrcs_[0];
|
| send_config->rtp.extensions.clear();
|
| @@ -245,7 +227,11 @@
|
| send_config->max_bitrate_bps = 60000;
|
|
|
| bool transport_cc = false;
|
| - if (extension_type_ == RtpExtension::kTransportSequenceNumberUri) {
|
| + if (extension_type_ == RtpExtension::kAbsSendTimeUri) {
|
| + transport_cc = false;
|
| + send_config->rtp.extensions.push_back(
|
| + RtpExtension(extension_type_.c_str(), kAbsSendTimeExtensionId));
|
| + } else if (extension_type_ == RtpExtension::kTransportSequenceNumberUri) {
|
| transport_cc = true;
|
| send_config->rtp.extensions.push_back(RtpExtension(
|
| extension_type_.c_str(), kTransportSequenceNumberExtensionId));
|
| @@ -255,26 +241,6 @@
|
| recv_config.rtp.transport_cc = transport_cc;
|
| recv_config.rtp.extensions = send_config->rtp.extensions;
|
| recv_config.rtp.remote_ssrc = send_config->rtp.ssrc;
|
| - }
|
| -}
|
| -
|
| -void RampUpTester::ModifyFlexfecConfigs(
|
| - std::vector<FlexfecReceiveStream::Config>* receive_configs) {
|
| - if (num_flexfec_streams_ == 0)
|
| - return;
|
| - RTC_DCHECK_EQ(1, num_flexfec_streams_);
|
| - (*receive_configs)[0].payload_type = test::CallTest::kFlexfecPayloadType;
|
| - (*receive_configs)[0].remote_ssrc = test::CallTest::kFlexfecSendSsrc;
|
| - (*receive_configs)[0].protected_media_ssrcs = {video_ssrcs_[0]};
|
| - (*receive_configs)[0].local_ssrc = video_ssrcs_[0];
|
| - if (extension_type_ == RtpExtension::kAbsSendTimeUri) {
|
| - (*receive_configs)[0].transport_cc = false;
|
| - (*receive_configs)[0].rtp_header_extensions.push_back(
|
| - RtpExtension(extension_type_.c_str(), kAbsSendTimeExtensionId));
|
| - } else if (extension_type_ == RtpExtension::kTransportSequenceNumberUri) {
|
| - (*receive_configs)[0].transport_cc = true;
|
| - (*receive_configs)[0].rtp_header_extensions.push_back(RtpExtension(
|
| - extension_type_.c_str(), kTransportSequenceNumberExtensionId));
|
| }
|
| }
|
|
|
| @@ -385,32 +351,23 @@
|
|
|
| RampUpDownUpTester::RampUpDownUpTester(size_t num_video_streams,
|
| size_t num_audio_streams,
|
| - size_t num_flexfec_streams,
|
| unsigned int start_bitrate_bps,
|
| const std::string& extension_type,
|
| bool rtx,
|
| - bool red,
|
| - const std::vector<int>& loss_rates)
|
| + bool red)
|
| : RampUpTester(num_video_streams,
|
| num_audio_streams,
|
| - num_flexfec_streams,
|
| start_bitrate_bps,
|
| 0,
|
| extension_type,
|
| rtx,
|
| red,
|
| true),
|
| - link_rates_({GetHighLinkCapacity(), kLowBandwidthLimitBps / 1000,
|
| - GetHighLinkCapacity(), 0}),
|
| test_state_(kFirstRampup),
|
| - next_state_(kTransitionToNextState),
|
| state_start_ms_(clock_->TimeInMilliseconds()),
|
| interval_start_ms_(clock_->TimeInMilliseconds()),
|
| - sent_bytes_(0),
|
| - loss_rates_(loss_rates) {
|
| - forward_transport_config_.link_capacity_kbps = link_rates_[test_state_];
|
| - forward_transport_config_.queue_delay_ms = 100;
|
| - forward_transport_config_.loss_percent = loss_rates_[test_state_];
|
| + sent_bytes_(0) {
|
| + forward_transport_config_.link_capacity_kbps = GetHighLinkCapacity();
|
| }
|
|
|
| RampUpDownUpTester::~RampUpDownUpTester() {}
|
| @@ -475,79 +432,57 @@
|
| return 4 * GetExpectedHighBitrate() / (3 * 1000);
|
| }
|
|
|
| -size_t RampUpDownUpTester::GetFecBytes() const {
|
| - size_t flex_fec_bytes = 0;
|
| - if (num_flexfec_streams_ > 0) {
|
| - webrtc::VideoSendStream::Stats stats = send_stream_->GetStats();
|
| - for (const auto& kv : stats.substreams)
|
| - flex_fec_bytes += kv.second.rtp_stats.fec.TotalBytes();
|
| - }
|
| - return flex_fec_bytes;
|
| -}
|
| -
|
| -bool RampUpDownUpTester::ExpectingFec() const {
|
| - return num_flexfec_streams_ > 0 && forward_transport_config_.loss_percent > 0;
|
| -}
|
| -
|
| void RampUpDownUpTester::EvolveTestState(int bitrate_bps, bool suspended) {
|
| int64_t now = clock_->TimeInMilliseconds();
|
| switch (test_state_) {
|
| - case kFirstRampup:
|
| + case kFirstRampup: {
|
| EXPECT_FALSE(suspended);
|
| if (bitrate_bps >= GetExpectedHighBitrate()) {
|
| + // The first ramp-up has reached the target bitrate. Change the
|
| + // channel limit, and move to the next test state.
|
| + forward_transport_config_.link_capacity_kbps =
|
| + kLowBandwidthLimitBps / 1000;
|
| + send_transport_->SetConfig(forward_transport_config_);
|
| + test_state_ = kLowRate;
|
| webrtc::test::PrintResult("ramp_up_down_up", GetModifierString(),
|
| "first_rampup", now - state_start_ms_, "ms",
|
| false);
|
| - // Apply loss during the transition between states if FEC is enabled.
|
| - forward_transport_config_.loss_percent = loss_rates_[test_state_];
|
| - test_state_ = kTransitionToNextState;
|
| - next_state_ = kLowRate;
|
| + state_start_ms_ = now;
|
| + interval_start_ms_ = now;
|
| + sent_bytes_ = 0;
|
| }
|
| break;
|
| + }
|
| case kLowRate: {
|
| // Audio streams are never suspended.
|
| bool check_suspend_state = num_video_streams_ > 0;
|
| if (bitrate_bps < kExpectedLowBitrateBps &&
|
| suspended == check_suspend_state) {
|
| + // The ramp-down was successful. Change the channel limit back to a
|
| + // high value, and move to the next test state.
|
| + forward_transport_config_.link_capacity_kbps = GetHighLinkCapacity();
|
| + send_transport_->SetConfig(forward_transport_config_);
|
| + test_state_ = kSecondRampup;
|
| webrtc::test::PrintResult("ramp_up_down_up", GetModifierString(),
|
| "rampdown", now - state_start_ms_, "ms",
|
| false);
|
| - // Apply loss during the transition between states if FEC is enabled.
|
| - forward_transport_config_.loss_percent = loss_rates_[test_state_];
|
| - test_state_ = kTransitionToNextState;
|
| - next_state_ = kSecondRampup;
|
| + state_start_ms_ = now;
|
| + interval_start_ms_ = now;
|
| + sent_bytes_ = 0;
|
| }
|
| break;
|
| }
|
| - case kSecondRampup:
|
| + case kSecondRampup: {
|
| if (bitrate_bps >= GetExpectedHighBitrate() && !suspended) {
|
| webrtc::test::PrintResult("ramp_up_down_up", GetModifierString(),
|
| "second_rampup", now - state_start_ms_, "ms",
|
| false);
|
| ReportResult("ramp-up-down-up-average-network-latency",
|
| send_transport_->GetAverageDelayMs(), "milliseconds");
|
| - // Apply loss during the transition between states if FEC is enabled.
|
| - forward_transport_config_.loss_percent = loss_rates_[test_state_];
|
| - test_state_ = kTransitionToNextState;
|
| - next_state_ = kTestEnd;
|
| + observation_complete_.Set();
|
| }
|
| break;
|
| - case kTestEnd:
|
| - observation_complete_.Set();
|
| - break;
|
| - case kTransitionToNextState:
|
| - if (!ExpectingFec() || GetFecBytes() > 0) {
|
| - test_state_ = next_state_;
|
| - forward_transport_config_.link_capacity_kbps = link_rates_[test_state_];
|
| - // No loss while ramping up and down as it may affect the BWE
|
| - // negatively, making the test flaky.
|
| - forward_transport_config_.loss_percent = 0;
|
| - state_start_ms_ = now;
|
| - interval_start_ms_ = now;
|
| - sent_bytes_ = 0;
|
| - send_transport_->SetConfig(forward_transport_config_);
|
| - }
|
| - break;
|
| + }
|
| }
|
| }
|
|
|
| @@ -564,83 +499,70 @@
|
| static const uint32_t kStartBitrateBps = 60000;
|
|
|
| TEST_F(RampUpTest, UpDownUpAbsSendTimeSimulcastRedRtx) {
|
| - std::vector<int> loss_rates = {0, 0, 0, 0};
|
| - RampUpDownUpTester test(3, 0, 0, kStartBitrateBps,
|
| - RtpExtension::kAbsSendTimeUri, true, true,
|
| - loss_rates);
|
| + RampUpDownUpTester test(3, 0, kStartBitrateBps, RtpExtension::kAbsSendTimeUri,
|
| + true, true);
|
| RunBaseTest(&test);
|
| }
|
|
|
| TEST_F(RampUpTest, UpDownUpTransportSequenceNumberRtx) {
|
| - std::vector<int> loss_rates = {0, 0, 0, 0};
|
| - RampUpDownUpTester test(3, 0, 0, kStartBitrateBps,
|
| + RampUpDownUpTester test(3, 0, kStartBitrateBps,
|
| RtpExtension::kTransportSequenceNumberUri, true,
|
| - false, loss_rates);
|
| - RunBaseTest(&test);
|
| -}
|
| -
|
| -TEST_F(RampUpTest, UpDownUpTransportSequenceNumberPacketLoss) {
|
| - std::vector<int> loss_rates = {20, 0, 0, 0};
|
| - RampUpDownUpTester test(1, 0, 1, kStartBitrateBps,
|
| + false);
|
| + RunBaseTest(&test);
|
| +}
|
| +
|
| +TEST_F(RampUpTest, UpDownUpAudioVideoTransportSequenceNumberRtx) {
|
| + RampUpDownUpTester test(3, 1, kStartBitrateBps,
|
| RtpExtension::kTransportSequenceNumberUri, true,
|
| - false, loss_rates);
|
| - RunBaseTest(&test);
|
| -}
|
| -
|
| -TEST_F(RampUpTest, UpDownUpAudioVideoTransportSequenceNumberRtx) {
|
| - std::vector<int> loss_rates = {0, 0, 0, 0};
|
| - RampUpDownUpTester test(3, 1, 0, kStartBitrateBps,
|
| + false);
|
| + RunBaseTest(&test);
|
| +}
|
| +
|
| +TEST_F(RampUpTest, UpDownUpAudioTransportSequenceNumberRtx) {
|
| + RampUpDownUpTester test(0, 1, kStartBitrateBps,
|
| RtpExtension::kTransportSequenceNumberUri, true,
|
| - false, loss_rates);
|
| - RunBaseTest(&test);
|
| -}
|
| -
|
| -TEST_F(RampUpTest, UpDownUpAudioTransportSequenceNumberRtx) {
|
| - std::vector<int> loss_rates = {0, 0, 0, 0};
|
| - RampUpDownUpTester test(0, 1, 0, kStartBitrateBps,
|
| - RtpExtension::kTransportSequenceNumberUri, true,
|
| - false, loss_rates);
|
| + false);
|
| RunBaseTest(&test);
|
| }
|
|
|
| TEST_F(RampUpTest, TOffsetSimulcastRedRtx) {
|
| - RampUpTester test(3, 0, 0, 0, 0, RtpExtension::kTimestampOffsetUri, true,
|
| - true, true);
|
| + RampUpTester test(3, 0, 0, 0, RtpExtension::kTimestampOffsetUri, true, true,
|
| + true);
|
| RunBaseTest(&test);
|
| }
|
|
|
| TEST_F(RampUpTest, AbsSendTime) {
|
| - RampUpTester test(1, 0, 0, 0, 0, RtpExtension::kAbsSendTimeUri, false, false,
|
| + RampUpTester test(1, 0, 0, 0, RtpExtension::kAbsSendTimeUri, false, false,
|
| true);
|
| RunBaseTest(&test);
|
| }
|
|
|
| TEST_F(RampUpTest, AbsSendTimeSimulcastRedRtx) {
|
| - RampUpTester test(3, 0, 0, 0, 0, RtpExtension::kAbsSendTimeUri, true, true,
|
| + RampUpTester test(3, 0, 0, 0, RtpExtension::kAbsSendTimeUri, true, true,
|
| true);
|
| RunBaseTest(&test);
|
| }
|
|
|
| TEST_F(RampUpTest, TransportSequenceNumber) {
|
| - RampUpTester test(1, 0, 0, 0, 0, RtpExtension::kTransportSequenceNumberUri,
|
| + RampUpTester test(1, 0, 0, 0, RtpExtension::kTransportSequenceNumberUri,
|
| false, false, true);
|
| RunBaseTest(&test);
|
| }
|
|
|
| TEST_F(RampUpTest, TransportSequenceNumberSimulcast) {
|
| - RampUpTester test(3, 0, 0, 0, 0, RtpExtension::kTransportSequenceNumberUri,
|
| + RampUpTester test(3, 0, 0, 0, RtpExtension::kTransportSequenceNumberUri,
|
| false, false, true);
|
| RunBaseTest(&test);
|
| }
|
|
|
| TEST_F(RampUpTest, TransportSequenceNumberSimulcastRedRtx) {
|
| - RampUpTester test(3, 0, 0, 0, 0, RtpExtension::kTransportSequenceNumberUri,
|
| + RampUpTester test(3, 0, 0, 0, RtpExtension::kTransportSequenceNumberUri,
|
| true, true, true);
|
| RunBaseTest(&test);
|
| }
|
|
|
| TEST_F(RampUpTest, AudioTransportSequenceNumber) {
|
| - RampUpTester test(0, 1, 0, 300000, 10000,
|
| + RampUpTester test(0, 1, 300000, 10000,
|
| RtpExtension::kTransportSequenceNumberUri, false, false,
|
| false);
|
| RunBaseTest(&test);
|
|
|