From 3f2b9aad4a054c7b07957c9064083c71276291e9 Mon Sep 17 00:00:00 2001 From: Sebastian Jansson Date: Thu, 3 Jan 2019 14:42:15 +0100 Subject: [PATCH] Moves logged event structs to separate header. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: webrtc:10170 Change-Id: I2f6f5b9688f5064fc476063e4e64ac3f9a335b3c Reviewed-on: https://webrtc-review.googlesource.com/c/116061 Reviewed-by: Björn Terelius Commit-Queue: Sebastian Jansson Cr-Commit-Position: refs/heads/master@{#26123} --- logging/BUILD.gn | 1 + logging/rtc_event_log/logged_events.h | 441 ++++++++++++++++++ .../rtc_event_log/rtc_event_log_parser_new.h | 424 +---------------- 3 files changed, 443 insertions(+), 423 deletions(-) create mode 100644 logging/rtc_event_log/logged_events.h diff --git a/logging/BUILD.gn b/logging/BUILD.gn index 27be9d5462..3eda8754b5 100644 --- a/logging/BUILD.gn +++ b/logging/BUILD.gn @@ -290,6 +290,7 @@ if (rtc_enable_protobuf) { rtc_static_library("rtc_event_log_parser") { visibility = [ "*" ] sources = [ + "rtc_event_log/logged_events.h", "rtc_event_log/rtc_event_log_parser_new.cc", "rtc_event_log/rtc_event_log_parser_new.h", "rtc_event_log/rtc_event_processor.h", diff --git a/logging/rtc_event_log/logged_events.h b/logging/rtc_event_log/logged_events.h new file mode 100644 index 0000000000..7ff7e2d09c --- /dev/null +++ b/logging/rtc_event_log/logged_events.h @@ -0,0 +1,441 @@ +/* + * 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_LOGGED_EVENTS_H_ +#define LOGGING_RTC_EVENT_LOG_LOGGED_EVENTS_H_ + +#include +#include + +#include "api/rtp_headers.h" +#include "logging/rtc_event_log/events/rtc_event_dtls_transport_state.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_result_failure.h" +#include "logging/rtc_event_log/rtc_stream_config.h" +#include "modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor_config.h" +#include "modules/remote_bitrate_estimator/include/bwe_defines.h" +#include "modules/rtp_rtcp/source/rtcp_packet/nack.h" +#include "modules/rtp_rtcp/source/rtcp_packet/receiver_report.h" +#include "modules/rtp_rtcp/source/rtcp_packet/remb.h" +#include "modules/rtp_rtcp/source/rtcp_packet/sender_report.h" +#include "modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" + +namespace webrtc { + +// The different event types are deliberately POD. Analysis of large logs is +// already resource intensive. The code simplifications that would be possible +// possible by having a base class (containing e.g. the log time) are not +// considered to outweigh the added memory and runtime overhead incurred by +// adding a vptr. +struct LoggedAlrStateEvent { + LoggedAlrStateEvent() = default; + LoggedAlrStateEvent(int64_t timestamp_us, bool in_alr) + : timestamp_us(timestamp_us), in_alr(in_alr) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + bool in_alr; +}; + +struct LoggedAudioPlayoutEvent { + LoggedAudioPlayoutEvent() = default; + LoggedAudioPlayoutEvent(int64_t timestamp_us, uint32_t ssrc) + : timestamp_us(timestamp_us), ssrc(ssrc) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + uint32_t ssrc; +}; + +struct LoggedAudioNetworkAdaptationEvent { + LoggedAudioNetworkAdaptationEvent() = default; + LoggedAudioNetworkAdaptationEvent(int64_t timestamp_us, + const AudioEncoderRuntimeConfig& config) + : timestamp_us(timestamp_us), config(config) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + AudioEncoderRuntimeConfig config; +}; + +struct LoggedBweDelayBasedUpdate { + LoggedBweDelayBasedUpdate() = default; + LoggedBweDelayBasedUpdate(int64_t timestamp_us, + int32_t bitrate_bps, + BandwidthUsage detector_state) + : timestamp_us(timestamp_us), + bitrate_bps(bitrate_bps), + detector_state(detector_state) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + int32_t bitrate_bps; + BandwidthUsage detector_state; +}; + +struct LoggedBweLossBasedUpdate { + LoggedBweLossBasedUpdate() = default; + LoggedBweLossBasedUpdate(int64_t timestamp_us, + int32_t bitrate_bps, + uint8_t fraction_lost, + int32_t expected_packets) + : timestamp_us(timestamp_us), + bitrate_bps(bitrate_bps), + fraction_lost(fraction_lost), + expected_packets(expected_packets) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + int32_t bitrate_bps; + uint8_t fraction_lost; + int32_t expected_packets; +}; + +struct LoggedDtlsTransportState { + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + DtlsTransportState dtls_transport_state; +}; + +struct LoggedDtlsWritableState { + LoggedDtlsWritableState() = default; + explicit LoggedDtlsWritableState(bool writable) : writable(writable) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + bool writable; +}; + +struct LoggedBweProbeClusterCreatedEvent { + LoggedBweProbeClusterCreatedEvent() = default; + LoggedBweProbeClusterCreatedEvent(int64_t timestamp_us, + int32_t id, + int32_t bitrate_bps, + uint32_t min_packets, + uint32_t min_bytes) + : timestamp_us(timestamp_us), + id(id), + bitrate_bps(bitrate_bps), + min_packets(min_packets), + min_bytes(min_bytes) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + int32_t id; + int32_t bitrate_bps; + uint32_t min_packets; + uint32_t min_bytes; +}; + +struct LoggedBweProbeSuccessEvent { + LoggedBweProbeSuccessEvent() = default; + LoggedBweProbeSuccessEvent(int64_t timestamp_us, + int32_t id, + int32_t bitrate_bps) + : timestamp_us(timestamp_us), id(id), bitrate_bps(bitrate_bps) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + int32_t id; + int32_t bitrate_bps; +}; + +struct LoggedBweProbeFailureEvent { + LoggedBweProbeFailureEvent() = default; + LoggedBweProbeFailureEvent(int64_t timestamp_us, + int32_t id, + ProbeFailureReason failure_reason) + : timestamp_us(timestamp_us), id(id), failure_reason(failure_reason) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + int32_t id; + ProbeFailureReason failure_reason; +}; + +struct LoggedIceCandidatePairConfig { + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + IceCandidatePairConfigType type; + uint32_t candidate_pair_id; + IceCandidateType local_candidate_type; + IceCandidatePairProtocol local_relay_protocol; + IceCandidateNetworkType local_network_type; + IceCandidatePairAddressFamily local_address_family; + IceCandidateType remote_candidate_type; + IceCandidatePairAddressFamily remote_address_family; + IceCandidatePairProtocol candidate_pair_protocol; +}; + +struct LoggedIceCandidatePairEvent { + LoggedIceCandidatePairEvent() = default; + LoggedIceCandidatePairEvent(int64_t timestamp_us, + IceCandidatePairEventType type, + uint32_t candidate_pair_id, + uint32_t transaction_id) + : timestamp_us(timestamp_us), + type(type), + candidate_pair_id(candidate_pair_id), + transaction_id(transaction_id) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + IceCandidatePairEventType type; + uint32_t candidate_pair_id; + uint32_t transaction_id; +}; + +struct LoggedRtpPacket { + LoggedRtpPacket(uint64_t timestamp_us, + RTPHeader header, + size_t header_length, + size_t total_length) + : timestamp_us(timestamp_us), + header(header), + header_length(header_length), + total_length(total_length) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + // TODO(terelius): This allocates space for 15 CSRCs even if none are used. + RTPHeader header; + size_t header_length; + size_t total_length; +}; + +struct LoggedRtpPacketIncoming { + LoggedRtpPacketIncoming(uint64_t timestamp_us, + RTPHeader header, + size_t header_length, + size_t total_length) + : rtp(timestamp_us, header, header_length, total_length) {} + int64_t log_time_us() const { return rtp.timestamp_us; } + int64_t log_time_ms() const { return rtp.timestamp_us / 1000; } + + LoggedRtpPacket rtp; +}; + +struct LoggedRtpPacketOutgoing { + LoggedRtpPacketOutgoing(uint64_t timestamp_us, + RTPHeader header, + size_t header_length, + size_t total_length) + : rtp(timestamp_us, header, header_length, total_length) {} + int64_t log_time_us() const { return rtp.timestamp_us; } + int64_t log_time_ms() const { return rtp.timestamp_us / 1000; } + + LoggedRtpPacket rtp; +}; + +struct LoggedRtcpPacket { + LoggedRtcpPacket(uint64_t timestamp_us, + const uint8_t* packet, + size_t total_length); + LoggedRtcpPacket(uint64_t timestamp_us, const std::string& packet); + LoggedRtcpPacket(const LoggedRtcpPacket&); + ~LoggedRtcpPacket(); + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + std::vector raw_data; +}; + +struct LoggedRtcpPacketIncoming { + LoggedRtcpPacketIncoming(uint64_t timestamp_us, + const uint8_t* packet, + size_t total_length) + : rtcp(timestamp_us, packet, total_length) {} + LoggedRtcpPacketIncoming(uint64_t timestamp_us, const std::string& packet) + : rtcp(timestamp_us, packet) {} + + int64_t log_time_us() const { return rtcp.timestamp_us; } + int64_t log_time_ms() const { return rtcp.timestamp_us / 1000; } + + LoggedRtcpPacket rtcp; +}; + +struct LoggedRtcpPacketOutgoing { + LoggedRtcpPacketOutgoing(uint64_t timestamp_us, + const uint8_t* packet, + size_t total_length) + : rtcp(timestamp_us, packet, total_length) {} + LoggedRtcpPacketOutgoing(uint64_t timestamp_us, const std::string& packet) + : rtcp(timestamp_us, packet) {} + + int64_t log_time_us() const { return rtcp.timestamp_us; } + int64_t log_time_ms() const { return rtcp.timestamp_us / 1000; } + + LoggedRtcpPacket rtcp; +}; + +struct LoggedRtcpPacketReceiverReport { + LoggedRtcpPacketReceiverReport() = default; + LoggedRtcpPacketReceiverReport(int64_t timestamp_us, + const rtcp::ReceiverReport& rr) + : timestamp_us(timestamp_us), rr(rr) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + rtcp::ReceiverReport rr; +}; + +struct LoggedRtcpPacketSenderReport { + LoggedRtcpPacketSenderReport() = default; + LoggedRtcpPacketSenderReport(int64_t timestamp_us, + const rtcp::SenderReport& sr) + : timestamp_us(timestamp_us), sr(sr) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + rtcp::SenderReport sr; +}; + +struct LoggedRtcpPacketRemb { + LoggedRtcpPacketRemb() = default; + LoggedRtcpPacketRemb(int64_t timestamp_us, const rtcp::Remb& remb) + : timestamp_us(timestamp_us), remb(remb) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + rtcp::Remb remb; +}; + +struct LoggedRtcpPacketNack { + LoggedRtcpPacketNack() = default; + LoggedRtcpPacketNack(int64_t timestamp_us, const rtcp::Nack& nack) + : timestamp_us(timestamp_us), nack(nack) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + rtcp::Nack nack; +}; + +struct LoggedRtcpPacketTransportFeedback { + LoggedRtcpPacketTransportFeedback() = default; + LoggedRtcpPacketTransportFeedback( + int64_t timestamp_us, + const rtcp::TransportFeedback& transport_feedback) + : timestamp_us(timestamp_us), transport_feedback(transport_feedback) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + rtcp::TransportFeedback transport_feedback; +}; + +struct LoggedStartEvent { + explicit LoggedStartEvent(int64_t timestamp_us) + : LoggedStartEvent(timestamp_us, timestamp_us / 1000) {} + + LoggedStartEvent(int64_t timestamp_us, int64_t utc_start_time_ms) + : timestamp_us(timestamp_us), utc_start_time_ms(utc_start_time_ms) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + int64_t utc_start_time_ms; +}; + +struct LoggedStopEvent { + explicit LoggedStopEvent(int64_t timestamp_us) : timestamp_us(timestamp_us) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; +}; + +struct LoggedAudioRecvConfig { + LoggedAudioRecvConfig() = default; + LoggedAudioRecvConfig(int64_t timestamp_us, const rtclog::StreamConfig config) + : timestamp_us(timestamp_us), config(config) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + rtclog::StreamConfig config; +}; + +struct LoggedAudioSendConfig { + LoggedAudioSendConfig() = default; + LoggedAudioSendConfig(int64_t timestamp_us, const rtclog::StreamConfig config) + : timestamp_us(timestamp_us), config(config) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + rtclog::StreamConfig config; +}; + +struct LoggedVideoRecvConfig { + LoggedVideoRecvConfig() = default; + LoggedVideoRecvConfig(int64_t timestamp_us, const rtclog::StreamConfig config) + : timestamp_us(timestamp_us), config(config) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + rtclog::StreamConfig config; +}; + +struct LoggedVideoSendConfig { + LoggedVideoSendConfig() = default; + LoggedVideoSendConfig(int64_t timestamp_us, const rtclog::StreamConfig config) + : timestamp_us(timestamp_us), config(config) {} + + int64_t log_time_us() const { return timestamp_us; } + int64_t log_time_ms() const { return timestamp_us / 1000; } + + int64_t timestamp_us; + rtclog::StreamConfig config; +}; +} // namespace webrtc +#endif // LOGGING_RTC_EVENT_LOG_LOGGED_EVENTS_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 903993fa29..0ee70a54ec 100644 --- a/logging/rtc_event_log/rtc_event_log_parser_new.h +++ b/logging/rtc_event_log/rtc_event_log_parser_new.h @@ -20,20 +20,10 @@ #include "call/video_receive_stream.h" #include "call/video_send_stream.h" -#include "logging/rtc_event_log/events/rtc_event_dtls_transport_state.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_result_failure.h" +#include "logging/rtc_event_log/logged_events.h" #include "logging/rtc_event_log/rtc_event_log.h" -#include "logging/rtc_event_log/rtc_stream_config.h" -#include "modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor_config.h" #include "modules/rtp_rtcp/include/rtp_header_extension_map.h" #include "modules/rtp_rtcp/source/rtcp_packet/common_header.h" -#include "modules/rtp_rtcp/source/rtcp_packet/nack.h" -#include "modules/rtp_rtcp/source/rtcp_packet/receiver_report.h" -#include "modules/rtp_rtcp/source/rtcp_packet/remb.h" -#include "modules/rtp_rtcp/source/rtcp_packet/sender_report.h" -#include "modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" #include "rtc_base/ignore_wundef.h" // Files generated at build-time by the protobuf compiler. @@ -49,418 +39,6 @@ RTC_POP_IGNORING_WUNDEF() namespace webrtc { -enum class BandwidthUsage; -struct AudioEncoderRuntimeConfig; - -// The different event types are deliberately POD. Analysis of large logs is -// already resource intensive. The code simplifications that would be possible -// possible by having a base class (containing e.g. the log time) are not -// considered to outweigh the added memory and runtime overhead incurred by -// adding a vptr. -struct LoggedAlrStateEvent { - LoggedAlrStateEvent() = default; - LoggedAlrStateEvent(int64_t timestamp_us, bool in_alr) - : timestamp_us(timestamp_us), in_alr(in_alr) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - bool in_alr; -}; - -struct LoggedAudioPlayoutEvent { - LoggedAudioPlayoutEvent() = default; - LoggedAudioPlayoutEvent(int64_t timestamp_us, uint32_t ssrc) - : timestamp_us(timestamp_us), ssrc(ssrc) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - uint32_t ssrc; -}; - -struct LoggedAudioNetworkAdaptationEvent { - LoggedAudioNetworkAdaptationEvent() = default; - LoggedAudioNetworkAdaptationEvent(int64_t timestamp_us, - const AudioEncoderRuntimeConfig& config) - : timestamp_us(timestamp_us), config(config) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - AudioEncoderRuntimeConfig config; -}; - -struct LoggedBweDelayBasedUpdate { - LoggedBweDelayBasedUpdate() = default; - LoggedBweDelayBasedUpdate(int64_t timestamp_us, - int32_t bitrate_bps, - BandwidthUsage detector_state) - : timestamp_us(timestamp_us), - bitrate_bps(bitrate_bps), - detector_state(detector_state) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - int32_t bitrate_bps; - BandwidthUsage detector_state; -}; - -struct LoggedBweLossBasedUpdate { - LoggedBweLossBasedUpdate() = default; - LoggedBweLossBasedUpdate(int64_t timestamp_us, - int32_t bitrate_bps, - uint8_t fraction_lost, - int32_t expected_packets) - : timestamp_us(timestamp_us), - bitrate_bps(bitrate_bps), - fraction_lost(fraction_lost), - expected_packets(expected_packets) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - int32_t bitrate_bps; - uint8_t fraction_lost; - int32_t expected_packets; -}; - -struct LoggedDtlsTransportState { - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - DtlsTransportState dtls_transport_state; -}; - -struct LoggedDtlsWritableState { - LoggedDtlsWritableState() = default; - explicit LoggedDtlsWritableState(bool writable) : writable(writable) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - bool writable; -}; - -struct LoggedBweProbeClusterCreatedEvent { - LoggedBweProbeClusterCreatedEvent() = default; - LoggedBweProbeClusterCreatedEvent(int64_t timestamp_us, - int32_t id, - int32_t bitrate_bps, - uint32_t min_packets, - uint32_t min_bytes) - : timestamp_us(timestamp_us), - id(id), - bitrate_bps(bitrate_bps), - min_packets(min_packets), - min_bytes(min_bytes) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - int32_t id; - int32_t bitrate_bps; - uint32_t min_packets; - uint32_t min_bytes; -}; - -struct LoggedBweProbeSuccessEvent { - LoggedBweProbeSuccessEvent() = default; - LoggedBweProbeSuccessEvent(int64_t timestamp_us, - int32_t id, - int32_t bitrate_bps) - : timestamp_us(timestamp_us), id(id), bitrate_bps(bitrate_bps) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - int32_t id; - int32_t bitrate_bps; -}; - -struct LoggedBweProbeFailureEvent { - LoggedBweProbeFailureEvent() = default; - LoggedBweProbeFailureEvent(int64_t timestamp_us, - int32_t id, - ProbeFailureReason failure_reason) - : timestamp_us(timestamp_us), id(id), failure_reason(failure_reason) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - int32_t id; - ProbeFailureReason failure_reason; -}; - -struct LoggedIceCandidatePairConfig { - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - IceCandidatePairConfigType type; - uint32_t candidate_pair_id; - IceCandidateType local_candidate_type; - IceCandidatePairProtocol local_relay_protocol; - IceCandidateNetworkType local_network_type; - IceCandidatePairAddressFamily local_address_family; - IceCandidateType remote_candidate_type; - IceCandidatePairAddressFamily remote_address_family; - IceCandidatePairProtocol candidate_pair_protocol; -}; - -struct LoggedIceCandidatePairEvent { - LoggedIceCandidatePairEvent() = default; - LoggedIceCandidatePairEvent(int64_t timestamp_us, - IceCandidatePairEventType type, - uint32_t candidate_pair_id, - uint32_t transaction_id) - : timestamp_us(timestamp_us), - type(type), - candidate_pair_id(candidate_pair_id), - transaction_id(transaction_id) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - IceCandidatePairEventType type; - uint32_t candidate_pair_id; - uint32_t transaction_id; -}; - -struct LoggedRtpPacket { - LoggedRtpPacket(uint64_t timestamp_us, - RTPHeader header, - size_t header_length, - size_t total_length) - : timestamp_us(timestamp_us), - header(header), - header_length(header_length), - total_length(total_length) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - // TODO(terelius): This allocates space for 15 CSRCs even if none are used. - RTPHeader header; - size_t header_length; - size_t total_length; -}; - -struct LoggedRtpPacketIncoming { - LoggedRtpPacketIncoming(uint64_t timestamp_us, - RTPHeader header, - size_t header_length, - size_t total_length) - : rtp(timestamp_us, header, header_length, total_length) {} - int64_t log_time_us() const { return rtp.timestamp_us; } - int64_t log_time_ms() const { return rtp.timestamp_us / 1000; } - - LoggedRtpPacket rtp; -}; - -struct LoggedRtpPacketOutgoing { - LoggedRtpPacketOutgoing(uint64_t timestamp_us, - RTPHeader header, - size_t header_length, - size_t total_length) - : rtp(timestamp_us, header, header_length, total_length) {} - int64_t log_time_us() const { return rtp.timestamp_us; } - int64_t log_time_ms() const { return rtp.timestamp_us / 1000; } - - LoggedRtpPacket rtp; -}; - -struct LoggedRtcpPacket { - LoggedRtcpPacket(uint64_t timestamp_us, - const uint8_t* packet, - size_t total_length); - LoggedRtcpPacket(uint64_t timestamp_us, const std::string& packet); - LoggedRtcpPacket(const LoggedRtcpPacket&); - ~LoggedRtcpPacket(); - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - std::vector raw_data; -}; - -struct LoggedRtcpPacketIncoming { - LoggedRtcpPacketIncoming(uint64_t timestamp_us, - const uint8_t* packet, - size_t total_length) - : rtcp(timestamp_us, packet, total_length) {} - LoggedRtcpPacketIncoming(uint64_t timestamp_us, const std::string& packet) - : rtcp(timestamp_us, packet) {} - - int64_t log_time_us() const { return rtcp.timestamp_us; } - int64_t log_time_ms() const { return rtcp.timestamp_us / 1000; } - - LoggedRtcpPacket rtcp; -}; - -struct LoggedRtcpPacketOutgoing { - LoggedRtcpPacketOutgoing(uint64_t timestamp_us, - const uint8_t* packet, - size_t total_length) - : rtcp(timestamp_us, packet, total_length) {} - LoggedRtcpPacketOutgoing(uint64_t timestamp_us, const std::string& packet) - : rtcp(timestamp_us, packet) {} - - int64_t log_time_us() const { return rtcp.timestamp_us; } - int64_t log_time_ms() const { return rtcp.timestamp_us / 1000; } - - LoggedRtcpPacket rtcp; -}; - -struct LoggedRtcpPacketReceiverReport { - LoggedRtcpPacketReceiverReport() = default; - LoggedRtcpPacketReceiverReport(int64_t timestamp_us, - const rtcp::ReceiverReport& rr) - : timestamp_us(timestamp_us), rr(rr) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - rtcp::ReceiverReport rr; -}; - -struct LoggedRtcpPacketSenderReport { - LoggedRtcpPacketSenderReport() = default; - LoggedRtcpPacketSenderReport(int64_t timestamp_us, - const rtcp::SenderReport& sr) - : timestamp_us(timestamp_us), sr(sr) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - rtcp::SenderReport sr; -}; - -struct LoggedRtcpPacketRemb { - LoggedRtcpPacketRemb() = default; - LoggedRtcpPacketRemb(int64_t timestamp_us, const rtcp::Remb& remb) - : timestamp_us(timestamp_us), remb(remb) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - rtcp::Remb remb; -}; - -struct LoggedRtcpPacketNack { - LoggedRtcpPacketNack() = default; - LoggedRtcpPacketNack(int64_t timestamp_us, const rtcp::Nack& nack) - : timestamp_us(timestamp_us), nack(nack) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - rtcp::Nack nack; -}; - -struct LoggedRtcpPacketTransportFeedback { - LoggedRtcpPacketTransportFeedback() = default; - LoggedRtcpPacketTransportFeedback( - int64_t timestamp_us, - const rtcp::TransportFeedback& transport_feedback) - : timestamp_us(timestamp_us), transport_feedback(transport_feedback) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - rtcp::TransportFeedback transport_feedback; -}; - -struct LoggedStartEvent { - explicit LoggedStartEvent(int64_t timestamp_us) - : LoggedStartEvent(timestamp_us, timestamp_us / 1000) {} - - LoggedStartEvent(int64_t timestamp_us, int64_t utc_start_time_ms) - : timestamp_us(timestamp_us), utc_start_time_ms(utc_start_time_ms) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - int64_t utc_start_time_ms; -}; - -struct LoggedStopEvent { - explicit LoggedStopEvent(int64_t timestamp_us) : timestamp_us(timestamp_us) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; -}; - -struct LoggedAudioRecvConfig { - LoggedAudioRecvConfig() = default; - LoggedAudioRecvConfig(int64_t timestamp_us, const rtclog::StreamConfig config) - : timestamp_us(timestamp_us), config(config) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - rtclog::StreamConfig config; -}; - -struct LoggedAudioSendConfig { - LoggedAudioSendConfig() = default; - LoggedAudioSendConfig(int64_t timestamp_us, const rtclog::StreamConfig config) - : timestamp_us(timestamp_us), config(config) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - rtclog::StreamConfig config; -}; - -struct LoggedVideoRecvConfig { - LoggedVideoRecvConfig() = default; - LoggedVideoRecvConfig(int64_t timestamp_us, const rtclog::StreamConfig config) - : timestamp_us(timestamp_us), config(config) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - rtclog::StreamConfig config; -}; - -struct LoggedVideoSendConfig { - LoggedVideoSendConfig() = default; - LoggedVideoSendConfig(int64_t timestamp_us, const rtclog::StreamConfig config) - : timestamp_us(timestamp_us), config(config) {} - - int64_t log_time_us() const { return timestamp_us; } - int64_t log_time_ms() const { return timestamp_us / 1000; } - - int64_t timestamp_us; - rtclog::StreamConfig config; -}; - template class PacketView;