Chromium Code Reviews| 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 656aadce374c585191134ddfca118cd25e120a20..c33b3cdef6ce7a88db03b93db8d3f4808b0f48b2 100644 |
| --- a/webrtc/video/video_send_stream_tests.cc |
| +++ b/webrtc/video/video_send_stream_tests.cc |
| @@ -1044,6 +1044,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; |
|
stefan-webrtc
2016/09/30 08:37:21
You only have to protect padding_length_ and total
Irfan
2016/10/03 18:45:26
Right, but given the contention is a one time thin
stefan-webrtc
2016/10/04 14:56:40
Acknowledged.
|
| + 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 |
|
stefan-webrtc
2016/09/30 08:37:21
End with .
Irfan
2016/10/03 18:45:26
Done.
|
| + 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_); |
|
stefan-webrtc
2016/09/30 08:37:21
Just a question: I would have expected 0% padding.
Irfan
2016/10/03 18:45:26
Adding logs, I see that there are a small number o
stefan-webrtc
2016/10/04 14:56:40
Out of curiosity, are those sent before any media
Irfan
2016/10/04 15:23:33
Clarification here: Turns out, its actually becaus
|
| + } |
| + } |
| + |
| + rtc::CriticalSection crit_; |
| + Clock* const clock_; |
| + size_t padding_length_; |
| + size_t total_length_; |
|
stefan-webrtc
2016/09/30 08:37:21
Add GUARDED_BY
Irfan
2016/10/03 18:45:26
Done.
|
| + 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 |