From 04164cc5ace07b3cb9b6add79c8eeefec757ec54 Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Fri, 26 Jan 2018 20:01:48 +0100 Subject: [PATCH] When processing report blocks do not store rtt when it is not calculated MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Otherwise bandwidth observer might miss rtt calculated from previous report block Bug: webrtc:8805 Change-Id: If3c4f4ee2e923d440ff352e8b770442f1a11fa34 Reviewed-on: https://webrtc-review.googlesource.com/44480 Reviewed-by: Erik Språng Commit-Queue: Danil Chapovalov Cr-Commit-Position: refs/heads/master@{#21800} --- modules/rtp_rtcp/source/rtcp_receiver.cc | 4 +-- .../rtp_rtcp/source/rtcp_receiver_unittest.cc | 27 +++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/modules/rtp_rtcp/source/rtcp_receiver.cc b/modules/rtp_rtcp/source/rtcp_receiver.cc index cff7468af6..91c88e2ca7 100644 --- a/modules/rtp_rtcp/source/rtcp_receiver.cc +++ b/modules/rtp_rtcp/source/rtcp_receiver.cc @@ -502,12 +502,12 @@ void RTCPReceiver::HandleReportBlock(const ReportBlock& report_block, report_block_info->last_rtt_ms = rtt_ms; report_block_info->sum_rtt_ms += rtt_ms; ++report_block_info->num_rtts; + + packet_information->rtt_ms = rtt_ms; } TRACE_COUNTER_ID1(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "RR_RTT", report_block.source_ssrc(), rtt_ms); - - packet_information->rtt_ms = rtt_ms; packet_information->report_blocks.push_back(report_block_info->report_block); } diff --git a/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc b/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc index fb09ee1b7b..85337a9bbb 100644 --- a/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc +++ b/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc @@ -264,6 +264,33 @@ TEST_F(RtcpReceiverTest, InjectSrPacketCalculatesNegativeRTTAsOne) { EXPECT_EQ(1, rtt_ms); } +TEST_F( + RtcpReceiverTest, + TwoReportBlocksWithLastOneWithoutLastSrCalculatesRttForBandwidthObserver) { + const int64_t kRttMs = 120; + const uint32_t kDelayNtp = 123000; + const int64_t kDelayMs = CompactNtpRttToMs(kDelayNtp); + + uint32_t sent_ntp = CompactNtp(system_clock_.CurrentNtpTime()); + system_clock_.AdvanceTimeMilliseconds(kRttMs + kDelayMs); + + rtcp::SenderReport sr; + sr.SetSenderSsrc(kSenderSsrc); + rtcp::ReportBlock block; + block.SetMediaSsrc(kReceiverMainSsrc); + block.SetLastSr(sent_ntp); + block.SetDelayLastSr(kDelayNtp); + sr.AddReportBlock(block); + block.SetMediaSsrc(kReceiverExtraSsrc); + block.SetLastSr(0); + sr.AddReportBlock(block); + + EXPECT_CALL(rtp_rtcp_impl_, OnReceivedRtcpReportBlocks(SizeIs(2))); + EXPECT_CALL(bandwidth_observer_, + OnReceivedRtcpReceiverReport(SizeIs(2), kRttMs, _)); + InjectRtcpPacket(sr); +} + TEST_F(RtcpReceiverTest, InjectRrPacket) { int64_t now = system_clock_.TimeInMilliseconds(); rtcp::ReceiverReport rr;