From c8eeb18d41d8c986707ddd7699fdf5a799c14b2e Mon Sep 17 00:00:00 2001 From: Sebastian Jansson Date: Tue, 5 Mar 2019 08:43:05 +0100 Subject: [PATCH] Fixes parsing of logs where receive time info is missing. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: None Change-Id: I42165d3d9fa218f06013e964065a336e04f9f837 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/125522 Commit-Queue: Sebastian Jansson Reviewed-by: Björn Terelius Cr-Commit-Position: refs/heads/master@{#26962} --- logging/rtc_event_log/rtc_event_log_parser.cc | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/logging/rtc_event_log/rtc_event_log_parser.cc b/logging/rtc_event_log/rtc_event_log_parser.cc index 6589aab2a3..33b90789e7 100644 --- a/logging/rtc_event_log/rtc_event_log_parser.cc +++ b/logging/rtc_event_log/rtc_event_log_parser.cc @@ -1988,6 +1988,11 @@ std::vector ParsedRtcEventLog::GetPacketInfos( auto& last_fb = msg->packet_feedbacks.back(); Timestamp last_recv_time = last_fb.receive_time; + // This can happen if send time info is missing for the real last packet in + // the feedback, allowing the reported last packet to med indicated as lost. + if (last_recv_time.IsInfinite()) + RTC_LOG(LS_WARNING) << "No receive time for last packet in feedback."; + for (auto& fb : msg->packet_feedbacks) { if (indices.find(fb.sent_packet.sequence_number) == indices.end()) { RTC_LOG(LS_ERROR) << "Received feedback for unknown packet: " @@ -1997,17 +2002,19 @@ std::vector ParsedRtcEventLog::GetPacketInfos( LoggedPacketInfo* sent = &packets[indices[fb.sent_packet.sequence_number]]; sent->reported_recv_time = fb.receive_time; - // Is we have received feedback with a valid receive time for this packet + // If we have received feedback with a valid receive time for this packet // before, we keep the previous values. if (sent->log_feedback_time.IsFinite() && sent->reported_recv_time.IsFinite()) continue; sent->log_feedback_time = msg->feedback_time; - if (direction == PacketDirection::kOutgoingPacket) { - sent->feedback_hold_duration = last_recv_time - fb.receive_time; - } else { - sent->feedback_hold_duration = - Timestamp::ms(logged.log_time_ms()) - sent->log_packet_time; + if (last_recv_time.IsFinite()) { + if (direction == PacketDirection::kOutgoingPacket) { + sent->feedback_hold_duration = last_recv_time - fb.receive_time; + } else { + sent->feedback_hold_duration = + Timestamp::ms(logged.log_time_ms()) - sent->log_packet_time; + } } sent->last_in_feedback = (&fb == &last_fb); }