| Index: webrtc/video/end_to_end_tests.cc
|
| diff --git a/webrtc/video/end_to_end_tests.cc b/webrtc/video/end_to_end_tests.cc
|
| index 6812467cb7062e384aae80075961261b655cdb9d..966a6d3f25b560dc933c3d8cf9f924febb497bf5 100644
|
| --- a/webrtc/video/end_to_end_tests.cc
|
| +++ b/webrtc/video/end_to_end_tests.cc
|
| @@ -1308,6 +1308,7 @@ void EndToEndTest::RespectsRtcpMode(RtcpMode rtcp_mode) {
|
|
|
| private:
|
| Action OnSendRtp(const uint8_t* packet, size_t length) override {
|
| + rtc::CritScope lock(&crit_);
|
| if (++sent_rtp_ % 3 == 0)
|
| return DROP_PACKET;
|
|
|
| @@ -1315,6 +1316,7 @@ void EndToEndTest::RespectsRtcpMode(RtcpMode rtcp_mode) {
|
| }
|
|
|
| Action OnReceiveRtcp(const uint8_t* packet, size_t length) override {
|
| + rtc::CritScope lock(&crit_);
|
| ++sent_rtcp_;
|
| test::RtcpPacketParser parser;
|
| EXPECT_TRUE(parser.Parse(packet, length));
|
| @@ -1323,7 +1325,10 @@ void EndToEndTest::RespectsRtcpMode(RtcpMode rtcp_mode) {
|
|
|
| switch (rtcp_mode_) {
|
| case RtcpMode::kCompound:
|
| - if (parser.receiver_report()->num_packets() == 0) {
|
| + // TODO(holmer): We shouldn't send transport feedback alone if
|
| + // compound RTCP is negotiated.
|
| + if (parser.receiver_report()->num_packets() == 0 &&
|
| + parser.transport_feedback()->num_packets() == 0) {
|
| ADD_FAILURE() << "Received RTCP packet without receiver report for "
|
| "RtcpMode::kCompound.";
|
| observation_complete_.Set();
|
| @@ -1362,8 +1367,11 @@ void EndToEndTest::RespectsRtcpMode(RtcpMode rtcp_mode) {
|
| }
|
|
|
| RtcpMode rtcp_mode_;
|
| - int sent_rtp_;
|
| - int sent_rtcp_;
|
| + rtc::CriticalSection crit_;
|
| + // Must be protected since RTCP can be sent by both the process thread
|
| + // and the pacer thread.
|
| + int sent_rtp_ GUARDED_BY(&crit_);
|
| + int sent_rtcp_ GUARDED_BY(&crit_);
|
| } test(rtcp_mode);
|
|
|
| RunBaseTest(&test);
|
| @@ -1803,10 +1811,6 @@ class TransportFeedbackTester : public test::EndToEndTest {
|
| VideoSendStream::Config* send_config,
|
| std::vector<VideoReceiveStream::Config>* receive_configs,
|
| VideoEncoderConfig* encoder_config) override {
|
| - send_config->rtp.extensions.clear();
|
| - send_config->rtp.extensions.push_back(
|
| - RtpExtension(RtpExtension::kTransportSequenceNumberUri, kExtensionId));
|
| - (*receive_configs)[0].rtp.extensions = send_config->rtp.extensions;
|
| (*receive_configs)[0].rtp.transport_cc = feedback_enabled_;
|
| }
|
|
|
| @@ -1934,6 +1938,17 @@ TEST_P(EndToEndTest, ReceiveStreamSendsRemb) {
|
| public:
|
| RembObserver() : EndToEndTest(kDefaultTimeoutMs) {}
|
|
|
| + void ModifyVideoConfigs(
|
| + VideoSendStream::Config* send_config,
|
| + std::vector<VideoReceiveStream::Config>* receive_configs,
|
| + VideoEncoderConfig* encoder_config) override {
|
| + send_config->rtp.extensions.clear();
|
| + send_config->rtp.extensions.push_back(RtpExtension(
|
| + RtpExtension::kAbsSendTimeUri, test::kAbsSendTimeExtensionId));
|
| + (*receive_configs)[0].rtp.remb = true;
|
| + (*receive_configs)[0].rtp.transport_cc = false;
|
| + }
|
| +
|
| Action OnReceiveRtcp(const uint8_t* packet, size_t length) override {
|
| test::RtcpPacketParser parser;
|
| EXPECT_TRUE(parser.Parse(packet, length));
|
| @@ -1958,46 +1973,66 @@ TEST_P(EndToEndTest, ReceiveStreamSendsRemb) {
|
| RunBaseTest(&test);
|
| }
|
|
|
| -TEST_P(EndToEndTest, VerifyBandwidthStats) {
|
| - class RtcpObserver : public test::EndToEndTest {
|
| - public:
|
| - RtcpObserver()
|
| - : EndToEndTest(kDefaultTimeoutMs),
|
| - sender_call_(nullptr),
|
| - receiver_call_(nullptr),
|
| - has_seen_pacer_delay_(false) {}
|
| +class BandwidthStatsTest : public test::EndToEndTest {
|
| + public:
|
| + explicit BandwidthStatsTest(bool send_side_bwe)
|
| + : EndToEndTest(test::CallTest::kDefaultTimeoutMs),
|
| + sender_call_(nullptr),
|
| + receiver_call_(nullptr),
|
| + has_seen_pacer_delay_(false),
|
| + send_side_bwe_(send_side_bwe) {}
|
|
|
| - Action OnSendRtp(const uint8_t* packet, size_t length) override {
|
| - Call::Stats sender_stats = sender_call_->GetStats();
|
| - Call::Stats receiver_stats = receiver_call_->GetStats();
|
| - if (!has_seen_pacer_delay_)
|
| - has_seen_pacer_delay_ = sender_stats.pacer_delay_ms > 0;
|
| - if (sender_stats.send_bandwidth_bps > 0 &&
|
| - receiver_stats.recv_bandwidth_bps > 0 && has_seen_pacer_delay_) {
|
| - observation_complete_.Set();
|
| - }
|
| - return SEND_PACKET;
|
| + void ModifyVideoConfigs(
|
| + VideoSendStream::Config* send_config,
|
| + std::vector<VideoReceiveStream::Config>* receive_configs,
|
| + VideoEncoderConfig* encoder_config) override {
|
| + if (!send_side_bwe_) {
|
| + send_config->rtp.extensions.clear();
|
| + send_config->rtp.extensions.push_back(RtpExtension(
|
| + RtpExtension::kAbsSendTimeUri, test::kAbsSendTimeExtensionId));
|
| + (*receive_configs)[0].rtp.remb = true;
|
| + (*receive_configs)[0].rtp.transport_cc = false;
|
| }
|
| + }
|
|
|
| - void OnCallsCreated(Call* sender_call, Call* receiver_call) override {
|
| - sender_call_ = sender_call;
|
| - receiver_call_ = receiver_call;
|
| + Action OnSendRtp(const uint8_t* packet, size_t length) override {
|
| + Call::Stats sender_stats = sender_call_->GetStats();
|
| + Call::Stats receiver_stats = receiver_call_->GetStats();
|
| + if (!has_seen_pacer_delay_)
|
| + has_seen_pacer_delay_ = sender_stats.pacer_delay_ms > 0;
|
| + if (sender_stats.send_bandwidth_bps > 0 && has_seen_pacer_delay_) {
|
| + if (send_side_bwe_ || receiver_stats.recv_bandwidth_bps > 0)
|
| + observation_complete_.Set();
|
| }
|
| + return SEND_PACKET;
|
| + }
|
|
|
| - void PerformTest() override {
|
| - EXPECT_TRUE(Wait()) << "Timed out while waiting for "
|
| - "non-zero bandwidth stats.";
|
| - }
|
| + void OnCallsCreated(Call* sender_call, Call* receiver_call) override {
|
| + sender_call_ = sender_call;
|
| + receiver_call_ = receiver_call;
|
| + }
|
|
|
| - private:
|
| - Call* sender_call_;
|
| - Call* receiver_call_;
|
| - bool has_seen_pacer_delay_;
|
| - } test;
|
| + void PerformTest() override {
|
| + EXPECT_TRUE(Wait()) << "Timed out while waiting for "
|
| + "non-zero bandwidth stats.";
|
| + }
|
| +
|
| + private:
|
| + Call* sender_call_;
|
| + Call* receiver_call_;
|
| + bool has_seen_pacer_delay_;
|
| + const bool send_side_bwe_;
|
| +};
|
|
|
| +TEST_P(EndToEndTest, VerifySendSideBweStats) {
|
| + BandwidthStatsTest test(true);
|
| RunBaseTest(&test);
|
| }
|
|
|
| +TEST_P(EndToEndTest, VerifyRecvSideBweStats) {
|
| + BandwidthStatsTest test(false);
|
| + RunBaseTest(&test);
|
| +}
|
|
|
| // Verifies that it's possible to limit the send BWE by sending a REMB.
|
| // This is verified by allowing the send BWE to ramp-up to >1000 kbps,
|
| @@ -2042,18 +2077,11 @@ TEST_P(EndToEndTest, RembWithSendSideBwe) {
|
| std::vector<VideoReceiveStream::Config>* receive_configs,
|
| VideoEncoderConfig* encoder_config) override {
|
| ASSERT_EQ(1u, send_config->rtp.ssrcs.size());
|
| - send_config->rtp.extensions.clear();
|
| - send_config->rtp.extensions.push_back(
|
| - RtpExtension(RtpExtension::kTransportSequenceNumberUri,
|
| - test::kTransportSequenceNumberExtensionId));
|
| sender_ssrc_ = send_config->rtp.ssrcs[0];
|
|
|
| encoder_config->max_bitrate_bps = 2000000;
|
|
|
| ASSERT_EQ(1u, receive_configs->size());
|
| - (*receive_configs)[0].rtp.remb = false;
|
| - (*receive_configs)[0].rtp.transport_cc = true;
|
| - (*receive_configs)[0].rtp.extensions = send_config->rtp.extensions;
|
| RtpRtcp::Configuration config;
|
| config.receiver_only = true;
|
| config.clock = clock_;
|
| @@ -2307,11 +2335,6 @@ void EndToEndTest::VerifyHistogramStats(bool use_rtx,
|
| VideoSendStream::Config* send_config,
|
| std::vector<VideoReceiveStream::Config>* receive_configs,
|
| VideoEncoderConfig* encoder_config) override {
|
| - static const int kExtensionId = 8;
|
| - send_config->rtp.extensions.push_back(RtpExtension(
|
| - RtpExtension::kTransportSequenceNumberUri, kExtensionId));
|
| - (*receive_configs)[0].rtp.extensions.push_back(RtpExtension(
|
| - RtpExtension::kTransportSequenceNumberUri, kExtensionId));
|
| // NACK
|
| send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
|
| (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
|
| @@ -3974,16 +3997,6 @@ TEST_P(EndToEndTest, TransportSeqNumOnAudioAndVideo) {
|
| size_t GetNumVideoStreams() const override { return 1; }
|
| size_t GetNumAudioStreams() const override { return 1; }
|
|
|
| - void ModifyVideoConfigs(
|
| - VideoSendStream::Config* send_config,
|
| - std::vector<VideoReceiveStream::Config>* receive_configs,
|
| - VideoEncoderConfig* encoder_config) override {
|
| - send_config->rtp.extensions.clear();
|
| - send_config->rtp.extensions.push_back(RtpExtension(
|
| - RtpExtension::kTransportSequenceNumberUri, kExtensionId));
|
| - (*receive_configs)[0].rtp.extensions = send_config->rtp.extensions;
|
| - }
|
| -
|
| void ModifyAudioConfigs(
|
| AudioSendStream::Config* send_config,
|
| std::vector<AudioReceiveStream::Config>* receive_configs) override {
|
|
|