diff options
author | Bjorn Terelius <terelius@webrtc.org> | 2020-05-19 10:57:24 +0200 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-05-19 09:45:16 +0000 |
commit | 48b82798132248dfa1aaf0ed3dcac57a44a6855f (patch) | |
tree | 9d9d31afc7b31fe77ea00695ce6a005986bba71c /logging | |
parent | 41559a2b46a80fb642b36bed6fa6bc1a43ce1238 (diff) | |
download | webrtc-48b82798132248dfa1aaf0ed3dcac57a44a6855f.tar.gz |
Refactor/reimplement RTC event log triage alerts.
- Moves AnalyzerConfig and helper functions IsAudioSsrc, IsVideoSsrc, IsRtxSsrc, GetStreamNam and GetLayerName to analyzer_common.h
- Moves log_segments() code to rtc_event_log_parser.h
- Moves TriageAlert/Notification code to a new file with a couple of minor fixes to make it less spammy.
Bug: webrtc:11566
Change-Id: Ib33941d8185f7382fc72ed65768e46015e0320de
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/174824
Commit-Queue: Björn Terelius <terelius@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31318}
Diffstat (limited to 'logging')
-rw-r--r-- | logging/rtc_event_log/rtc_event_log_parser.cc | 26 | ||||
-rw-r--r-- | logging/rtc_event_log/rtc_event_log_parser.h | 19 | ||||
-rw-r--r-- | logging/rtc_event_log/rtc_event_log_unittest.cc | 5 |
3 files changed, 50 insertions, 0 deletions
diff --git a/logging/rtc_event_log/rtc_event_log_parser.cc b/logging/rtc_event_log/rtc_event_log_parser.cc index 4016f84339..a3982bad22 100644 --- a/logging/rtc_event_log/rtc_event_log_parser.cc +++ b/logging/rtc_event_log/rtc_event_log_parser.cc @@ -1215,6 +1215,32 @@ ParsedRtcEventLog::ParseStatus ParsedRtcEventLog::ParseStream( StoreFirstAndLastTimestamp(generic_packets_received_); StoreFirstAndLastTimestamp(generic_acks_received_); + // TODO(terelius): This should be cleaned up. We could also handle + // a "missing" end event, by inserting the last previous regular + // event rather than the next start event. + auto start_iter = start_log_events().begin(); + auto stop_iter = stop_log_events().begin(); + while (start_iter != start_log_events().end()) { + int64_t start_us = start_iter->log_time_us(); + ++start_iter; + absl::optional<int64_t> next_start_us; + if (start_iter != start_log_events().end()) + next_start_us.emplace(start_iter->log_time_us()); + if (stop_iter != stop_log_events().end() && + stop_iter->log_time_us() <= + next_start_us.value_or(std::numeric_limits<int64_t>::max())) { + int64_t stop_us = stop_iter->log_time_us(); + RTC_PARSE_CHECK_OR_RETURN_LE(start_us, stop_us); + log_segments_.emplace_back(start_us, stop_us); + ++stop_iter; + } else { + // We're missing an end event. Assume that it occurred just before the + // next start. + log_segments_.emplace_back(start_us, + next_start_us.value_or(last_timestamp())); + } + } + return status; } diff --git a/logging/rtc_event_log/rtc_event_log_parser.h b/logging/rtc_event_log/rtc_event_log_parser.h index 7a162af897..be6b99aa82 100644 --- a/logging/rtc_event_log/rtc_event_log_parser.h +++ b/logging/rtc_event_log/rtc_event_log_parser.h @@ -330,6 +330,20 @@ class ParsedRtcEventLog { PacketView<const LoggedRtpPacket> packet_view; }; + class LogSegment { + public: + LogSegment(int64_t start_time_us, int64_t stop_time_us) + : start_time_us_(start_time_us), stop_time_us_(stop_time_us) {} + int64_t start_time_ms() const { return start_time_us_ / 1000; } + int64_t start_time_us() const { return start_time_us_; } + int64_t stop_time_ms() const { return stop_time_us_ / 1000; } + int64_t stop_time_us() const { return stop_time_us_; } + + private: + int64_t start_time_us_; + int64_t stop_time_us_; + }; + static webrtc::RtpHeaderExtensionMap GetDefaultHeaderExtensionMap(); explicit ParsedRtcEventLog( @@ -597,6 +611,8 @@ class ParsedRtcEventLog { int64_t first_timestamp() const { return first_timestamp_; } int64_t last_timestamp() const { return last_timestamp_; } + const std::vector<LogSegment>& log_segments() const { return log_segments_; } + std::vector<LoggedPacketInfo> GetPacketInfos(PacketDirection direction) const; std::vector<LoggedPacketInfo> GetIncomingPacketInfos() const { return GetPacketInfos(kIncomingPacket); @@ -850,6 +866,9 @@ class ParsedRtcEventLog { int64_t first_timestamp_; int64_t last_timestamp_; + // Stores the start and end timestamp for each log segments. + std::vector<LogSegment> log_segments_; + // The extension maps are mutable to allow us to insert the default // configuration when parsing an RTP header for an unconfigured stream. // TODO(terelius): This is only used for the legacy format. Remove once we've diff --git a/logging/rtc_event_log/rtc_event_log_unittest.cc b/logging/rtc_event_log/rtc_event_log_unittest.cc index 579c652880..59890066c5 100644 --- a/logging/rtc_event_log/rtc_event_log_unittest.cc +++ b/logging/rtc_event_log/rtc_event_log_unittest.cc @@ -739,6 +739,11 @@ void RtcEventLogSession::ReadAndVerifyLog() { EXPECT_EQ(first_timestamp_ms_, parsed_log.first_timestamp() / 1000); EXPECT_EQ(last_timestamp_ms_, parsed_log.last_timestamp() / 1000); + ASSERT_EQ(parsed_log.log_segments().size(), 1u); + EXPECT_EQ(parsed_log.log_segments()[0].start_time_ms(), + start_time_us_ / 1000); + EXPECT_EQ(parsed_log.log_segments()[0].stop_time_ms(), stop_time_us_ / 1000); + // Clean up temporary file - can be pretty slow. remove(temp_filename_.c_str()); } |