| Index: webrtc/video/video_send_stream_tests.cc
|
| diff --git a/webrtc/video/video_send_stream_tests.cc b/webrtc/video/video_send_stream_tests.cc
|
| index 4ef33abe72c69f53f650463a62d97a9e36b40ef0..3a4c93fb3411e4c148b5adb7619b511ad6395844 100644
|
| --- a/webrtc/video/video_send_stream_tests.cc
|
| +++ b/webrtc/video/video_send_stream_tests.cc
|
| @@ -1046,6 +1046,83 @@ TEST_F(VideoSendStreamTest, NoPaddingWhenVideoIsMuted) {
|
| RunBaseTest(&test);
|
| }
|
|
|
| +TEST_F(VideoSendStreamTest, PaddingIsPrimarilyRetransmissions) {
|
| + const int kCapacityKbps = 10000; // 10 Mbps
|
| + class PaddingIsPrimarilyRetransmissions : public test::EndToEndTest {
|
| + public:
|
| + PaddingIsPrimarilyRetransmissions()
|
| + : EndToEndTest(kDefaultTimeoutMs),
|
| + clock_(Clock::GetRealTimeClock()),
|
| + padding_length_(0),
|
| + total_length_(0),
|
| + call_(nullptr) {}
|
| +
|
| + private:
|
| + void OnCallsCreated(Call* sender_call, Call* receiver_call) override {
|
| + call_ = sender_call;
|
| + }
|
| +
|
| + Action OnSendRtp(const uint8_t* packet, size_t length) override {
|
| + rtc::CritScope lock(&crit_);
|
| +
|
| + RTPHeader header;
|
| + parser_->Parse(packet, length, &header);
|
| + padding_length_ += header.paddingLength;
|
| + total_length_ += length;
|
| + return SEND_PACKET;
|
| + }
|
| +
|
| + test::PacketTransport* CreateSendTransport(Call* sender_call) override {
|
| + const int kNetworkDelayMs = 50;
|
| + FakeNetworkPipe::Config config;
|
| + config.loss_percent = 10;
|
| + config.link_capacity_kbps = kCapacityKbps;
|
| + config.queue_delay_ms = kNetworkDelayMs;
|
| + return new test::PacketTransport(sender_call, this,
|
| + test::PacketTransport::kSender, config);
|
| + }
|
| +
|
| + 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,
|
| + test::kTransportSequenceNumberExtensionId));
|
| + // Turn on RTX.
|
| + send_config->rtp.rtx.payload_type = kFakeVideoSendPayloadType;
|
| + send_config->rtp.rtx.ssrcs.push_back(kVideoSendSsrcs[0]);
|
| +
|
| + (*receive_configs)[0].rtp.extensions.clear();
|
| + (*receive_configs)[0].rtp.extensions.push_back(
|
| + RtpExtension(RtpExtension::kTransportSequenceNumberUri,
|
| + test::kTransportSequenceNumberExtensionId));
|
| + (*receive_configs)[0].rtp.transport_cc = true;
|
| + }
|
| +
|
| + void PerformTest() override {
|
| + // TODO(isheriff): Some platforms do not ramp up as expected to full
|
| + // capacity due to packet scheduling delays. Fix that before getting
|
| + // rid of this.
|
| + SleepMs(5000);
|
| + {
|
| + rtc::CritScope lock(&crit_);
|
| + // Expect padding to be a small percentage of total bytes sent.
|
| + EXPECT_LT(padding_length_, .1 * total_length_);
|
| + }
|
| + }
|
| +
|
| + rtc::CriticalSection crit_;
|
| + Clock* const clock_;
|
| + size_t padding_length_ GUARDED_BY(crit_);
|
| + size_t total_length_ GUARDED_BY(crit_);
|
| + Call* call_;
|
| + } test;
|
| +
|
| + RunBaseTest(&test);
|
| +}
|
| +
|
| // This test first observes "high" bitrate use at which point it sends a REMB to
|
| // indicate that it should be lowered significantly. The test then observes that
|
| // the bitrate observed is sinking well below the min-transmit-bitrate threshold
|
|
|