Renames RtcEventLogParseNew to RtcEventLogParser
Bug: webrtc:10170
Change-Id: I9232c276229a64fa4d8321b6c996387fe130f68b
Reviewed-on: https://webrtc-review.googlesource.com/c/116064
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Reviewed-by: Björn Terelius <terelius@webrtc.org>
Reviewed-by: Minyue Li <minyue@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26128}
diff --git a/logging/BUILD.gn b/logging/BUILD.gn
index 3eda875..edb1b86 100644
--- a/logging/BUILD.gn
+++ b/logging/BUILD.gn
@@ -291,7 +291,8 @@
visibility = [ "*" ]
sources = [
"rtc_event_log/logged_events.h",
- "rtc_event_log/rtc_event_log_parser_new.cc",
+ "rtc_event_log/rtc_event_log_parser.cc",
+ "rtc_event_log/rtc_event_log_parser.h",
"rtc_event_log/rtc_event_log_parser_new.h",
"rtc_event_log/rtc_event_processor.h",
]
@@ -312,6 +313,7 @@
"../modules/rtp_rtcp",
"../modules/rtp_rtcp:rtp_rtcp_format",
"../rtc_base:checks",
+ "../rtc_base:deprecation",
"../rtc_base:protobuf_utils",
"../rtc_base:rtc_base_approved",
"//third_party/abseil-cpp/absl/memory",
diff --git a/logging/rtc_event_log/encoder/rtc_event_log_encoder_unittest.cc b/logging/rtc_event_log/encoder/rtc_event_log_encoder_unittest.cc
index 7054365..2225d87 100644
--- a/logging/rtc_event_log/encoder/rtc_event_log_encoder_unittest.cc
+++ b/logging/rtc_event_log/encoder/rtc_event_log_encoder_unittest.cc
@@ -32,7 +32,7 @@
#include "logging/rtc_event_log/events/rtc_event_rtp_packet_outgoing.h"
#include "logging/rtc_event_log/events/rtc_event_video_receive_stream_config.h"
#include "logging/rtc_event_log/events/rtc_event_video_send_stream_config.h"
-#include "logging/rtc_event_log/rtc_event_log_parser_new.h"
+#include "logging/rtc_event_log/rtc_event_log_parser.h"
#include "logging/rtc_event_log/rtc_event_log_unittest_helper.h"
#include "modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor_config.h"
#include "modules/remote_bitrate_estimator/include/bwe_defines.h"
@@ -74,7 +74,7 @@
template <typename ParsedType>
const std::vector<ParsedType>* GetRtpPacketsBySsrc(
- const ParsedRtcEventLogNew* parsed_log,
+ const ParsedRtcEventLog* parsed_log,
uint32_t ssrc);
template <typename EventType, typename ParsedType>
@@ -82,7 +82,7 @@
std::deque<std::unique_ptr<RtcEvent>> history_;
std::unique_ptr<RtcEventLogEncoder> encoder_;
- ParsedRtcEventLogNew parsed_log_;
+ ParsedRtcEventLog parsed_log_;
const uint64_t seed_;
Random prng_;
const bool new_encoding_;
@@ -128,9 +128,8 @@
template <>
const std::vector<LoggedRtpPacketIncoming>*
-RtcEventLogEncoderTest::GetRtpPacketsBySsrc(
- const ParsedRtcEventLogNew* parsed_log,
- uint32_t ssrc) {
+RtcEventLogEncoderTest::GetRtpPacketsBySsrc(const ParsedRtcEventLog* parsed_log,
+ uint32_t ssrc) {
const auto& incoming_streams = parsed_log->incoming_rtp_packets_by_ssrc();
for (const auto& stream : incoming_streams) {
if (stream.ssrc == ssrc) {
@@ -142,9 +141,8 @@
template <>
const std::vector<LoggedRtpPacketOutgoing>*
-RtcEventLogEncoderTest::GetRtpPacketsBySsrc(
- const ParsedRtcEventLogNew* parsed_log,
- uint32_t ssrc) {
+RtcEventLogEncoderTest::GetRtpPacketsBySsrc(const ParsedRtcEventLog* parsed_log,
+ uint32_t ssrc) {
const auto& outgoing_streams = parsed_log->outgoing_rtp_packets_by_ssrc();
for (const auto& stream : outgoing_streams) {
if (stream.ssrc == ssrc) {
diff --git a/logging/rtc_event_log/rtc_event_log2rtp_dump.cc b/logging/rtc_event_log/rtc_event_log2rtp_dump.cc
index e6608e2..c446212 100644
--- a/logging/rtc_event_log/rtc_event_log2rtp_dump.cc
+++ b/logging/rtc_event_log/rtc_event_log2rtp_dump.cc
@@ -21,7 +21,7 @@
#include "api/array_view.h"
#include "api/rtp_headers.h"
#include "logging/rtc_event_log/rtc_event_log.h"
-#include "logging/rtc_event_log/rtc_event_log_parser_new.h"
+#include "logging/rtc_event_log/rtc_event_log_parser.h"
#include "logging/rtc_event_log/rtc_event_processor.h"
#include "modules/rtp_rtcp/include/rtp_header_extension_map.h"
#include "modules/rtp_rtcp/source/rtp_header_extensions.h"
@@ -33,7 +33,7 @@
namespace {
-using MediaType = webrtc::ParsedRtcEventLogNew::MediaType;
+using MediaType = webrtc::ParsedRtcEventLog::MediaType;
WEBRTC_DEFINE_bool(
audio,
@@ -185,7 +185,7 @@
RTC_CHECK(ssrc_filter.has_value()) << "Failed to read SSRC filter flag.";
}
- webrtc::ParsedRtcEventLogNew parsed_stream;
+ webrtc::ParsedRtcEventLog parsed_stream;
if (!parsed_stream.ParseFile(input_file)) {
std::cerr << "Error while parsing input file: " << input_file << std::endl;
return -1;
@@ -205,7 +205,7 @@
bool header_only = false;
webrtc::RtpHeaderExtensionMap default_extension_map =
- webrtc::ParsedRtcEventLogNew::GetDefaultHeaderExtensionMap();
+ webrtc::ParsedRtcEventLog::GetDefaultHeaderExtensionMap();
auto handle_rtp = [&default_extension_map, &rtp_writer, &rtp_counter](
const webrtc::LoggedRtpPacketIncoming& incoming) {
webrtc::test::RtpPacket packet;
diff --git a/logging/rtc_event_log/rtc_event_log_parser_new.cc b/logging/rtc_event_log/rtc_event_log_parser.cc
similarity index 95%
rename from logging/rtc_event_log/rtc_event_log_parser_new.cc
rename to logging/rtc_event_log/rtc_event_log_parser.cc
index 79747b0..d0f9f2b 100644
--- a/logging/rtc_event_log/rtc_event_log_parser_new.cc
+++ b/logging/rtc_event_log/rtc_event_log_parser.cc
@@ -8,7 +8,7 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-#include "logging/rtc_event_log/rtc_event_log_parser_new.h"
+#include "logging/rtc_event_log/rtc_event_log_parser.h"
#include <stdint.h>
#include <string.h>
@@ -788,23 +788,21 @@
LoggedRtcpPacket::LoggedRtcpPacket(const LoggedRtcpPacket& rhs) = default;
LoggedRtcpPacket::~LoggedRtcpPacket() = default;
-ParsedRtcEventLogNew::~ParsedRtcEventLogNew() = default;
+ParsedRtcEventLog::~ParsedRtcEventLog() = default;
-ParsedRtcEventLogNew::LoggedRtpStreamIncoming::LoggedRtpStreamIncoming() =
- default;
-ParsedRtcEventLogNew::LoggedRtpStreamIncoming::LoggedRtpStreamIncoming(
+ParsedRtcEventLog::LoggedRtpStreamIncoming::LoggedRtpStreamIncoming() = default;
+ParsedRtcEventLog::LoggedRtpStreamIncoming::LoggedRtpStreamIncoming(
const LoggedRtpStreamIncoming& rhs) = default;
-ParsedRtcEventLogNew::LoggedRtpStreamIncoming::~LoggedRtpStreamIncoming() =
+ParsedRtcEventLog::LoggedRtpStreamIncoming::~LoggedRtpStreamIncoming() =
default;
-ParsedRtcEventLogNew::LoggedRtpStreamOutgoing::LoggedRtpStreamOutgoing() =
- default;
-ParsedRtcEventLogNew::LoggedRtpStreamOutgoing::LoggedRtpStreamOutgoing(
+ParsedRtcEventLog::LoggedRtpStreamOutgoing::LoggedRtpStreamOutgoing() = default;
+ParsedRtcEventLog::LoggedRtpStreamOutgoing::LoggedRtpStreamOutgoing(
const LoggedRtpStreamOutgoing& rhs) = default;
-ParsedRtcEventLogNew::LoggedRtpStreamOutgoing::~LoggedRtpStreamOutgoing() =
+ParsedRtcEventLog::LoggedRtpStreamOutgoing::~LoggedRtpStreamOutgoing() =
default;
-ParsedRtcEventLogNew::LoggedRtpStreamView::LoggedRtpStreamView(
+ParsedRtcEventLog::LoggedRtpStreamView::LoggedRtpStreamView(
uint32_t ssrc,
const LoggedRtpPacketIncoming* ptr,
size_t num_elements)
@@ -814,7 +812,7 @@
num_elements,
offsetof(LoggedRtpPacketIncoming, rtp))) {}
-ParsedRtcEventLogNew::LoggedRtpStreamView::LoggedRtpStreamView(
+ParsedRtcEventLog::LoggedRtpStreamView::LoggedRtpStreamView(
uint32_t ssrc,
const LoggedRtpPacketOutgoing* ptr,
size_t num_elements)
@@ -824,7 +822,7 @@
num_elements,
offsetof(LoggedRtpPacketOutgoing, rtp))) {}
-ParsedRtcEventLogNew::LoggedRtpStreamView::LoggedRtpStreamView(
+ParsedRtcEventLog::LoggedRtpStreamView::LoggedRtpStreamView(
const LoggedRtpStreamView&) = default;
// Return default values for header extensions, to use on streams without stored
@@ -833,7 +831,7 @@
// TODO(ivoc): Remove this once this mapping is stored in the event log for
// audio streams. Tracking bug: webrtc:6399
webrtc::RtpHeaderExtensionMap
-ParsedRtcEventLogNew::GetDefaultHeaderExtensionMap() {
+ParsedRtcEventLog::GetDefaultHeaderExtensionMap() {
webrtc::RtpHeaderExtensionMap default_map;
default_map.Register<AudioLevel>(webrtc::RtpExtension::kAudioLevelDefaultId);
default_map.Register<TransmissionOffset>(
@@ -853,14 +851,14 @@
return default_map;
}
-ParsedRtcEventLogNew::ParsedRtcEventLogNew(
+ParsedRtcEventLog::ParsedRtcEventLog(
UnconfiguredHeaderExtensions parse_unconfigured_header_extensions)
: parse_unconfigured_header_extensions_(
parse_unconfigured_header_extensions) {
Clear();
}
-void ParsedRtcEventLogNew::Clear() {
+void ParsedRtcEventLog::Clear() {
default_extension_map_ = GetDefaultHeaderExtensionMap();
incoming_rtx_ssrcs_.clear();
@@ -920,7 +918,7 @@
outgoing_rtp_extensions_maps_.clear();
}
-bool ParsedRtcEventLogNew::ParseFile(const std::string& filename) {
+bool ParsedRtcEventLog::ParseFile(const std::string& filename) {
std::ifstream file( // no-presubmit-check TODO(webrtc:8982)
filename, std::ios_base::in | std::ios_base::binary);
if (!file.good() || !file.is_open()) {
@@ -931,13 +929,13 @@
return ParseStream(file);
}
-bool ParsedRtcEventLogNew::ParseString(const std::string& s) {
+bool ParsedRtcEventLog::ParseString(const std::string& s) {
std::istringstream stream( // no-presubmit-check TODO(webrtc:8982)
s, std::ios_base::in | std::ios_base::binary);
return ParseStream(stream);
}
-bool ParsedRtcEventLogNew::ParseStream(
+bool ParsedRtcEventLog::ParseStream(
std::istream& stream) { // no-presubmit-check TODO(webrtc:8982)
Clear();
bool success = ParseStreamInternal(stream);
@@ -1045,7 +1043,7 @@
return success;
}
-bool ParsedRtcEventLogNew::ParseStreamInternal(
+bool ParsedRtcEventLog::ParseStreamInternal(
std::istream& stream) { // no-presubmit-check TODO(webrtc:8982)
constexpr uint64_t kMaxEventSize = 10000000; // Sanity check.
std::vector<char> buffer(0xFFFF);
@@ -1128,14 +1126,14 @@
}
template <typename T>
-void ParsedRtcEventLogNew::StoreFirstAndLastTimestamp(const std::vector<T>& v) {
+void ParsedRtcEventLog::StoreFirstAndLastTimestamp(const std::vector<T>& v) {
if (v.empty())
return;
first_timestamp_ = std::min(first_timestamp_, v.front().log_time_us());
last_timestamp_ = std::max(last_timestamp_, v.back().log_time_us());
}
-void ParsedRtcEventLogNew::StoreParsedLegacyEvent(const rtclog::Event& event) {
+void ParsedRtcEventLog::StoreParsedLegacyEvent(const rtclog::Event& event) {
RTC_CHECK(event.has_type());
switch (event.type()) {
case rtclog::Event::VIDEO_RECEIVER_CONFIG_EVENT: {
@@ -1308,14 +1306,13 @@
}
}
-
-int64_t ParsedRtcEventLogNew::GetTimestamp(const rtclog::Event& event) const {
+int64_t ParsedRtcEventLog::GetTimestamp(const rtclog::Event& event) const {
RTC_CHECK(event.has_timestamp_us());
return event.timestamp_us();
}
// The header must have space for at least IP_PACKET_SIZE bytes.
-const webrtc::RtpHeaderExtensionMap* ParsedRtcEventLogNew::GetRtpHeader(
+const webrtc::RtpHeaderExtensionMap* ParsedRtcEventLog::GetRtpHeader(
const rtclog::Event& event,
PacketDirection* incoming,
uint8_t* header,
@@ -1376,10 +1373,10 @@
}
// The packet must have space for at least IP_PACKET_SIZE bytes.
-void ParsedRtcEventLogNew::GetRtcpPacket(const rtclog::Event& event,
- PacketDirection* incoming,
- uint8_t* packet,
- size_t* length) const {
+void ParsedRtcEventLog::GetRtcpPacket(const rtclog::Event& event,
+ PacketDirection* incoming,
+ uint8_t* packet,
+ size_t* length) const {
RTC_CHECK(event.has_type());
RTC_CHECK_EQ(event.type(), rtclog::Event::RTCP_EVENT);
RTC_CHECK(event.has_rtcp_packet());
@@ -1403,7 +1400,7 @@
}
}
-rtclog::StreamConfig ParsedRtcEventLogNew::GetVideoReceiveConfig(
+rtclog::StreamConfig ParsedRtcEventLog::GetVideoReceiveConfig(
const rtclog::Event& event) const {
rtclog::StreamConfig config;
RTC_CHECK(event.has_type());
@@ -1464,7 +1461,7 @@
return config;
}
-rtclog::StreamConfig ParsedRtcEventLogNew::GetVideoSendConfig(
+rtclog::StreamConfig ParsedRtcEventLog::GetVideoSendConfig(
const rtclog::Event& event) const {
rtclog::StreamConfig config;
RTC_CHECK(event.has_type());
@@ -1500,7 +1497,7 @@
return config;
}
-rtclog::StreamConfig ParsedRtcEventLogNew::GetAudioReceiveConfig(
+rtclog::StreamConfig ParsedRtcEventLog::GetAudioReceiveConfig(
const rtclog::Event& event) const {
rtclog::StreamConfig config;
RTC_CHECK(event.has_type());
@@ -1519,7 +1516,7 @@
return config;
}
-rtclog::StreamConfig ParsedRtcEventLogNew::GetAudioSendConfig(
+rtclog::StreamConfig ParsedRtcEventLog::GetAudioSendConfig(
const rtclog::Event& event) const {
rtclog::StreamConfig config;
RTC_CHECK(event.has_type());
@@ -1535,7 +1532,7 @@
return config;
}
-LoggedAudioPlayoutEvent ParsedRtcEventLogNew::GetAudioPlayout(
+LoggedAudioPlayoutEvent ParsedRtcEventLog::GetAudioPlayout(
const rtclog::Event& event) const {
RTC_CHECK(event.has_type());
RTC_CHECK_EQ(event.type(), rtclog::Event::AUDIO_PLAYOUT_EVENT);
@@ -1548,7 +1545,7 @@
return res;
}
-LoggedBweLossBasedUpdate ParsedRtcEventLogNew::GetLossBasedBweUpdate(
+LoggedBweLossBasedUpdate ParsedRtcEventLog::GetLossBasedBweUpdate(
const rtclog::Event& event) const {
RTC_CHECK(event.has_type());
RTC_CHECK_EQ(event.type(), rtclog::Event::LOSS_BASED_BWE_UPDATE);
@@ -1566,7 +1563,7 @@
return bwe_update;
}
-LoggedBweDelayBasedUpdate ParsedRtcEventLogNew::GetDelayBasedBweUpdate(
+LoggedBweDelayBasedUpdate ParsedRtcEventLog::GetDelayBasedBweUpdate(
const rtclog::Event& event) const {
RTC_CHECK(event.has_type());
RTC_CHECK_EQ(event.type(), rtclog::Event::DELAY_BASED_BWE_UPDATE);
@@ -1583,8 +1580,7 @@
return res;
}
-LoggedAudioNetworkAdaptationEvent
-ParsedRtcEventLogNew::GetAudioNetworkAdaptation(
+LoggedAudioNetworkAdaptationEvent ParsedRtcEventLog::GetAudioNetworkAdaptation(
const rtclog::Event& event) const {
RTC_CHECK(event.has_type());
RTC_CHECK_EQ(event.type(), rtclog::Event::AUDIO_NETWORK_ADAPTATION_EVENT);
@@ -1610,8 +1606,7 @@
return res;
}
-LoggedBweProbeClusterCreatedEvent
-ParsedRtcEventLogNew::GetBweProbeClusterCreated(
+LoggedBweProbeClusterCreatedEvent ParsedRtcEventLog::GetBweProbeClusterCreated(
const rtclog::Event& event) const {
RTC_CHECK(event.has_type());
RTC_CHECK_EQ(event.type(), rtclog::Event::BWE_PROBE_CLUSTER_CREATED_EVENT);
@@ -1630,7 +1625,7 @@
return res;
}
-LoggedBweProbeFailureEvent ParsedRtcEventLogNew::GetBweProbeFailure(
+LoggedBweProbeFailureEvent ParsedRtcEventLog::GetBweProbeFailure(
const rtclog::Event& event) const {
RTC_CHECK(event.has_type());
RTC_CHECK_EQ(event.type(), rtclog::Event::BWE_PROBE_RESULT_EVENT);
@@ -1660,7 +1655,7 @@
return res;
}
-LoggedBweProbeSuccessEvent ParsedRtcEventLogNew::GetBweProbeSuccess(
+LoggedBweProbeSuccessEvent ParsedRtcEventLog::GetBweProbeSuccess(
const rtclog::Event& event) const {
RTC_CHECK(event.has_type());
RTC_CHECK_EQ(event.type(), rtclog::Event::BWE_PROBE_RESULT_EVENT);
@@ -1679,7 +1674,7 @@
return res;
}
-LoggedAlrStateEvent ParsedRtcEventLogNew::GetAlrState(
+LoggedAlrStateEvent ParsedRtcEventLog::GetAlrState(
const rtclog::Event& event) const {
RTC_CHECK(event.has_type());
RTC_CHECK_EQ(event.type(), rtclog::Event::ALR_STATE_EVENT);
@@ -1693,7 +1688,7 @@
return res;
}
-LoggedIceCandidatePairConfig ParsedRtcEventLogNew::GetIceCandidatePairConfig(
+LoggedIceCandidatePairConfig ParsedRtcEventLog::GetIceCandidatePairConfig(
const rtclog::Event& rtc_event) const {
RTC_CHECK(rtc_event.has_type());
RTC_CHECK_EQ(rtc_event.type(), rtclog::Event::ICE_CANDIDATE_PAIR_CONFIG);
@@ -1729,7 +1724,7 @@
return res;
}
-LoggedIceCandidatePairEvent ParsedRtcEventLogNew::GetIceCandidatePairEvent(
+LoggedIceCandidatePairEvent ParsedRtcEventLog::GetIceCandidatePairEvent(
const rtclog::Event& rtc_event) const {
RTC_CHECK(rtc_event.has_type());
RTC_CHECK_EQ(rtc_event.type(), rtclog::Event::ICE_CANDIDATE_PAIR_EVENT);
@@ -1748,7 +1743,7 @@
// Returns the MediaType for registered SSRCs. Search from the end to use last
// registered types first.
-ParsedRtcEventLogNew::MediaType ParsedRtcEventLogNew::GetMediaType(
+ParsedRtcEventLog::MediaType ParsedRtcEventLog::GetMediaType(
uint32_t ssrc,
PacketDirection direction) const {
if (direction == kIncomingPacket) {
@@ -1774,7 +1769,7 @@
}
const std::vector<MatchedSendArrivalTimes> GetNetworkTrace(
- const ParsedRtcEventLogNew& parsed_log) {
+ const ParsedRtcEventLog& parsed_log) {
using RtpPacketType = LoggedRtpPacketOutgoing;
using TransportFeedbackType = LoggedRtcpPacketTransportFeedback;
@@ -1856,7 +1851,7 @@
}
// Helper functions for new format start here
-void ParsedRtcEventLogNew::StoreParsedNewFormatEvent(
+void ParsedRtcEventLog::StoreParsedNewFormatEvent(
const rtclog2::EventStream& stream) {
RTC_DCHECK_EQ(stream.stream_size(), 0);
@@ -1929,7 +1924,7 @@
}
}
-void ParsedRtcEventLogNew::StoreAlrStateEvent(const rtclog2::AlrState& proto) {
+void ParsedRtcEventLog::StoreAlrStateEvent(const rtclog2::AlrState& proto) {
RTC_CHECK(proto.has_timestamp_ms());
RTC_CHECK(proto.has_in_alr());
LoggedAlrStateEvent alr_event;
@@ -1940,7 +1935,7 @@
// TODO(terelius): Should we delta encode this event type?
}
-void ParsedRtcEventLogNew::StoreAudioPlayoutEvent(
+void ParsedRtcEventLog::StoreAudioPlayoutEvent(
const rtclog2::AudioPlayoutEvents& proto) {
RTC_CHECK(proto.has_timestamp_ms());
RTC_CHECK(proto.has_local_ssrc());
@@ -1984,28 +1979,27 @@
}
}
-void ParsedRtcEventLogNew::StoreIncomingRtpPackets(
+void ParsedRtcEventLog::StoreIncomingRtpPackets(
const rtclog2::IncomingRtpPackets& proto) {
StoreRtpPackets(proto, &incoming_rtp_packets_map_);
}
-void ParsedRtcEventLogNew::StoreOutgoingRtpPackets(
+void ParsedRtcEventLog::StoreOutgoingRtpPackets(
const rtclog2::OutgoingRtpPackets& proto) {
StoreRtpPackets(proto, &outgoing_rtp_packets_map_);
}
-void ParsedRtcEventLogNew::StoreIncomingRtcpPackets(
+void ParsedRtcEventLog::StoreIncomingRtcpPackets(
const rtclog2::IncomingRtcpPackets& proto) {
StoreRtcpPackets(proto, &incoming_rtcp_packets_);
}
-void ParsedRtcEventLogNew::StoreOutgoingRtcpPackets(
+void ParsedRtcEventLog::StoreOutgoingRtcpPackets(
const rtclog2::OutgoingRtcpPackets& proto) {
StoreRtcpPackets(proto, &outgoing_rtcp_packets_);
}
-void ParsedRtcEventLogNew::StoreStartEvent(
- const rtclog2::BeginLogEvent& proto) {
+void ParsedRtcEventLog::StoreStartEvent(const rtclog2::BeginLogEvent& proto) {
RTC_CHECK(proto.has_timestamp_ms());
RTC_CHECK(proto.has_version());
RTC_CHECK(proto.has_utc_time_ms());
@@ -2016,14 +2010,14 @@
start_log_events_.push_back(start_event);
}
-void ParsedRtcEventLogNew::StoreStopEvent(const rtclog2::EndLogEvent& proto) {
+void ParsedRtcEventLog::StoreStopEvent(const rtclog2::EndLogEvent& proto) {
RTC_CHECK(proto.has_timestamp_ms());
LoggedStopEvent stop_event(proto.timestamp_ms() * 1000);
stop_log_events_.push_back(stop_event);
}
-void ParsedRtcEventLogNew::StoreBweLossBasedUpdate(
+void ParsedRtcEventLog::StoreBweLossBasedUpdate(
const rtclog2::LossBasedBweUpdates& proto) {
RTC_CHECK(proto.has_timestamp_ms());
RTC_CHECK(proto.has_bitrate_bps());
@@ -2091,7 +2085,7 @@
}
}
-void ParsedRtcEventLogNew::StoreBweDelayBasedUpdate(
+void ParsedRtcEventLog::StoreBweDelayBasedUpdate(
const rtclog2::DelayBasedBweUpdates& proto) {
RTC_CHECK(proto.has_timestamp_ms());
RTC_CHECK(proto.has_bitrate_bps());
@@ -2148,7 +2142,7 @@
}
}
-void ParsedRtcEventLogNew::StoreBweProbeClusterCreated(
+void ParsedRtcEventLog::StoreBweProbeClusterCreated(
const rtclog2::BweProbeCluster& proto) {
LoggedBweProbeClusterCreatedEvent probe_cluster;
RTC_CHECK(proto.has_timestamp_ms());
@@ -2167,7 +2161,7 @@
// TODO(terelius): Should we delta encode this event type?
}
-void ParsedRtcEventLogNew::StoreBweProbeSuccessEvent(
+void ParsedRtcEventLog::StoreBweProbeSuccessEvent(
const rtclog2::BweProbeResultSuccess& proto) {
LoggedBweProbeSuccessEvent probe_result;
RTC_CHECK(proto.has_timestamp_ms());
@@ -2182,7 +2176,7 @@
// TODO(terelius): Should we delta encode this event type?
}
-void ParsedRtcEventLogNew::StoreBweProbeFailureEvent(
+void ParsedRtcEventLog::StoreBweProbeFailureEvent(
const rtclog2::BweProbeResultFailure& proto) {
LoggedBweProbeFailureEvent probe_result;
RTC_CHECK(proto.has_timestamp_ms());
@@ -2197,7 +2191,7 @@
// TODO(terelius): Should we delta encode this event type?
}
-void ParsedRtcEventLogNew::StoreAudioNetworkAdaptationEvent(
+void ParsedRtcEventLog::StoreAudioNetworkAdaptationEvent(
const rtclog2::AudioNetworkAdaptations& proto) {
RTC_CHECK(proto.has_timestamp_ms());
@@ -2350,7 +2344,7 @@
}
}
-void ParsedRtcEventLogNew::StoreDtlsTransportState(
+void ParsedRtcEventLog::StoreDtlsTransportState(
const rtclog2::DtlsTransportStateEvent& proto) {
LoggedDtlsTransportState dtls_state;
RTC_CHECK(proto.has_timestamp_ms());
@@ -2363,7 +2357,7 @@
dtls_transport_states_.push_back(dtls_state);
}
-void ParsedRtcEventLogNew::StoreDtlsWritableState(
+void ParsedRtcEventLog::StoreDtlsWritableState(
const rtclog2::DtlsWritableState& proto) {
LoggedDtlsWritableState dtls_writable_state;
RTC_CHECK(proto.has_timestamp_ms());
@@ -2374,7 +2368,7 @@
dtls_writable_states_.push_back(dtls_writable_state);
}
-void ParsedRtcEventLogNew::StoreIceCandidatePairConfig(
+void ParsedRtcEventLog::StoreIceCandidatePairConfig(
const rtclog2::IceCandidatePairConfig& proto) {
LoggedIceCandidatePairConfig ice_config;
RTC_CHECK(proto.has_timestamp_ms());
@@ -2411,7 +2405,7 @@
// TODO(terelius): Should we delta encode this event type?
}
-void ParsedRtcEventLogNew::StoreIceCandidateEvent(
+void ParsedRtcEventLog::StoreIceCandidateEvent(
const rtclog2::IceCandidatePairEvent& proto) {
LoggedIceCandidatePairEvent ice_event;
RTC_CHECK(proto.has_timestamp_ms());
@@ -2430,7 +2424,7 @@
// TODO(terelius): Should we delta encode this event type?
}
-void ParsedRtcEventLogNew::StoreVideoRecvConfig(
+void ParsedRtcEventLog::StoreVideoRecvConfig(
const rtclog2::VideoRecvStreamConfig& proto) {
LoggedVideoRecvConfig stream;
RTC_CHECK(proto.has_timestamp_ms());
@@ -2449,7 +2443,7 @@
video_recv_configs_.push_back(stream);
}
-void ParsedRtcEventLogNew::StoreVideoSendConfig(
+void ParsedRtcEventLog::StoreVideoSendConfig(
const rtclog2::VideoSendStreamConfig& proto) {
LoggedVideoSendConfig stream;
RTC_CHECK(proto.has_timestamp_ms());
@@ -2466,7 +2460,7 @@
video_send_configs_.push_back(stream);
}
-void ParsedRtcEventLogNew::StoreAudioRecvConfig(
+void ParsedRtcEventLog::StoreAudioRecvConfig(
const rtclog2::AudioRecvStreamConfig& proto) {
LoggedAudioRecvConfig stream;
RTC_CHECK(proto.has_timestamp_ms());
@@ -2482,7 +2476,7 @@
audio_recv_configs_.push_back(stream);
}
-void ParsedRtcEventLogNew::StoreAudioSendConfig(
+void ParsedRtcEventLog::StoreAudioSendConfig(
const rtclog2::AudioSendStreamConfig& proto) {
LoggedAudioSendConfig stream;
RTC_CHECK(proto.has_timestamp_ms());
diff --git a/logging/rtc_event_log/rtc_event_log_parser.h b/logging/rtc_event_log/rtc_event_log_parser.h
new file mode 100644
index 0000000..f7e896d
--- /dev/null
+++ b/logging/rtc_event_log/rtc_event_log_parser.h
@@ -0,0 +1,686 @@
+/*
+ * Copyright 2019 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+#ifndef LOGGING_RTC_EVENT_LOG_RTC_EVENT_LOG_PARSER_H_
+#define LOGGING_RTC_EVENT_LOG_RTC_EVENT_LOG_PARSER_H_
+
+#include <iterator>
+#include <map>
+#include <set>
+#include <sstream> // no-presubmit-check TODO(webrtc:8982)
+#include <string>
+#include <utility> // pair
+#include <vector>
+
+#include "call/video_receive_stream.h"
+#include "call/video_send_stream.h"
+#include "logging/rtc_event_log/logged_events.h"
+#include "logging/rtc_event_log/rtc_event_log.h"
+#include "modules/rtp_rtcp/include/rtp_header_extension_map.h"
+#include "modules/rtp_rtcp/source/rtcp_packet/common_header.h"
+#include "rtc_base/ignore_wundef.h"
+
+// Files generated at build-time by the protobuf compiler.
+RTC_PUSH_IGNORING_WUNDEF()
+#ifdef WEBRTC_ANDROID_PLATFORM_BUILD
+#include "external/webrtc/webrtc/logging/rtc_event_log/rtc_event_log.pb.h"
+#include "external/webrtc/webrtc/logging/rtc_event_log/rtc_event_log2.pb.h"
+#else
+#include "logging/rtc_event_log/rtc_event_log.pb.h"
+#include "logging/rtc_event_log/rtc_event_log2.pb.h"
+#endif
+RTC_POP_IGNORING_WUNDEF()
+
+namespace webrtc {
+
+template <typename T>
+class PacketView;
+
+template <typename T>
+class PacketIterator {
+ friend class PacketView<T>;
+
+ public:
+ // Standard iterator traits.
+ using difference_type = std::ptrdiff_t;
+ using value_type = T;
+ using pointer = T*;
+ using reference = T&;
+ using iterator_category = std::bidirectional_iterator_tag;
+
+ // The default-contructed iterator is meaningless, but is required by the
+ // ForwardIterator concept.
+ PacketIterator() : ptr_(nullptr), element_size_(0) {}
+ PacketIterator(const PacketIterator& other)
+ : ptr_(other.ptr_), element_size_(other.element_size_) {}
+ PacketIterator(const PacketIterator&& other)
+ : ptr_(other.ptr_), element_size_(other.element_size_) {}
+ ~PacketIterator() = default;
+
+ PacketIterator& operator=(const PacketIterator& other) {
+ ptr_ = other.ptr_;
+ element_size_ = other.element_size_;
+ return *this;
+ }
+ PacketIterator& operator=(const PacketIterator&& other) {
+ ptr_ = other.ptr_;
+ element_size_ = other.element_size_;
+ return *this;
+ }
+
+ bool operator==(const PacketIterator<T>& other) const {
+ RTC_DCHECK_EQ(element_size_, other.element_size_);
+ return ptr_ == other.ptr_;
+ }
+ bool operator!=(const PacketIterator<T>& other) const {
+ RTC_DCHECK_EQ(element_size_, other.element_size_);
+ return ptr_ != other.ptr_;
+ }
+
+ PacketIterator& operator++() {
+ ptr_ += element_size_;
+ return *this;
+ }
+ PacketIterator& operator--() {
+ ptr_ -= element_size_;
+ return *this;
+ }
+ PacketIterator operator++(int) {
+ PacketIterator iter_copy(ptr_, element_size_);
+ ptr_ += element_size_;
+ return iter_copy;
+ }
+ PacketIterator operator--(int) {
+ PacketIterator iter_copy(ptr_, element_size_);
+ ptr_ -= element_size_;
+ return iter_copy;
+ }
+
+ T& operator*() { return *reinterpret_cast<T*>(ptr_); }
+ const T& operator*() const { return *reinterpret_cast<const T*>(ptr_); }
+
+ private:
+ PacketIterator(typename std::conditional<std::is_const<T>::value,
+ const void*,
+ void*>::type p,
+ size_t s)
+ : ptr_(reinterpret_cast<decltype(ptr_)>(p)), element_size_(s) {}
+
+ typename std::conditional<std::is_const<T>::value, const char*, char*>::type
+ ptr_;
+ size_t element_size_;
+};
+
+// Suppose that we have a struct S where we are only interested in a specific
+// member M. Given an array of S, PacketView can be used to treat the array
+// as an array of M, without exposing the type S to surrounding code and without
+// accessing the member through a virtual function. In this case, we want to
+// have a common view for incoming and outgoing RtpPackets, hence the PacketView
+// name.
+// Note that constructing a PacketView bypasses the typesystem, so the caller
+// has to take extra care when constructing these objects. The implementation
+// also requires that the containing struct is standard-layout (e.g. POD).
+//
+// Usage example:
+// struct A {...};
+// struct B { A a; ...};
+// struct C { A a; ...};
+// size_t len = 10;
+// B* array1 = new B[len];
+// C* array2 = new C[len];
+//
+// PacketView<A> view1 = PacketView<A>::Create<B>(array1, len, offsetof(B, a));
+// PacketView<A> view2 = PacketView<A>::Create<C>(array2, len, offsetof(C, a));
+//
+// The following code works with either view1 or view2.
+// void f(PacketView<A> view)
+// for (A& a : view) {
+// DoSomething(a);
+// }
+template <typename T>
+class PacketView {
+ public:
+ template <typename U>
+ static PacketView Create(U* ptr, size_t num_elements, size_t offset) {
+ static_assert(std::is_standard_layout<U>::value,
+ "PacketView can only be created for standard layout types.");
+ static_assert(std::is_standard_layout<T>::value,
+ "PacketView can only be created for standard layout types.");
+ return PacketView(ptr, num_elements, offset, sizeof(U));
+ }
+
+ using iterator = PacketIterator<T>;
+ using const_iterator = PacketIterator<const T>;
+ using reverse_iterator = std::reverse_iterator<iterator>;
+ using const_reverse_iterator = std::reverse_iterator<const_iterator>;
+
+ iterator begin() { return iterator(data_, element_size_); }
+ iterator end() {
+ auto end_ptr = data_ + num_elements_ * element_size_;
+ return iterator(end_ptr, element_size_);
+ }
+
+ const_iterator begin() const { return const_iterator(data_, element_size_); }
+ const_iterator end() const {
+ auto end_ptr = data_ + num_elements_ * element_size_;
+ return const_iterator(end_ptr, element_size_);
+ }
+
+ reverse_iterator rbegin() { return reverse_iterator(end()); }
+ reverse_iterator rend() { return reverse_iterator(begin()); }
+
+ const_reverse_iterator rbegin() const {
+ return const_reverse_iterator(end());
+ }
+ const_reverse_iterator rend() const {
+ return const_reverse_iterator(begin());
+ }
+
+ size_t size() const { return num_elements_; }
+
+ T& operator[](size_t i) {
+ auto elem_ptr = data_ + i * element_size_;
+ return *reinterpret_cast<T*>(elem_ptr);
+ }
+
+ const T& operator[](size_t i) const {
+ auto elem_ptr = data_ + i * element_size_;
+ return *reinterpret_cast<const T*>(elem_ptr);
+ }
+
+ private:
+ PacketView(typename std::conditional<std::is_const<T>::value,
+ const void*,
+ void*>::type data,
+ size_t num_elements,
+ size_t offset,
+ size_t element_size)
+ : data_(reinterpret_cast<decltype(data_)>(data) + offset),
+ num_elements_(num_elements),
+ element_size_(element_size) {}
+
+ typename std::conditional<std::is_const<T>::value, const char*, char*>::type
+ data_;
+ size_t num_elements_;
+ size_t element_size_;
+};
+
+class ParsedRtcEventLog {
+ friend class RtcEventLogTestHelper;
+
+ public:
+ enum class MediaType { ANY, AUDIO, VIDEO, DATA };
+ enum class UnconfiguredHeaderExtensions {
+ kDontParse,
+ kAttemptWebrtcDefaultConfig
+ };
+
+ struct LoggedRtpStreamIncoming {
+ LoggedRtpStreamIncoming();
+ LoggedRtpStreamIncoming(const LoggedRtpStreamIncoming&);
+ ~LoggedRtpStreamIncoming();
+ uint32_t ssrc;
+ std::vector<LoggedRtpPacketIncoming> incoming_packets;
+ };
+
+ struct LoggedRtpStreamOutgoing {
+ LoggedRtpStreamOutgoing();
+ LoggedRtpStreamOutgoing(const LoggedRtpStreamOutgoing&);
+ ~LoggedRtpStreamOutgoing();
+ uint32_t ssrc;
+ std::vector<LoggedRtpPacketOutgoing> outgoing_packets;
+ };
+
+ struct LoggedRtpStreamView {
+ LoggedRtpStreamView(uint32_t ssrc,
+ const LoggedRtpPacketIncoming* ptr,
+ size_t num_elements);
+ LoggedRtpStreamView(uint32_t ssrc,
+ const LoggedRtpPacketOutgoing* ptr,
+ size_t num_elements);
+ LoggedRtpStreamView(const LoggedRtpStreamView&);
+ uint32_t ssrc;
+ PacketView<const LoggedRtpPacket> packet_view;
+ };
+
+ static webrtc::RtpHeaderExtensionMap GetDefaultHeaderExtensionMap();
+
+ explicit ParsedRtcEventLog(
+ UnconfiguredHeaderExtensions parse_unconfigured_header_extensions =
+ UnconfiguredHeaderExtensions::kDontParse);
+
+ ~ParsedRtcEventLog();
+
+ // Clears previously parsed events and resets the ParsedRtcEventLogNew to an
+ // empty state.
+ void Clear();
+
+ // Reads an RtcEventLog file and returns true if parsing was successful.
+ bool ParseFile(const std::string& file_name);
+
+ // Reads an RtcEventLog from a string and returns true if successful.
+ bool ParseString(const std::string& s);
+
+ // Reads an RtcEventLog from an istream and returns true if successful.
+ bool ParseStream(
+ std::istream& stream); // no-presubmit-check TODO(webrtc:8982)
+
+ MediaType GetMediaType(uint32_t ssrc, PacketDirection direction) const;
+
+ // Configured SSRCs.
+ const std::set<uint32_t>& incoming_rtx_ssrcs() const {
+ return incoming_rtx_ssrcs_;
+ }
+
+ const std::set<uint32_t>& incoming_video_ssrcs() const {
+ return incoming_video_ssrcs_;
+ }
+
+ const std::set<uint32_t>& incoming_audio_ssrcs() const {
+ return incoming_audio_ssrcs_;
+ }
+
+ const std::set<uint32_t>& outgoing_rtx_ssrcs() const {
+ return outgoing_rtx_ssrcs_;
+ }
+
+ const std::set<uint32_t>& outgoing_video_ssrcs() const {
+ return outgoing_video_ssrcs_;
+ }
+
+ const std::set<uint32_t>& outgoing_audio_ssrcs() const {
+ return outgoing_audio_ssrcs_;
+ }
+
+ // Stream configurations.
+ const std::vector<LoggedAudioRecvConfig>& audio_recv_configs() const {
+ return audio_recv_configs_;
+ }
+
+ const std::vector<LoggedAudioSendConfig>& audio_send_configs() const {
+ return audio_send_configs_;
+ }
+
+ const std::vector<LoggedVideoRecvConfig>& video_recv_configs() const {
+ return video_recv_configs_;
+ }
+
+ const std::vector<LoggedVideoSendConfig>& video_send_configs() const {
+ return video_send_configs_;
+ }
+
+ // Beginning and end of log segments.
+ const std::vector<LoggedStartEvent>& start_log_events() const {
+ return start_log_events_;
+ }
+
+ const std::vector<LoggedStopEvent>& stop_log_events() const {
+ return stop_log_events_;
+ }
+
+ const std::vector<LoggedAlrStateEvent>& alr_state_events() const {
+ return alr_state_events_;
+ }
+
+ // Audio
+ const std::map<uint32_t, std::vector<LoggedAudioPlayoutEvent>>&
+ audio_playout_events() const {
+ return audio_playout_events_;
+ }
+
+ const std::vector<LoggedAudioNetworkAdaptationEvent>&
+ audio_network_adaptation_events() const {
+ return audio_network_adaptation_events_;
+ }
+
+ // Bandwidth estimation
+ const std::vector<LoggedBweProbeClusterCreatedEvent>&
+ bwe_probe_cluster_created_events() const {
+ return bwe_probe_cluster_created_events_;
+ }
+
+ const std::vector<LoggedBweProbeFailureEvent>& bwe_probe_failure_events()
+ const {
+ return bwe_probe_failure_events_;
+ }
+
+ const std::vector<LoggedBweProbeSuccessEvent>& bwe_probe_success_events()
+ const {
+ return bwe_probe_success_events_;
+ }
+
+ const std::vector<LoggedBweDelayBasedUpdate>& bwe_delay_updates() const {
+ return bwe_delay_updates_;
+ }
+
+ const std::vector<LoggedBweLossBasedUpdate>& bwe_loss_updates() const {
+ return bwe_loss_updates_;
+ }
+
+ // DTLS
+ const std::vector<LoggedDtlsTransportState>& dtls_transport_states() const {
+ return dtls_transport_states_;
+ }
+
+ const std::vector<LoggedDtlsWritableState>& dtls_writable_states() const {
+ return dtls_writable_states_;
+ }
+
+ // ICE events
+ const std::vector<LoggedIceCandidatePairConfig>& ice_candidate_pair_configs()
+ const {
+ return ice_candidate_pair_configs_;
+ }
+
+ const std::vector<LoggedIceCandidatePairEvent>& ice_candidate_pair_events()
+ const {
+ return ice_candidate_pair_events_;
+ }
+
+ // RTP
+ const std::vector<LoggedRtpStreamIncoming>& incoming_rtp_packets_by_ssrc()
+ const {
+ return incoming_rtp_packets_by_ssrc_;
+ }
+
+ const std::vector<LoggedRtpStreamOutgoing>& outgoing_rtp_packets_by_ssrc()
+ const {
+ return outgoing_rtp_packets_by_ssrc_;
+ }
+
+ const std::vector<LoggedRtpStreamView>& rtp_packets_by_ssrc(
+ PacketDirection direction) const {
+ if (direction == kIncomingPacket)
+ return incoming_rtp_packet_views_by_ssrc_;
+ else
+ return outgoing_rtp_packet_views_by_ssrc_;
+ }
+
+ // RTCP
+ const std::vector<LoggedRtcpPacketIncoming>& incoming_rtcp_packets() const {
+ return incoming_rtcp_packets_;
+ }
+
+ const std::vector<LoggedRtcpPacketOutgoing>& outgoing_rtcp_packets() const {
+ return outgoing_rtcp_packets_;
+ }
+
+ const std::vector<LoggedRtcpPacketReceiverReport>& receiver_reports(
+ PacketDirection direction) const {
+ if (direction == kIncomingPacket) {
+ return incoming_rr_;
+ } else {
+ return outgoing_rr_;
+ }
+ }
+
+ const std::vector<LoggedRtcpPacketSenderReport>& sender_reports(
+ PacketDirection direction) const {
+ if (direction == kIncomingPacket) {
+ return incoming_sr_;
+ } else {
+ return outgoing_sr_;
+ }
+ }
+
+ const std::vector<LoggedRtcpPacketNack>& nacks(
+ PacketDirection direction) const {
+ if (direction == kIncomingPacket) {
+ return incoming_nack_;
+ } else {
+ return outgoing_nack_;
+ }
+ }
+
+ const std::vector<LoggedRtcpPacketRemb>& rembs(
+ PacketDirection direction) const {
+ if (direction == kIncomingPacket) {
+ return incoming_remb_;
+ } else {
+ return outgoing_remb_;
+ }
+ }
+
+ const std::vector<LoggedRtcpPacketTransportFeedback>& transport_feedbacks(
+ PacketDirection direction) const {
+ if (direction == kIncomingPacket) {
+ return incoming_transport_feedback_;
+ } else {
+ return outgoing_transport_feedback_;
+ }
+ }
+
+ int64_t first_timestamp() const { return first_timestamp_; }
+ int64_t last_timestamp() const { return last_timestamp_; }
+
+ private:
+ bool ParseStreamInternal(
+ std::istream& stream); // no-presubmit-check TODO(webrtc:8982)
+
+ void StoreParsedLegacyEvent(const rtclog::Event& event);
+
+ template <typename T>
+ void StoreFirstAndLastTimestamp(const std::vector<T>& v);
+
+ // Reads the arrival timestamp (in microseconds) from a rtclog::Event.
+ int64_t GetTimestamp(const rtclog::Event& event) const;
+
+ // Reads the header, direction, header length and packet length from the RTP
+ // event at |index|, and stores the values in the corresponding output
+ // parameters. Each output parameter can be set to nullptr if that value
+ // isn't needed.
+ // NB: The header must have space for at least IP_PACKET_SIZE bytes.
+ // Returns: a pointer to a header extensions map acquired from parsing
+ // corresponding Audio/Video Sender/Receiver config events.
+ // Warning: if the same SSRC is reused by both video and audio streams during
+ // call, extensions maps may be incorrect (the last one would be returned).
+ const webrtc::RtpHeaderExtensionMap* GetRtpHeader(
+ const rtclog::Event& event,
+ PacketDirection* incoming,
+ uint8_t* header,
+ size_t* header_length,
+ size_t* total_length,
+ int* probe_cluster_id) const;
+
+ // Reads packet, direction and packet length from the RTCP event at |index|,
+ // and stores the values in the corresponding output parameters.
+ // Each output parameter can be set to nullptr if that value isn't needed.
+ // NB: The packet must have space for at least IP_PACKET_SIZE bytes.
+ void GetRtcpPacket(const rtclog::Event& event,
+ PacketDirection* incoming,
+ uint8_t* packet,
+ size_t* length) const;
+
+ rtclog::StreamConfig GetVideoReceiveConfig(const rtclog::Event& event) const;
+ rtclog::StreamConfig GetVideoSendConfig(const rtclog::Event& event) const;
+ rtclog::StreamConfig GetAudioReceiveConfig(const rtclog::Event& event) const;
+ rtclog::StreamConfig GetAudioSendConfig(const rtclog::Event& event) const;
+
+ LoggedAudioPlayoutEvent GetAudioPlayout(const rtclog::Event& event) const;
+
+ LoggedBweLossBasedUpdate GetLossBasedBweUpdate(
+ const rtclog::Event& event) const;
+ LoggedBweDelayBasedUpdate GetDelayBasedBweUpdate(
+ const rtclog::Event& event) const;
+
+ LoggedAudioNetworkAdaptationEvent GetAudioNetworkAdaptation(
+ const rtclog::Event& event) const;
+
+ LoggedBweProbeClusterCreatedEvent GetBweProbeClusterCreated(
+ const rtclog::Event& event) const;
+ LoggedBweProbeFailureEvent GetBweProbeFailure(
+ const rtclog::Event& event) const;
+ LoggedBweProbeSuccessEvent GetBweProbeSuccess(
+ const rtclog::Event& event) const;
+
+ LoggedAlrStateEvent GetAlrState(const rtclog::Event& event) const;
+
+ LoggedIceCandidatePairConfig GetIceCandidatePairConfig(
+ const rtclog::Event& event) const;
+ LoggedIceCandidatePairEvent GetIceCandidatePairEvent(
+ const rtclog::Event& event) const;
+
+ // Parsing functions for new format.
+ void StoreParsedNewFormatEvent(const rtclog2::EventStream& event);
+ void StoreIncomingRtpPackets(const rtclog2::IncomingRtpPackets& proto);
+ void StoreOutgoingRtpPackets(const rtclog2::OutgoingRtpPackets& proto);
+ void StoreIncomingRtcpPackets(const rtclog2::IncomingRtcpPackets& proto);
+ void StoreOutgoingRtcpPackets(const rtclog2::OutgoingRtcpPackets& proto);
+ void StoreStartEvent(const rtclog2::BeginLogEvent& proto);
+ void StoreStopEvent(const rtclog2::EndLogEvent& proto);
+ void StoreAlrStateEvent(const rtclog2::AlrState& proto);
+ void StoreAudioNetworkAdaptationEvent(
+ const rtclog2::AudioNetworkAdaptations& proto);
+ void StoreAudioPlayoutEvent(const rtclog2::AudioPlayoutEvents& proto);
+ void StoreBweLossBasedUpdate(const rtclog2::LossBasedBweUpdates& proto);
+ void StoreBweDelayBasedUpdate(const rtclog2::DelayBasedBweUpdates& proto);
+ void StoreBweProbeClusterCreated(const rtclog2::BweProbeCluster& proto);
+ void StoreBweProbeSuccessEvent(const rtclog2::BweProbeResultSuccess& proto);
+ void StoreBweProbeFailureEvent(const rtclog2::BweProbeResultFailure& proto);
+ void StoreDtlsTransportState(const rtclog2::DtlsTransportStateEvent& proto);
+ void StoreDtlsWritableState(const rtclog2::DtlsWritableState& proto);
+ void StoreIceCandidatePairConfig(
+ const rtclog2::IceCandidatePairConfig& proto);
+ void StoreIceCandidateEvent(const rtclog2::IceCandidatePairEvent& proto);
+ void StoreAudioRecvConfig(const rtclog2::AudioRecvStreamConfig& proto);
+ void StoreAudioSendConfig(const rtclog2::AudioSendStreamConfig& proto);
+ void StoreVideoRecvConfig(const rtclog2::VideoRecvStreamConfig& proto);
+ void StoreVideoSendConfig(const rtclog2::VideoSendStreamConfig& proto);
+ // End of new parsing functions.
+
+ struct Stream {
+ Stream(uint32_t ssrc,
+ MediaType media_type,
+ PacketDirection direction,
+ webrtc::RtpHeaderExtensionMap map)
+ : ssrc(ssrc),
+ media_type(media_type),
+ direction(direction),
+ rtp_extensions_map(map) {}
+ uint32_t ssrc;
+ MediaType media_type;
+ PacketDirection direction;
+ webrtc::RtpHeaderExtensionMap rtp_extensions_map;
+ };
+
+ const UnconfiguredHeaderExtensions parse_unconfigured_header_extensions_;
+
+ // Make a default extension map for streams without configuration information.
+ // TODO(ivoc): Once configuration of audio streams is stored in the event log,
+ // this can be removed. Tracking bug: webrtc:6399
+ RtpHeaderExtensionMap default_extension_map_;
+
+ // Tracks what each stream is configured for. Note that a single SSRC can be
+ // in several sets. For example, the SSRC used for sending video over RTX
+ // will appear in both video_ssrcs_ and rtx_ssrcs_. In the unlikely case that
+ // an SSRC is reconfigured to a different media type mid-call, it will also
+ // appear in multiple sets.
+ std::set<uint32_t> incoming_rtx_ssrcs_;
+ std::set<uint32_t> incoming_video_ssrcs_;
+ std::set<uint32_t> incoming_audio_ssrcs_;
+ std::set<uint32_t> outgoing_rtx_ssrcs_;
+ std::set<uint32_t> outgoing_video_ssrcs_;
+ std::set<uint32_t> outgoing_audio_ssrcs_;
+
+ // Maps an SSRC to the parsed RTP headers in that stream. Header extensions
+ // are parsed if the stream has been configured. This is only used for
+ // grouping the events by SSRC during parsing; the events are moved to
+ // incoming_rtp_packets_by_ssrc_ once the parsing is done.
+ std::map<uint32_t, std::vector<LoggedRtpPacketIncoming>>
+ incoming_rtp_packets_map_;
+ std::map<uint32_t, std::vector<LoggedRtpPacketOutgoing>>
+ outgoing_rtp_packets_map_;
+
+ // RTP headers.
+ std::vector<LoggedRtpStreamIncoming> incoming_rtp_packets_by_ssrc_;
+ std::vector<LoggedRtpStreamOutgoing> outgoing_rtp_packets_by_ssrc_;
+ std::vector<LoggedRtpStreamView> incoming_rtp_packet_views_by_ssrc_;
+ std::vector<LoggedRtpStreamView> outgoing_rtp_packet_views_by_ssrc_;
+
+ // Raw RTCP packets.
+ std::vector<LoggedRtcpPacketIncoming> incoming_rtcp_packets_;
+ std::vector<LoggedRtcpPacketOutgoing> outgoing_rtcp_packets_;
+
+ // Parsed RTCP messages. Currently not separated based on SSRC.
+ std::vector<LoggedRtcpPacketReceiverReport> incoming_rr_;
+ std::vector<LoggedRtcpPacketReceiverReport> outgoing_rr_;
+ std::vector<LoggedRtcpPacketSenderReport> incoming_sr_;
+ std::vector<LoggedRtcpPacketSenderReport> outgoing_sr_;
+ std::vector<LoggedRtcpPacketNack> incoming_nack_;
+ std::vector<LoggedRtcpPacketNack> outgoing_nack_;
+ std::vector<LoggedRtcpPacketRemb> incoming_remb_;
+ std::vector<LoggedRtcpPacketRemb> outgoing_remb_;
+ std::vector<LoggedRtcpPacketTransportFeedback> incoming_transport_feedback_;
+ std::vector<LoggedRtcpPacketTransportFeedback> outgoing_transport_feedback_;
+
+ std::vector<LoggedStartEvent> start_log_events_;
+ std::vector<LoggedStopEvent> stop_log_events_;
+
+ std::vector<LoggedAlrStateEvent> alr_state_events_;
+
+ std::map<uint32_t, std::vector<LoggedAudioPlayoutEvent>>
+ audio_playout_events_;
+
+ std::vector<LoggedAudioNetworkAdaptationEvent>
+ audio_network_adaptation_events_;
+
+ std::vector<LoggedBweProbeClusterCreatedEvent>
+ bwe_probe_cluster_created_events_;
+
+ std::vector<LoggedBweProbeFailureEvent> bwe_probe_failure_events_;
+ std::vector<LoggedBweProbeSuccessEvent> bwe_probe_success_events_;
+
+ std::vector<LoggedBweDelayBasedUpdate> bwe_delay_updates_;
+ std::vector<LoggedBweLossBasedUpdate> bwe_loss_updates_;
+
+ std::vector<LoggedDtlsTransportState> dtls_transport_states_;
+ std::vector<LoggedDtlsWritableState> dtls_writable_states_;
+
+ std::vector<LoggedIceCandidatePairConfig> ice_candidate_pair_configs_;
+ std::vector<LoggedIceCandidatePairEvent> ice_candidate_pair_events_;
+
+ std::vector<LoggedAudioRecvConfig> audio_recv_configs_;
+ std::vector<LoggedAudioSendConfig> audio_send_configs_;
+ std::vector<LoggedVideoRecvConfig> video_recv_configs_;
+ std::vector<LoggedVideoSendConfig> video_send_configs_;
+
+ uint8_t last_incoming_rtcp_packet_[IP_PACKET_SIZE];
+ uint8_t last_incoming_rtcp_packet_length_;
+
+ int64_t first_timestamp_;
+ int64_t last_timestamp_;
+
+ // 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
+ // fully transitioned to the new format.
+ mutable std::map<uint32_t, webrtc::RtpHeaderExtensionMap>
+ incoming_rtp_extensions_maps_;
+ mutable std::map<uint32_t, webrtc::RtpHeaderExtensionMap>
+ outgoing_rtp_extensions_maps_;
+};
+
+struct MatchedSendArrivalTimes {
+ MatchedSendArrivalTimes(int64_t fb, int64_t tx, int64_t rx, int64_t ps)
+ : feedback_arrival_time_ms(fb),
+ send_time_ms(tx),
+ arrival_time_ms(rx),
+ payload_size(ps) {}
+
+ int64_t feedback_arrival_time_ms;
+ int64_t send_time_ms; // PacketFeedback::kNoSendTime for late feedback.
+ int64_t arrival_time_ms; // PacketFeedback::kNotReceived for lost packets.
+ int64_t payload_size;
+};
+const std::vector<MatchedSendArrivalTimes> GetNetworkTrace(
+ const ParsedRtcEventLog& parsed_log);
+
+} // namespace webrtc
+
+#endif // LOGGING_RTC_EVENT_LOG_RTC_EVENT_LOG_PARSER_H_
diff --git a/logging/rtc_event_log/rtc_event_log_parser_new.h b/logging/rtc_event_log/rtc_event_log_parser_new.h
index 0ee70a5..158a1d8 100644
--- a/logging/rtc_event_log/rtc_event_log_parser_new.h
+++ b/logging/rtc_event_log/rtc_event_log_parser_new.h
@@ -9,678 +9,9 @@
*/
#ifndef LOGGING_RTC_EVENT_LOG_RTC_EVENT_LOG_PARSER_NEW_H_
#define LOGGING_RTC_EVENT_LOG_RTC_EVENT_LOG_PARSER_NEW_H_
-
-#include <iterator>
-#include <map>
-#include <set>
-#include <sstream> // no-presubmit-check TODO(webrtc:8982)
-#include <string>
-#include <utility> // pair
-#include <vector>
-
-#include "call/video_receive_stream.h"
-#include "call/video_send_stream.h"
-#include "logging/rtc_event_log/logged_events.h"
-#include "logging/rtc_event_log/rtc_event_log.h"
-#include "modules/rtp_rtcp/include/rtp_header_extension_map.h"
-#include "modules/rtp_rtcp/source/rtcp_packet/common_header.h"
-#include "rtc_base/ignore_wundef.h"
-
-// Files generated at build-time by the protobuf compiler.
-RTC_PUSH_IGNORING_WUNDEF()
-#ifdef WEBRTC_ANDROID_PLATFORM_BUILD
-#include "external/webrtc/webrtc/logging/rtc_event_log/rtc_event_log.pb.h"
-#include "external/webrtc/webrtc/logging/rtc_event_log/rtc_event_log2.pb.h"
-#else
-#include "logging/rtc_event_log/rtc_event_log.pb.h"
-#include "logging/rtc_event_log/rtc_event_log2.pb.h"
-#endif
-RTC_POP_IGNORING_WUNDEF()
-
+#include "logging/rtc_event_log/rtc_event_log_parser.h"
+#include "rtc_base/deprecation.h"
namespace webrtc {
-
-template <typename T>
-class PacketView;
-
-template <typename T>
-class PacketIterator {
- friend class PacketView<T>;
-
- public:
- // Standard iterator traits.
- using difference_type = std::ptrdiff_t;
- using value_type = T;
- using pointer = T*;
- using reference = T&;
- using iterator_category = std::bidirectional_iterator_tag;
-
- // The default-contructed iterator is meaningless, but is required by the
- // ForwardIterator concept.
- PacketIterator() : ptr_(nullptr), element_size_(0) {}
- PacketIterator(const PacketIterator& other)
- : ptr_(other.ptr_), element_size_(other.element_size_) {}
- PacketIterator(const PacketIterator&& other)
- : ptr_(other.ptr_), element_size_(other.element_size_) {}
- ~PacketIterator() = default;
-
- PacketIterator& operator=(const PacketIterator& other) {
- ptr_ = other.ptr_;
- element_size_ = other.element_size_;
- return *this;
- }
- PacketIterator& operator=(const PacketIterator&& other) {
- ptr_ = other.ptr_;
- element_size_ = other.element_size_;
- return *this;
- }
-
- bool operator==(const PacketIterator<T>& other) const {
- RTC_DCHECK_EQ(element_size_, other.element_size_);
- return ptr_ == other.ptr_;
- }
- bool operator!=(const PacketIterator<T>& other) const {
- RTC_DCHECK_EQ(element_size_, other.element_size_);
- return ptr_ != other.ptr_;
- }
-
- PacketIterator& operator++() {
- ptr_ += element_size_;
- return *this;
- }
- PacketIterator& operator--() {
- ptr_ -= element_size_;
- return *this;
- }
- PacketIterator operator++(int) {
- PacketIterator iter_copy(ptr_, element_size_);
- ptr_ += element_size_;
- return iter_copy;
- }
- PacketIterator operator--(int) {
- PacketIterator iter_copy(ptr_, element_size_);
- ptr_ -= element_size_;
- return iter_copy;
- }
-
- T& operator*() { return *reinterpret_cast<T*>(ptr_); }
- const T& operator*() const { return *reinterpret_cast<const T*>(ptr_); }
-
- private:
- PacketIterator(typename std::conditional<std::is_const<T>::value,
- const void*,
- void*>::type p,
- size_t s)
- : ptr_(reinterpret_cast<decltype(ptr_)>(p)), element_size_(s) {}
-
- typename std::conditional<std::is_const<T>::value, const char*, char*>::type
- ptr_;
- size_t element_size_;
-};
-
-// Suppose that we have a struct S where we are only interested in a specific
-// member M. Given an array of S, PacketView can be used to treat the array
-// as an array of M, without exposing the type S to surrounding code and without
-// accessing the member through a virtual function. In this case, we want to
-// have a common view for incoming and outgoing RtpPackets, hence the PacketView
-// name.
-// Note that constructing a PacketView bypasses the typesystem, so the caller
-// has to take extra care when constructing these objects. The implementation
-// also requires that the containing struct is standard-layout (e.g. POD).
-//
-// Usage example:
-// struct A {...};
-// struct B { A a; ...};
-// struct C { A a; ...};
-// size_t len = 10;
-// B* array1 = new B[len];
-// C* array2 = new C[len];
-//
-// PacketView<A> view1 = PacketView<A>::Create<B>(array1, len, offsetof(B, a));
-// PacketView<A> view2 = PacketView<A>::Create<C>(array2, len, offsetof(C, a));
-//
-// The following code works with either view1 or view2.
-// void f(PacketView<A> view)
-// for (A& a : view) {
-// DoSomething(a);
-// }
-template <typename T>
-class PacketView {
- public:
- template <typename U>
- static PacketView Create(U* ptr, size_t num_elements, size_t offset) {
- static_assert(std::is_standard_layout<U>::value,
- "PacketView can only be created for standard layout types.");
- static_assert(std::is_standard_layout<T>::value,
- "PacketView can only be created for standard layout types.");
- return PacketView(ptr, num_elements, offset, sizeof(U));
- }
-
- using iterator = PacketIterator<T>;
- using const_iterator = PacketIterator<const T>;
- using reverse_iterator = std::reverse_iterator<iterator>;
- using const_reverse_iterator = std::reverse_iterator<const_iterator>;
-
- iterator begin() { return iterator(data_, element_size_); }
- iterator end() {
- auto end_ptr = data_ + num_elements_ * element_size_;
- return iterator(end_ptr, element_size_);
- }
-
- const_iterator begin() const { return const_iterator(data_, element_size_); }
- const_iterator end() const {
- auto end_ptr = data_ + num_elements_ * element_size_;
- return const_iterator(end_ptr, element_size_);
- }
-
- reverse_iterator rbegin() { return reverse_iterator(end()); }
- reverse_iterator rend() { return reverse_iterator(begin()); }
-
- const_reverse_iterator rbegin() const {
- return const_reverse_iterator(end());
- }
- const_reverse_iterator rend() const {
- return const_reverse_iterator(begin());
- }
-
- size_t size() const { return num_elements_; }
-
- T& operator[](size_t i) {
- auto elem_ptr = data_ + i * element_size_;
- return *reinterpret_cast<T*>(elem_ptr);
- }
-
- const T& operator[](size_t i) const {
- auto elem_ptr = data_ + i * element_size_;
- return *reinterpret_cast<const T*>(elem_ptr);
- }
-
- private:
- PacketView(typename std::conditional<std::is_const<T>::value,
- const void*,
- void*>::type data,
- size_t num_elements,
- size_t offset,
- size_t element_size)
- : data_(reinterpret_cast<decltype(data_)>(data) + offset),
- num_elements_(num_elements),
- element_size_(element_size) {}
-
- typename std::conditional<std::is_const<T>::value, const char*, char*>::type
- data_;
- size_t num_elements_;
- size_t element_size_;
-};
-
-class ParsedRtcEventLogNew {
- friend class RtcEventLogTestHelper;
-
- public:
- enum class MediaType { ANY, AUDIO, VIDEO, DATA };
- enum class UnconfiguredHeaderExtensions {
- kDontParse,
- kAttemptWebrtcDefaultConfig
- };
-
- struct LoggedRtpStreamIncoming {
- LoggedRtpStreamIncoming();
- LoggedRtpStreamIncoming(const LoggedRtpStreamIncoming&);
- ~LoggedRtpStreamIncoming();
- uint32_t ssrc;
- std::vector<LoggedRtpPacketIncoming> incoming_packets;
- };
-
- struct LoggedRtpStreamOutgoing {
- LoggedRtpStreamOutgoing();
- LoggedRtpStreamOutgoing(const LoggedRtpStreamOutgoing&);
- ~LoggedRtpStreamOutgoing();
- uint32_t ssrc;
- std::vector<LoggedRtpPacketOutgoing> outgoing_packets;
- };
-
- struct LoggedRtpStreamView {
- LoggedRtpStreamView(uint32_t ssrc,
- const LoggedRtpPacketIncoming* ptr,
- size_t num_elements);
- LoggedRtpStreamView(uint32_t ssrc,
- const LoggedRtpPacketOutgoing* ptr,
- size_t num_elements);
- LoggedRtpStreamView(const LoggedRtpStreamView&);
- uint32_t ssrc;
- PacketView<const LoggedRtpPacket> packet_view;
- };
-
- static webrtc::RtpHeaderExtensionMap GetDefaultHeaderExtensionMap();
-
- explicit ParsedRtcEventLogNew(
- UnconfiguredHeaderExtensions parse_unconfigured_header_extensions =
- UnconfiguredHeaderExtensions::kDontParse);
-
- ~ParsedRtcEventLogNew();
-
- // Clears previously parsed events and resets the ParsedRtcEventLogNew to an
- // empty state.
- void Clear();
-
- // Reads an RtcEventLog file and returns true if parsing was successful.
- bool ParseFile(const std::string& file_name);
-
- // Reads an RtcEventLog from a string and returns true if successful.
- bool ParseString(const std::string& s);
-
- // Reads an RtcEventLog from an istream and returns true if successful.
- bool ParseStream(
- std::istream& stream); // no-presubmit-check TODO(webrtc:8982)
-
- MediaType GetMediaType(uint32_t ssrc, PacketDirection direction) const;
-
- // Configured SSRCs.
- const std::set<uint32_t>& incoming_rtx_ssrcs() const {
- return incoming_rtx_ssrcs_;
- }
-
- const std::set<uint32_t>& incoming_video_ssrcs() const {
- return incoming_video_ssrcs_;
- }
-
- const std::set<uint32_t>& incoming_audio_ssrcs() const {
- return incoming_audio_ssrcs_;
- }
-
- const std::set<uint32_t>& outgoing_rtx_ssrcs() const {
- return outgoing_rtx_ssrcs_;
- }
-
- const std::set<uint32_t>& outgoing_video_ssrcs() const {
- return outgoing_video_ssrcs_;
- }
-
- const std::set<uint32_t>& outgoing_audio_ssrcs() const {
- return outgoing_audio_ssrcs_;
- }
-
- // Stream configurations.
- const std::vector<LoggedAudioRecvConfig>& audio_recv_configs() const {
- return audio_recv_configs_;
- }
-
- const std::vector<LoggedAudioSendConfig>& audio_send_configs() const {
- return audio_send_configs_;
- }
-
- const std::vector<LoggedVideoRecvConfig>& video_recv_configs() const {
- return video_recv_configs_;
- }
-
- const std::vector<LoggedVideoSendConfig>& video_send_configs() const {
- return video_send_configs_;
- }
-
- // Beginning and end of log segments.
- const std::vector<LoggedStartEvent>& start_log_events() const {
- return start_log_events_;
- }
-
- const std::vector<LoggedStopEvent>& stop_log_events() const {
- return stop_log_events_;
- }
-
- const std::vector<LoggedAlrStateEvent>& alr_state_events() const {
- return alr_state_events_;
- }
-
- // Audio
- const std::map<uint32_t, std::vector<LoggedAudioPlayoutEvent>>&
- audio_playout_events() const {
- return audio_playout_events_;
- }
-
- const std::vector<LoggedAudioNetworkAdaptationEvent>&
- audio_network_adaptation_events() const {
- return audio_network_adaptation_events_;
- }
-
- // Bandwidth estimation
- const std::vector<LoggedBweProbeClusterCreatedEvent>&
- bwe_probe_cluster_created_events() const {
- return bwe_probe_cluster_created_events_;
- }
-
- const std::vector<LoggedBweProbeFailureEvent>& bwe_probe_failure_events()
- const {
- return bwe_probe_failure_events_;
- }
-
- const std::vector<LoggedBweProbeSuccessEvent>& bwe_probe_success_events()
- const {
- return bwe_probe_success_events_;
- }
-
- const std::vector<LoggedBweDelayBasedUpdate>& bwe_delay_updates() const {
- return bwe_delay_updates_;
- }
-
- const std::vector<LoggedBweLossBasedUpdate>& bwe_loss_updates() const {
- return bwe_loss_updates_;
- }
-
- // DTLS
- const std::vector<LoggedDtlsTransportState>& dtls_transport_states() const {
- return dtls_transport_states_;
- }
-
- const std::vector<LoggedDtlsWritableState>& dtls_writable_states() const {
- return dtls_writable_states_;
- }
-
- // ICE events
- const std::vector<LoggedIceCandidatePairConfig>& ice_candidate_pair_configs()
- const {
- return ice_candidate_pair_configs_;
- }
-
- const std::vector<LoggedIceCandidatePairEvent>& ice_candidate_pair_events()
- const {
- return ice_candidate_pair_events_;
- }
-
- // RTP
- const std::vector<LoggedRtpStreamIncoming>& incoming_rtp_packets_by_ssrc()
- const {
- return incoming_rtp_packets_by_ssrc_;
- }
-
- const std::vector<LoggedRtpStreamOutgoing>& outgoing_rtp_packets_by_ssrc()
- const {
- return outgoing_rtp_packets_by_ssrc_;
- }
-
- const std::vector<LoggedRtpStreamView>& rtp_packets_by_ssrc(
- PacketDirection direction) const {
- if (direction == kIncomingPacket)
- return incoming_rtp_packet_views_by_ssrc_;
- else
- return outgoing_rtp_packet_views_by_ssrc_;
- }
-
- // RTCP
- const std::vector<LoggedRtcpPacketIncoming>& incoming_rtcp_packets() const {
- return incoming_rtcp_packets_;
- }
-
- const std::vector<LoggedRtcpPacketOutgoing>& outgoing_rtcp_packets() const {
- return outgoing_rtcp_packets_;
- }
-
- const std::vector<LoggedRtcpPacketReceiverReport>& receiver_reports(
- PacketDirection direction) const {
- if (direction == kIncomingPacket) {
- return incoming_rr_;
- } else {
- return outgoing_rr_;
- }
- }
-
- const std::vector<LoggedRtcpPacketSenderReport>& sender_reports(
- PacketDirection direction) const {
- if (direction == kIncomingPacket) {
- return incoming_sr_;
- } else {
- return outgoing_sr_;
- }
- }
-
- const std::vector<LoggedRtcpPacketNack>& nacks(
- PacketDirection direction) const {
- if (direction == kIncomingPacket) {
- return incoming_nack_;
- } else {
- return outgoing_nack_;
- }
- }
-
- const std::vector<LoggedRtcpPacketRemb>& rembs(
- PacketDirection direction) const {
- if (direction == kIncomingPacket) {
- return incoming_remb_;
- } else {
- return outgoing_remb_;
- }
- }
-
- const std::vector<LoggedRtcpPacketTransportFeedback>& transport_feedbacks(
- PacketDirection direction) const {
- if (direction == kIncomingPacket) {
- return incoming_transport_feedback_;
- } else {
- return outgoing_transport_feedback_;
- }
- }
-
- int64_t first_timestamp() const { return first_timestamp_; }
- int64_t last_timestamp() const { return last_timestamp_; }
-
- private:
- bool ParseStreamInternal(
- std::istream& stream); // no-presubmit-check TODO(webrtc:8982)
-
- void StoreParsedLegacyEvent(const rtclog::Event& event);
-
- template <typename T>
- void StoreFirstAndLastTimestamp(const std::vector<T>& v);
-
- // Reads the arrival timestamp (in microseconds) from a rtclog::Event.
- int64_t GetTimestamp(const rtclog::Event& event) const;
-
- // Reads the header, direction, header length and packet length from the RTP
- // event at |index|, and stores the values in the corresponding output
- // parameters. Each output parameter can be set to nullptr if that value
- // isn't needed.
- // NB: The header must have space for at least IP_PACKET_SIZE bytes.
- // Returns: a pointer to a header extensions map acquired from parsing
- // corresponding Audio/Video Sender/Receiver config events.
- // Warning: if the same SSRC is reused by both video and audio streams during
- // call, extensions maps may be incorrect (the last one would be returned).
- const webrtc::RtpHeaderExtensionMap* GetRtpHeader(
- const rtclog::Event& event,
- PacketDirection* incoming,
- uint8_t* header,
- size_t* header_length,
- size_t* total_length,
- int* probe_cluster_id) const;
-
- // Reads packet, direction and packet length from the RTCP event at |index|,
- // and stores the values in the corresponding output parameters.
- // Each output parameter can be set to nullptr if that value isn't needed.
- // NB: The packet must have space for at least IP_PACKET_SIZE bytes.
- void GetRtcpPacket(const rtclog::Event& event,
- PacketDirection* incoming,
- uint8_t* packet,
- size_t* length) const;
-
- rtclog::StreamConfig GetVideoReceiveConfig(const rtclog::Event& event) const;
- rtclog::StreamConfig GetVideoSendConfig(const rtclog::Event& event) const;
- rtclog::StreamConfig GetAudioReceiveConfig(const rtclog::Event& event) const;
- rtclog::StreamConfig GetAudioSendConfig(const rtclog::Event& event) const;
-
- LoggedAudioPlayoutEvent GetAudioPlayout(const rtclog::Event& event) const;
-
- LoggedBweLossBasedUpdate GetLossBasedBweUpdate(
- const rtclog::Event& event) const;
- LoggedBweDelayBasedUpdate GetDelayBasedBweUpdate(
- const rtclog::Event& event) const;
-
- LoggedAudioNetworkAdaptationEvent GetAudioNetworkAdaptation(
- const rtclog::Event& event) const;
-
- LoggedBweProbeClusterCreatedEvent GetBweProbeClusterCreated(
- const rtclog::Event& event) const;
- LoggedBweProbeFailureEvent GetBweProbeFailure(
- const rtclog::Event& event) const;
- LoggedBweProbeSuccessEvent GetBweProbeSuccess(
- const rtclog::Event& event) const;
-
- LoggedAlrStateEvent GetAlrState(const rtclog::Event& event) const;
-
- LoggedIceCandidatePairConfig GetIceCandidatePairConfig(
- const rtclog::Event& event) const;
- LoggedIceCandidatePairEvent GetIceCandidatePairEvent(
- const rtclog::Event& event) const;
-
- // Parsing functions for new format.
- void StoreParsedNewFormatEvent(const rtclog2::EventStream& event);
- void StoreIncomingRtpPackets(const rtclog2::IncomingRtpPackets& proto);
- void StoreOutgoingRtpPackets(const rtclog2::OutgoingRtpPackets& proto);
- void StoreIncomingRtcpPackets(const rtclog2::IncomingRtcpPackets& proto);
- void StoreOutgoingRtcpPackets(const rtclog2::OutgoingRtcpPackets& proto);
- void StoreStartEvent(const rtclog2::BeginLogEvent& proto);
- void StoreStopEvent(const rtclog2::EndLogEvent& proto);
- void StoreAlrStateEvent(const rtclog2::AlrState& proto);
- void StoreAudioNetworkAdaptationEvent(
- const rtclog2::AudioNetworkAdaptations& proto);
- void StoreAudioPlayoutEvent(const rtclog2::AudioPlayoutEvents& proto);
- void StoreBweLossBasedUpdate(const rtclog2::LossBasedBweUpdates& proto);
- void StoreBweDelayBasedUpdate(const rtclog2::DelayBasedBweUpdates& proto);
- void StoreBweProbeClusterCreated(const rtclog2::BweProbeCluster& proto);
- void StoreBweProbeSuccessEvent(const rtclog2::BweProbeResultSuccess& proto);
- void StoreBweProbeFailureEvent(const rtclog2::BweProbeResultFailure& proto);
- void StoreDtlsTransportState(const rtclog2::DtlsTransportStateEvent& proto);
- void StoreDtlsWritableState(const rtclog2::DtlsWritableState& proto);
- void StoreIceCandidatePairConfig(
- const rtclog2::IceCandidatePairConfig& proto);
- void StoreIceCandidateEvent(const rtclog2::IceCandidatePairEvent& proto);
- void StoreAudioRecvConfig(const rtclog2::AudioRecvStreamConfig& proto);
- void StoreAudioSendConfig(const rtclog2::AudioSendStreamConfig& proto);
- void StoreVideoRecvConfig(const rtclog2::VideoRecvStreamConfig& proto);
- void StoreVideoSendConfig(const rtclog2::VideoSendStreamConfig& proto);
- // End of new parsing functions.
-
- struct Stream {
- Stream(uint32_t ssrc,
- MediaType media_type,
- PacketDirection direction,
- webrtc::RtpHeaderExtensionMap map)
- : ssrc(ssrc),
- media_type(media_type),
- direction(direction),
- rtp_extensions_map(map) {}
- uint32_t ssrc;
- MediaType media_type;
- PacketDirection direction;
- webrtc::RtpHeaderExtensionMap rtp_extensions_map;
- };
-
- const UnconfiguredHeaderExtensions parse_unconfigured_header_extensions_;
-
- // Make a default extension map for streams without configuration information.
- // TODO(ivoc): Once configuration of audio streams is stored in the event log,
- // this can be removed. Tracking bug: webrtc:6399
- RtpHeaderExtensionMap default_extension_map_;
-
- // Tracks what each stream is configured for. Note that a single SSRC can be
- // in several sets. For example, the SSRC used for sending video over RTX
- // will appear in both video_ssrcs_ and rtx_ssrcs_. In the unlikely case that
- // an SSRC is reconfigured to a different media type mid-call, it will also
- // appear in multiple sets.
- std::set<uint32_t> incoming_rtx_ssrcs_;
- std::set<uint32_t> incoming_video_ssrcs_;
- std::set<uint32_t> incoming_audio_ssrcs_;
- std::set<uint32_t> outgoing_rtx_ssrcs_;
- std::set<uint32_t> outgoing_video_ssrcs_;
- std::set<uint32_t> outgoing_audio_ssrcs_;
-
- // Maps an SSRC to the parsed RTP headers in that stream. Header extensions
- // are parsed if the stream has been configured. This is only used for
- // grouping the events by SSRC during parsing; the events are moved to
- // incoming_rtp_packets_by_ssrc_ once the parsing is done.
- std::map<uint32_t, std::vector<LoggedRtpPacketIncoming>>
- incoming_rtp_packets_map_;
- std::map<uint32_t, std::vector<LoggedRtpPacketOutgoing>>
- outgoing_rtp_packets_map_;
-
- // RTP headers.
- std::vector<LoggedRtpStreamIncoming> incoming_rtp_packets_by_ssrc_;
- std::vector<LoggedRtpStreamOutgoing> outgoing_rtp_packets_by_ssrc_;
- std::vector<LoggedRtpStreamView> incoming_rtp_packet_views_by_ssrc_;
- std::vector<LoggedRtpStreamView> outgoing_rtp_packet_views_by_ssrc_;
-
- // Raw RTCP packets.
- std::vector<LoggedRtcpPacketIncoming> incoming_rtcp_packets_;
- std::vector<LoggedRtcpPacketOutgoing> outgoing_rtcp_packets_;
-
- // Parsed RTCP messages. Currently not separated based on SSRC.
- std::vector<LoggedRtcpPacketReceiverReport> incoming_rr_;
- std::vector<LoggedRtcpPacketReceiverReport> outgoing_rr_;
- std::vector<LoggedRtcpPacketSenderReport> incoming_sr_;
- std::vector<LoggedRtcpPacketSenderReport> outgoing_sr_;
- std::vector<LoggedRtcpPacketNack> incoming_nack_;
- std::vector<LoggedRtcpPacketNack> outgoing_nack_;
- std::vector<LoggedRtcpPacketRemb> incoming_remb_;
- std::vector<LoggedRtcpPacketRemb> outgoing_remb_;
- std::vector<LoggedRtcpPacketTransportFeedback> incoming_transport_feedback_;
- std::vector<LoggedRtcpPacketTransportFeedback> outgoing_transport_feedback_;
-
- std::vector<LoggedStartEvent> start_log_events_;
- std::vector<LoggedStopEvent> stop_log_events_;
-
- std::vector<LoggedAlrStateEvent> alr_state_events_;
-
- std::map<uint32_t, std::vector<LoggedAudioPlayoutEvent>>
- audio_playout_events_;
-
- std::vector<LoggedAudioNetworkAdaptationEvent>
- audio_network_adaptation_events_;
-
- std::vector<LoggedBweProbeClusterCreatedEvent>
- bwe_probe_cluster_created_events_;
-
- std::vector<LoggedBweProbeFailureEvent> bwe_probe_failure_events_;
- std::vector<LoggedBweProbeSuccessEvent> bwe_probe_success_events_;
-
- std::vector<LoggedBweDelayBasedUpdate> bwe_delay_updates_;
- std::vector<LoggedBweLossBasedUpdate> bwe_loss_updates_;
-
- std::vector<LoggedDtlsTransportState> dtls_transport_states_;
- std::vector<LoggedDtlsWritableState> dtls_writable_states_;
-
- std::vector<LoggedIceCandidatePairConfig> ice_candidate_pair_configs_;
- std::vector<LoggedIceCandidatePairEvent> ice_candidate_pair_events_;
-
- std::vector<LoggedAudioRecvConfig> audio_recv_configs_;
- std::vector<LoggedAudioSendConfig> audio_send_configs_;
- std::vector<LoggedVideoRecvConfig> video_recv_configs_;
- std::vector<LoggedVideoSendConfig> video_send_configs_;
-
- uint8_t last_incoming_rtcp_packet_[IP_PACKET_SIZE];
- uint8_t last_incoming_rtcp_packet_length_;
-
- int64_t first_timestamp_;
- int64_t last_timestamp_;
-
- // 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
- // fully transitioned to the new format.
- mutable std::map<uint32_t, webrtc::RtpHeaderExtensionMap>
- incoming_rtp_extensions_maps_;
- mutable std::map<uint32_t, webrtc::RtpHeaderExtensionMap>
- outgoing_rtp_extensions_maps_;
-};
-
-struct MatchedSendArrivalTimes {
- MatchedSendArrivalTimes(int64_t fb, int64_t tx, int64_t rx, int64_t ps)
- : feedback_arrival_time_ms(fb),
- send_time_ms(tx),
- arrival_time_ms(rx),
- payload_size(ps) {}
-
- int64_t feedback_arrival_time_ms;
- int64_t send_time_ms; // PacketFeedback::kNoSendTime for late feedback.
- int64_t arrival_time_ms; // PacketFeedback::kNotReceived for lost packets.
- int64_t payload_size;
-};
-const std::vector<MatchedSendArrivalTimes> GetNetworkTrace(
- const ParsedRtcEventLogNew& parsed_log);
-
-} // namespace webrtc
-
+using ParsedRtcEventLogNew RTC_DEPRECATED = ParsedRtcEventLog;
+}
#endif // LOGGING_RTC_EVENT_LOG_RTC_EVENT_LOG_PARSER_NEW_H_
diff --git a/logging/rtc_event_log/rtc_event_log_unittest.cc b/logging/rtc_event_log/rtc_event_log_unittest.cc
index a89de54..842687e 100644
--- a/logging/rtc_event_log/rtc_event_log_unittest.cc
+++ b/logging/rtc_event_log/rtc_event_log_unittest.cc
@@ -37,7 +37,7 @@
#include "logging/rtc_event_log/events/rtc_event_video_send_stream_config.h"
#include "logging/rtc_event_log/output/rtc_event_log_output_file.h"
#include "logging/rtc_event_log/rtc_event_log.h"
-#include "logging/rtc_event_log/rtc_event_log_parser_new.h"
+#include "logging/rtc_event_log/rtc_event_log_parser.h"
#include "logging/rtc_event_log/rtc_event_log_unittest_helper.h"
#include "logging/rtc_event_log/rtc_stream_config.h"
#include "modules/rtp_rtcp/include/rtp_header_extension_map.h"
@@ -498,7 +498,7 @@
// same as what we wrote down.
void RtcEventLogSession::ReadAndVerifyLog() {
// Read the generated file from disk.
- ParsedRtcEventLogNew parsed_log;
+ ParsedRtcEventLog parsed_log;
ASSERT_TRUE(parsed_log.ParseFile(temp_filename_));
// Start and stop events.
@@ -785,7 +785,7 @@
log_dumper->StopLogging();
// Read the generated file from disk.
- ParsedRtcEventLogNew parsed_log;
+ ParsedRtcEventLog parsed_log;
ASSERT_TRUE(parsed_log.ParseFile(temp_filename));
const auto& start_log_events = parsed_log.start_log_events();
diff --git a/logging/rtc_event_log/rtc_event_log_unittest_helper.h b/logging/rtc_event_log/rtc_event_log_unittest_helper.h
index a840371..61b202c 100644
--- a/logging/rtc_event_log/rtc_event_log_unittest_helper.h
+++ b/logging/rtc_event_log/rtc_event_log_unittest_helper.h
@@ -35,7 +35,7 @@
#include "logging/rtc_event_log/events/rtc_event_rtp_packet_outgoing.h"
#include "logging/rtc_event_log/events/rtc_event_video_receive_stream_config.h"
#include "logging/rtc_event_log/events/rtc_event_video_send_stream_config.h"
-#include "logging/rtc_event_log/rtc_event_log_parser_new.h"
+#include "logging/rtc_event_log/rtc_event_log_parser.h"
#include "logging/rtc_event_log/rtc_stream_config.h"
#include "modules/rtp_rtcp/include/rtp_header_extension_map.h"
#include "modules/rtp_rtcp/source/rtcp_packet/receiver_report.h"
diff --git a/logging/rtc_event_log/rtc_event_processor_unittest.cc b/logging/rtc_event_log/rtc_event_processor_unittest.cc
index 8409adf..dac3bb6 100644
--- a/logging/rtc_event_log/rtc_event_processor_unittest.cc
+++ b/logging/rtc_event_log/rtc_event_processor_unittest.cc
@@ -16,7 +16,7 @@
#include <numeric>
#include "absl/memory/memory.h"
-#include "logging/rtc_event_log/rtc_event_log_parser_new.h"
+#include "logging/rtc_event_log/rtc_event_log_parser.h"
#include "rtc_base/checks.h"
#include "rtc_base/random.h"
#include "test/gtest.h"
diff --git a/modules/audio_coding/neteq/tools/rtc_event_log_source.cc b/modules/audio_coding/neteq/tools/rtc_event_log_source.cc
index 0110b8c..446a1a9 100644
--- a/modules/audio_coding/neteq/tools/rtc_event_log_source.cc
+++ b/modules/audio_coding/neteq/tools/rtc_event_log_source.cc
@@ -24,10 +24,10 @@
namespace test {
namespace {
-bool ShouldSkipStream(ParsedRtcEventLogNew::MediaType media_type,
+bool ShouldSkipStream(ParsedRtcEventLog::MediaType media_type,
uint32_t ssrc,
absl::optional<uint32_t> ssrc_filter) {
- if (media_type != ParsedRtcEventLogNew::MediaType::AUDIO)
+ if (media_type != ParsedRtcEventLog::MediaType::AUDIO)
return true;
if (ssrc_filter.has_value() && ssrc != *ssrc_filter)
return true;
@@ -65,7 +65,7 @@
bool RtcEventLogSource::OpenFile(const std::string& file_name,
absl::optional<uint32_t> ssrc_filter) {
- ParsedRtcEventLogNew parsed_log;
+ ParsedRtcEventLog parsed_log;
if (!parsed_log.ParseFile(file_name))
return false;
@@ -104,7 +104,7 @@
// This wouldn't be needed if we knew that there was at most one audio stream.
webrtc::RtcEventProcessor event_processor;
for (const auto& rtp_packets : parsed_log.incoming_rtp_packets_by_ssrc()) {
- ParsedRtcEventLogNew::MediaType media_type =
+ ParsedRtcEventLog::MediaType media_type =
parsed_log.GetMediaType(rtp_packets.ssrc, webrtc::kIncomingPacket);
if (ShouldSkipStream(media_type, rtp_packets.ssrc, ssrc_filter)) {
continue;
diff --git a/modules/audio_coding/neteq/tools/rtc_event_log_source.h b/modules/audio_coding/neteq/tools/rtc_event_log_source.h
index 6b761f7..ea620da 100644
--- a/modules/audio_coding/neteq/tools/rtc_event_log_source.h
+++ b/modules/audio_coding/neteq/tools/rtc_event_log_source.h
@@ -16,7 +16,7 @@
#include <vector>
#include "absl/types/optional.h"
-#include "logging/rtc_event_log/rtc_event_log_parser_new.h"
+#include "logging/rtc_event_log/rtc_event_log_parser.h"
#include "modules/audio_coding/neteq/tools/packet_source.h"
#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
#include "rtc_base/constructormagic.h"
diff --git a/rtc_tools/event_log_visualizer/analyzer.cc b/rtc_tools/event_log_visualizer/analyzer.cc
index cae810c..2d1e908 100644
--- a/rtc_tools/event_log_visualizer/analyzer.cc
+++ b/rtc_tools/event_log_visualizer/analyzer.cc
@@ -445,7 +445,7 @@
} // namespace
-EventLogAnalyzer::EventLogAnalyzer(const ParsedRtcEventLogNew& log,
+EventLogAnalyzer::EventLogAnalyzer(const ParsedRtcEventLog& log,
bool normalize_time)
: parsed_log_(log),
window_duration_(250000),
diff --git a/rtc_tools/event_log_visualizer/analyzer.h b/rtc_tools/event_log_visualizer/analyzer.h
index 35a44b9..976598b 100644
--- a/rtc_tools/event_log_visualizer/analyzer.h
+++ b/rtc_tools/event_log_visualizer/analyzer.h
@@ -18,7 +18,7 @@
#include <utility>
#include <vector>
-#include "logging/rtc_event_log/rtc_event_log_parser_new.h"
+#include "logging/rtc_event_log/rtc_event_log_parser.h"
#include "modules/audio_coding/neteq/tools/neteq_stats_getter.h"
#include "rtc_base/strings/string_builder.h"
#include "rtc_tools/event_log_visualizer/plot_base.h"
@@ -31,7 +31,7 @@
// The EventLogAnalyzer keeps a reference to the ParsedRtcEventLogNew for the
// duration of its lifetime. The ParsedRtcEventLogNew must not be destroyed or
// modified while the EventLogAnalyzer is being used.
- EventLogAnalyzer(const ParsedRtcEventLogNew& log, bool normalize_time);
+ EventLogAnalyzer(const ParsedRtcEventLog& log, bool normalize_time);
void CreatePacketGraph(PacketDirection direction, Plot* plot);
@@ -223,7 +223,7 @@
std::string GetCandidatePairLogDescriptionFromId(uint32_t candidate_pair_id);
- const ParsedRtcEventLogNew& parsed_log_;
+ const ParsedRtcEventLog& parsed_log_;
// A list of SSRCs we are interested in analysing.
// If left empty, all SSRCs will be considered relevant.
diff --git a/rtc_tools/event_log_visualizer/main.cc b/rtc_tools/event_log_visualizer/main.cc
index 4808f9d..8c92be5 100644
--- a/rtc_tools/event_log_visualizer/main.cc
+++ b/rtc_tools/event_log_visualizer/main.cc
@@ -17,7 +17,7 @@
#include <utility>
#include "logging/rtc_event_log/rtc_event_log.h"
-#include "logging/rtc_event_log/rtc_event_log_parser_new.h"
+#include "logging/rtc_event_log/rtc_event_log_parser.h"
#include "modules/audio_coding/neteq/include/neteq.h"
#include "modules/rtp_rtcp/source/rtcp_packet/report_block.h"
#include "rtc_base/checks.h"
@@ -258,13 +258,13 @@
std::string filename = argv[1];
- webrtc::ParsedRtcEventLogNew::UnconfiguredHeaderExtensions header_extensions =
- webrtc::ParsedRtcEventLogNew::UnconfiguredHeaderExtensions::kDontParse;
+ webrtc::ParsedRtcEventLog::UnconfiguredHeaderExtensions header_extensions =
+ webrtc::ParsedRtcEventLog::UnconfiguredHeaderExtensions::kDontParse;
if (FLAG_parse_unconfigured_header_extensions) {
- header_extensions = webrtc::ParsedRtcEventLogNew::
+ header_extensions = webrtc::ParsedRtcEventLog::
UnconfiguredHeaderExtensions::kAttemptWebrtcDefaultConfig;
}
- webrtc::ParsedRtcEventLogNew parsed_log(header_extensions);
+ webrtc::ParsedRtcEventLog parsed_log(header_extensions);
if (!parsed_log.ParseFile(filename)) {
std::cerr << "Could not parse the entire log file." << std::endl;