Process RTP before RTCP in RTC event log analyzer.
This handles an unlikely corner case where you receive a RTCP feedback for a packet the same millisecond that you send it.
Bug: None
Change-Id: I77f460bef4073d4d9c5633c88f4d2dd8470f8577
Reviewed-on: https://webrtc-review.googlesource.com/c/113305
Commit-Queue: Björn Terelius <terelius@webrtc.org>
Reviewed-by: Elad Alon <eladalon@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25911}
diff --git a/rtc_tools/event_log_visualizer/analyzer.cc b/rtc_tools/event_log_visualizer/analyzer.cc
index 9c0a1d6..8d346f0 100644
--- a/rtc_tools/event_log_visualizer/analyzer.cc
+++ b/rtc_tools/event_log_visualizer/analyzer.cc
@@ -1124,6 +1124,24 @@
int64_t last_update_us = 0;
while (time_us != std::numeric_limits<int64_t>::max()) {
clock.AdvanceTimeMicroseconds(time_us - clock.TimeInMicroseconds());
+ if (clock.TimeInMicroseconds() >= NextRtpTime()) {
+ RTC_DCHECK_EQ(clock.TimeInMicroseconds(), NextRtpTime());
+ const RtpPacketType& rtp_packet = *rtp_iterator->second;
+ if (rtp_packet.rtp.header.extension.hasTransportSequenceNumber) {
+ RTC_DCHECK(rtp_packet.rtp.header.extension.hasTransportSequenceNumber);
+ transport_feedback.AddPacket(
+ rtp_packet.rtp.header.ssrc,
+ rtp_packet.rtp.header.extension.transportSequenceNumber,
+ rtp_packet.rtp.total_length, PacedPacketInfo());
+ rtc::SentPacket sent_packet(
+ rtp_packet.rtp.header.extension.transportSequenceNumber,
+ rtp_packet.rtp.log_time_us() / 1000);
+ auto sent_msg = transport_feedback.ProcessSentPacket(sent_packet);
+ if (sent_msg)
+ observer.Update(goog_cc->OnSentPacket(*sent_msg));
+ }
+ ++rtp_iterator;
+ }
if (clock.TimeInMicroseconds() >= NextRtcpTime()) {
RTC_DCHECK_EQ(clock.TimeInMicroseconds(), NextRtcpTime());
@@ -1154,24 +1172,6 @@
#endif // !(BWE_TEST_LOGGING_COMPILE_TIME_ENABLE)
++rtcp_iterator;
}
- if (clock.TimeInMicroseconds() >= NextRtpTime()) {
- RTC_DCHECK_EQ(clock.TimeInMicroseconds(), NextRtpTime());
- const RtpPacketType& rtp_packet = *rtp_iterator->second;
- if (rtp_packet.rtp.header.extension.hasTransportSequenceNumber) {
- RTC_DCHECK(rtp_packet.rtp.header.extension.hasTransportSequenceNumber);
- transport_feedback.AddPacket(
- rtp_packet.rtp.header.ssrc,
- rtp_packet.rtp.header.extension.transportSequenceNumber,
- rtp_packet.rtp.total_length, PacedPacketInfo());
- rtc::SentPacket sent_packet(
- rtp_packet.rtp.header.extension.transportSequenceNumber,
- rtp_packet.rtp.log_time_us() / 1000);
- auto sent_msg = transport_feedback.ProcessSentPacket(sent_packet);
- if (sent_msg)
- observer.Update(goog_cc->OnSentPacket(*sent_msg));
- }
- ++rtp_iterator;
- }
if (clock.TimeInMicroseconds() >= NextProcessTime()) {
RTC_DCHECK_EQ(clock.TimeInMicroseconds(), NextProcessTime());
ProcessInterval msg;