| /* |
| * 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 <string> |
| #include <vector> |
| |
| #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<uint8_t> 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_ |