Add rtc event generic packet sent and received.
Bug: webrtc:9719
Change-Id: I2f692d9c1b33ac390975a9e695c7652cdc1b1e6e
Reviewed-on: https://webrtc-review.googlesource.com/c/121680
Commit-Queue: Peter Slatala <psla@webrtc.org>
Reviewed-by: Björn Terelius <terelius@webrtc.org>
Reviewed-by: Bjorn Mellem <mellem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26616}
diff --git a/logging/BUILD.gn b/logging/BUILD.gn
index df3b9dd..4afb07f 100644
--- a/logging/BUILD.gn
+++ b/logging/BUILD.gn
@@ -114,6 +114,24 @@
]
}
+rtc_source_set("rtc_event_generic_packet_events") {
+ visibility = [ "*" ]
+ sources = [
+ "rtc_event_log/events/rtc_event_generic_ack_received.cc",
+ "rtc_event_log/events/rtc_event_generic_ack_received.h",
+ "rtc_event_log/events/rtc_event_generic_packet_received.cc",
+ "rtc_event_log/events/rtc_event_generic_packet_received.h",
+ "rtc_event_log/events/rtc_event_generic_packet_sent.cc",
+ "rtc_event_log/events/rtc_event_generic_packet_sent.h",
+ ]
+ deps = [
+ ":rtc_event_log_api",
+ ]
+ if (!build_with_chromium && is_clang) {
+ suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
+ }
+}
+
rtc_source_set("rtc_event_rtp_rtcp") {
sources = [
"rtc_event_log/events/rtc_event_rtcp_packet_incoming.cc",
@@ -186,6 +204,7 @@
":ice_log",
":rtc_event_audio",
":rtc_event_bwe",
+ ":rtc_event_generic_packet_events",
":rtc_event_log2_proto",
":rtc_event_log_api",
":rtc_event_log_impl_output",
@@ -205,6 +224,10 @@
"rtc_event_log/encoder/rtc_event_log_encoder_new_format.cc",
"rtc_event_log/encoder/rtc_event_log_encoder_new_format.h",
]
+
+ if (!build_with_chromium && is_clang) {
+ suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
+ }
}
}
diff --git a/logging/rtc_event_log/encoder/rtc_event_log_encoder_legacy.cc b/logging/rtc_event_log/encoder/rtc_event_log_encoder_legacy.cc
index 7e42e3c..6aab870 100644
--- a/logging/rtc_event_log/encoder/rtc_event_log_encoder_legacy.cc
+++ b/logging/rtc_event_log/encoder/rtc_event_log_encoder_legacy.cc
@@ -362,6 +362,10 @@
static_cast<const RtcEventVideoSendStreamConfig&>(event);
return EncodeVideoSendStreamConfig(rtc_event);
}
+ case RtcEvent::Type::GenericPacketReceived:
+ case RtcEvent::Type::GenericPacketSent:
+ case RtcEvent::Type::GenericAckReceived:
+ RTC_NOTREACHED();
}
int event_type = static_cast<int>(event.GetType());
diff --git a/logging/rtc_event_log/encoder/rtc_event_log_encoder_new_format.cc b/logging/rtc_event_log/encoder/rtc_event_log_encoder_new_format.cc
index b9e222d..c568ba4 100644
--- a/logging/rtc_event_log/encoder/rtc_event_log_encoder_new_format.cc
+++ b/logging/rtc_event_log/encoder/rtc_event_log_encoder_new_format.cc
@@ -24,6 +24,9 @@
#include "logging/rtc_event_log/events/rtc_event_bwe_update_loss_based.h"
#include "logging/rtc_event_log/events/rtc_event_dtls_transport_state.h"
#include "logging/rtc_event_log/events/rtc_event_dtls_writable_state.h"
+#include "logging/rtc_event_log/events/rtc_event_generic_ack_received.h"
+#include "logging/rtc_event_log/events/rtc_event_generic_packet_received.h"
+#include "logging/rtc_event_log/events/rtc_event_generic_packet_sent.h"
#include "logging/rtc_event_log/events/rtc_event_ice_candidate_pair.h"
#include "logging/rtc_event_log/events/rtc_event_ice_candidate_pair_config.h"
#include "logging/rtc_event_log/events/rtc_event_probe_cluster_created.h"
@@ -687,6 +690,9 @@
std::vector<const RtcEventVideoSendStreamConfig*> video_send_stream_configs;
std::vector<const RtcEventIceCandidatePairConfig*> ice_candidate_configs;
std::vector<const RtcEventIceCandidatePair*> ice_candidate_events;
+ std::vector<const RtcEventGenericPacketReceived*> generic_packets_received;
+ std::vector<const RtcEventGenericPacketSent*> generic_packets_sent;
+ std::vector<const RtcEventGenericAckReceived*> generic_acks_received;
for (auto it = begin; it != end; ++it) {
switch ((*it)->GetType()) {
@@ -818,6 +824,25 @@
ice_candidate_events.push_back(rtc_event);
break;
}
+ case RtcEvent::Type::GenericPacketReceived: {
+ auto* rtc_event =
+ static_cast<const RtcEventGenericPacketReceived* const>(
+ it->get());
+ generic_packets_received.push_back(rtc_event);
+ break;
+ }
+ case RtcEvent::Type::GenericPacketSent: {
+ auto* rtc_event =
+ static_cast<const RtcEventGenericPacketSent* const>(it->get());
+ generic_packets_sent.push_back(rtc_event);
+ break;
+ }
+ case RtcEvent::Type::GenericAckReceived: {
+ auto* rtc_event =
+ static_cast<const RtcEventGenericAckReceived* const>(it->get());
+ generic_acks_received.push_back(rtc_event);
+ break;
+ }
}
}
diff --git a/logging/rtc_event_log/events/rtc_event.h b/logging/rtc_event_log/events/rtc_event.h
index a3564f0..a8b1d9e 100644
--- a/logging/rtc_event_log/events/rtc_event.h
+++ b/logging/rtc_event_log/events/rtc_event.h
@@ -49,7 +49,10 @@
RtpPacketIncoming,
RtpPacketOutgoing,
VideoReceiveStreamConfig,
- VideoSendStreamConfig
+ VideoSendStreamConfig,
+ GenericPacketSent,
+ GenericPacketReceived,
+ GenericAckReceived
};
RtcEvent() : timestamp_us_(rtc::TimeMicros()) {}
diff --git a/logging/rtc_event_log/events/rtc_event_generic_ack_received.cc b/logging/rtc_event_log/events/rtc_event_generic_ack_received.cc
new file mode 100644
index 0000000..f158069
--- /dev/null
+++ b/logging/rtc_event_log/events/rtc_event_generic_ack_received.cc
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 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.
+ */
+
+#include "logging/rtc_event_log/events/rtc_event_generic_ack_received.h"
+
+#include <vector>
+
+namespace webrtc {
+std::vector<std::unique_ptr<RtcEventGenericAckReceived>>
+RtcEventGenericAckReceived::CreateLogs(
+ int64_t packet_number,
+ const std::vector<AckedPacket> acked_packets) {
+ std::vector<std::unique_ptr<RtcEventGenericAckReceived>> result;
+ int64_t time_us = rtc::TimeMicros();
+ for (const AckedPacket& packet : acked_packets) {
+ result.push_back(absl::WrapUnique(new RtcEventGenericAckReceived(
+ time_us, packet_number, packet.packet_number,
+ packet.receive_timestamp_ms)));
+ }
+ return result;
+}
+
+RtcEventGenericAckReceived::RtcEventGenericAckReceived(
+ int64_t timestamp_us,
+ int64_t packet_number,
+ int64_t acked_packet_number,
+ absl::optional<int64_t> receive_timestamp_ms)
+ : RtcEvent(timestamp_us),
+ packet_number_(packet_number),
+ acked_packet_number_(acked_packet_number),
+ receive_timestamp_ms_(receive_timestamp_ms) {}
+
+RtcEventGenericAckReceived::~RtcEventGenericAckReceived() = default;
+
+RtcEvent::Type RtcEventGenericAckReceived::GetType() const {
+ return RtcEvent::Type::GenericAckReceived;
+}
+
+bool RtcEventGenericAckReceived::IsConfigEvent() const {
+ return false;
+}
+
+} // namespace webrtc
diff --git a/logging/rtc_event_log/events/rtc_event_generic_ack_received.h b/logging/rtc_event_log/events/rtc_event_generic_ack_received.h
new file mode 100644
index 0000000..38b36e5
--- /dev/null
+++ b/logging/rtc_event_log/events/rtc_event_generic_ack_received.h
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 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_EVENTS_RTC_EVENT_GENERIC_ACK_RECEIVED_H_
+#define LOGGING_RTC_EVENT_LOG_EVENTS_RTC_EVENT_GENERIC_ACK_RECEIVED_H_
+
+#include "logging/rtc_event_log/events/rtc_event.h"
+
+#include <memory>
+#include <vector>
+
+namespace webrtc {
+
+struct AckedPacket {
+ // The packet number that was acked.
+ int64_t packet_number;
+
+ // The time where the packet was received. Not every ACK will
+ // include the receive timestamp.
+ absl::optional<int64_t> receive_timestamp_ms;
+};
+
+class RtcEventGenericAckReceived final : public RtcEvent {
+ public:
+ // For a collection of acked packets, it creates a vector of logs to log with
+ // the same timestamp.
+ static std::vector<std::unique_ptr<RtcEventGenericAckReceived>> CreateLogs(
+ int64_t packet_number,
+ const std::vector<AckedPacket> acked_packets);
+
+ RtcEventGenericAckReceived(const RtcEventGenericAckReceived& packet);
+ ~RtcEventGenericAckReceived() override;
+
+ Type GetType() const override;
+
+ bool IsConfigEvent() const override;
+
+ // An identifier of the packet which contained an ack.
+ int64_t packet_number() const { return packet_number_; }
+
+ // An identifier of the acked packet.
+ int64_t acked_packet_number() const { return acked_packet_number_; }
+
+ // Collection of the received acks with their timestamps.
+ const absl::optional<int64_t> receive_timestamp_ms() const {
+ return receive_timestamp_ms_;
+ }
+
+ private:
+ // When the ack is received, |packet_number| identifies the packet which
+ // contained an ack for |acked_packet_number|, and contains the
+ // |receive_timestamp_ms| on which the |acked_packet_number| was received on
+ // the remote side. The |receive_timestamp_ms| may be null.
+ RtcEventGenericAckReceived(int64_t timestamp_us,
+ int64_t packet_number,
+ int64_t acked_packet_number,
+ absl::optional<int64_t> receive_timestamp_ms);
+
+ const int64_t packet_number_;
+ const int64_t acked_packet_number_;
+ const absl::optional<int64_t> receive_timestamp_ms_;
+};
+
+} // namespace webrtc
+
+#endif // LOGGING_RTC_EVENT_LOG_EVENTS_RTC_EVENT_GENERIC_ACK_RECEIVED_H_
diff --git a/logging/rtc_event_log/events/rtc_event_generic_packet_received.cc b/logging/rtc_event_log/events/rtc_event_generic_packet_received.cc
new file mode 100644
index 0000000..6a75cf2
--- /dev/null
+++ b/logging/rtc_event_log/events/rtc_event_generic_packet_received.cc
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 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.
+ */
+
+#include "logging/rtc_event_log/events/rtc_event_generic_packet_received.h"
+
+namespace webrtc {
+
+RtcEventGenericPacketReceived::RtcEventGenericPacketReceived(
+ int64_t packet_number,
+ size_t packet_length)
+ : packet_number_(packet_number), packet_length_(packet_length) {}
+
+RtcEventGenericPacketReceived::~RtcEventGenericPacketReceived() = default;
+
+RtcEvent::Type RtcEventGenericPacketReceived::GetType() const {
+ return RtcEvent::Type::GenericPacketReceived;
+}
+
+bool RtcEventGenericPacketReceived::IsConfigEvent() const {
+ return false;
+}
+
+} // namespace webrtc
diff --git a/logging/rtc_event_log/events/rtc_event_generic_packet_received.h b/logging/rtc_event_log/events/rtc_event_generic_packet_received.h
new file mode 100644
index 0000000..a7f95bc
--- /dev/null
+++ b/logging/rtc_event_log/events/rtc_event_generic_packet_received.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 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_EVENTS_RTC_EVENT_GENERIC_PACKET_RECEIVED_H_
+#define LOGGING_RTC_EVENT_LOG_EVENTS_RTC_EVENT_GENERIC_PACKET_RECEIVED_H_
+
+#include "logging/rtc_event_log/events/rtc_event.h"
+
+namespace webrtc {
+
+class RtcEventGenericPacketReceived final : public RtcEvent {
+ public:
+ RtcEventGenericPacketReceived(int64_t packet_number, size_t packet_length);
+ RtcEventGenericPacketReceived(const RtcEventGenericPacketReceived& packet);
+ ~RtcEventGenericPacketReceived() override;
+
+ Type GetType() const override;
+
+ bool IsConfigEvent() const override;
+
+ // An identifier of the packet.
+ int64_t packet_number() const { return packet_number_; }
+
+ // Total packet length, including all packetization overheads, but not
+ // including ICE/TURN/IP overheads.
+ size_t packet_length() const { return packet_length_; }
+
+ private:
+ const int64_t packet_number_;
+ const size_t packet_length_;
+};
+
+} // namespace webrtc
+
+#endif // LOGGING_RTC_EVENT_LOG_EVENTS_RTC_EVENT_GENERIC_PACKET_RECEIVED_H_
diff --git a/logging/rtc_event_log/events/rtc_event_generic_packet_sent.cc b/logging/rtc_event_log/events/rtc_event_generic_packet_sent.cc
new file mode 100644
index 0000000..25cc74e
--- /dev/null
+++ b/logging/rtc_event_log/events/rtc_event_generic_packet_sent.cc
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 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.
+ */
+
+#include "logging/rtc_event_log/events/rtc_event_generic_packet_sent.h"
+
+namespace webrtc {
+
+RtcEventGenericPacketSent::RtcEventGenericPacketSent(int64_t packet_number,
+ size_t overhead_length,
+ size_t payload_length,
+ size_t padding_length)
+ : packet_number_(packet_number),
+ overhead_length_(overhead_length),
+ payload_length_(payload_length),
+ padding_length_(padding_length) {}
+
+RtcEventGenericPacketSent::~RtcEventGenericPacketSent() = default;
+
+RtcEvent::Type RtcEventGenericPacketSent::GetType() const {
+ return RtcEvent::Type::GenericPacketSent;
+}
+
+bool RtcEventGenericPacketSent::IsConfigEvent() const {
+ return false;
+}
+
+} // namespace webrtc
diff --git a/logging/rtc_event_log/events/rtc_event_generic_packet_sent.h b/logging/rtc_event_log/events/rtc_event_generic_packet_sent.h
new file mode 100644
index 0000000..02528a0
--- /dev/null
+++ b/logging/rtc_event_log/events/rtc_event_generic_packet_sent.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 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_EVENTS_RTC_EVENT_GENERIC_PACKET_SENT_H_
+#define LOGGING_RTC_EVENT_LOG_EVENTS_RTC_EVENT_GENERIC_PACKET_SENT_H_
+
+#include "logging/rtc_event_log/events/rtc_event.h"
+
+namespace webrtc {
+
+class RtcEventGenericPacketSent final : public RtcEvent {
+ public:
+ RtcEventGenericPacketSent(int64_t packet_number,
+ size_t overhead_length,
+ size_t payload_length,
+ size_t padding_length);
+ RtcEventGenericPacketSent(const RtcEventGenericPacketSent& packet);
+ ~RtcEventGenericPacketSent() override;
+
+ Type GetType() const override;
+
+ bool IsConfigEvent() const override;
+
+ // An identifier of the packet.
+ int64_t packet_number() const { return packet_number_; }
+
+ // Total packet length, including all packetization overheads, but not
+ // including ICE/TURN/IP overheads.
+ size_t packet_length() const {
+ return overhead_length_ + payload_length_ + padding_length_;
+ }
+
+ // The number of bytes in overhead, including framing overheads, acks if
+ // present, etc.
+ size_t overhead_length() const { return overhead_length_; }
+
+ // Length of payload sent (size of raw audio/video/data), without
+ // packetization overheads. This may still include serialization overheads.
+ size_t payload_length() const { return payload_length_; }
+
+ size_t padding_length() const { return padding_length_; }
+
+ private:
+ const int64_t packet_number_;
+ const size_t overhead_length_;
+ const size_t payload_length_;
+ const size_t padding_length_;
+};
+
+} // namespace webrtc
+
+#endif // LOGGING_RTC_EVENT_LOG_EVENTS_RTC_EVENT_GENERIC_PACKET_SENT_H_