aboutsummaryrefslogtreecommitdiff
path: root/logging
diff options
context:
space:
mode:
authorBjorn Terelius <terelius@webrtc.org>2020-05-19 10:57:24 +0200
committerCommit Bot <commit-bot@chromium.org>2020-05-19 09:45:16 +0000
commit48b82798132248dfa1aaf0ed3dcac57a44a6855f (patch)
tree9d9d31afc7b31fe77ea00695ce6a005986bba71c /logging
parent41559a2b46a80fb642b36bed6fa6bc1a43ce1238 (diff)
downloadwebrtc-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.cc26
-rw-r--r--logging/rtc_event_log/rtc_event_log_parser.h19
-rw-r--r--logging/rtc_event_log/rtc_event_log_unittest.cc5
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());
}