/* * Copyright 2016 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 WEBRTC_API_STATS_RTCSTATS_OBJECTS_H_ #define WEBRTC_API_STATS_RTCSTATS_OBJECTS_H_ #include #include "webrtc/api/stats/rtcstats.h" namespace webrtc { // https://w3c.github.io/webrtc-pc/#idl-def-rtcdatachannelstate struct RTCDataChannelState { static const char* kConnecting; static const char* kOpen; static const char* kClosing; static const char* kClosed; }; // https://w3c.github.io/webrtc-stats/#dom-rtcstatsicecandidatepairstate struct RTCStatsIceCandidatePairState { static const char* kFrozen; static const char* kWaiting; static const char* kInProgress; static const char* kFailed; static const char* kSucceeded; static const char* kCancelled; }; // https://w3c.github.io/webrtc-pc/#rtcicecandidatetype-enum struct RTCIceCandidateType { static const char* kHost; static const char* kSrflx; static const char* kPrflx; static const char* kRelay; }; // https://w3c.github.io/webrtc-stats/#certificatestats-dict* class RTCCertificateStats final : public RTCStats { public: WEBRTC_RTCSTATS_DECL(); RTCCertificateStats(const std::string& id, int64_t timestamp_us); RTCCertificateStats(std::string&& id, int64_t timestamp_us); RTCCertificateStats(const RTCCertificateStats& other); ~RTCCertificateStats() override; RTCStatsMember fingerprint; RTCStatsMember fingerprint_algorithm; RTCStatsMember base64_certificate; RTCStatsMember issuer_certificate_id; }; // https://w3c.github.io/webrtc-stats/#codec-dict* // Tracking bug crbug.com/659117 // TODO(hbos): The present codec ID assignment is not sufficient to support // Unified Plan or unbundled connections in all cases. crbug.com/659117 class RTCCodecStats final : public RTCStats { public: WEBRTC_RTCSTATS_DECL(); RTCCodecStats(const std::string& id, int64_t timestamp_us); RTCCodecStats(std::string&& id, int64_t timestamp_us); RTCCodecStats(const RTCCodecStats& other); ~RTCCodecStats() override; RTCStatsMember payload_type; RTCStatsMember codec; RTCStatsMember clock_rate; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659117 RTCStatsMember channels; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659117 RTCStatsMember parameters; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659117 RTCStatsMember implementation; }; // https://w3c.github.io/webrtc-stats/#dcstats-dict* class RTCDataChannelStats final : public RTCStats { public: WEBRTC_RTCSTATS_DECL(); RTCDataChannelStats(const std::string& id, int64_t timestamp_us); RTCDataChannelStats(std::string&& id, int64_t timestamp_us); RTCDataChannelStats(const RTCDataChannelStats& other); ~RTCDataChannelStats() override; RTCStatsMember label; RTCStatsMember protocol; RTCStatsMember datachannelid; // TODO(hbos): Support enum types? "RTCStatsMember"? RTCStatsMember state; RTCStatsMember messages_sent; RTCStatsMember bytes_sent; RTCStatsMember messages_received; RTCStatsMember bytes_received; }; // https://w3c.github.io/webrtc-stats/#candidatepair-dict* // TODO(hbos): Tracking bug crbug.com/633550 class RTCIceCandidatePairStats final : public RTCStats { public: WEBRTC_RTCSTATS_DECL(); RTCIceCandidatePairStats(const std::string& id, int64_t timestamp_us); RTCIceCandidatePairStats(std::string&& id, int64_t timestamp_us); RTCIceCandidatePairStats(const RTCIceCandidatePairStats& other); ~RTCIceCandidatePairStats() override; RTCStatsMember transport_id; RTCStatsMember local_candidate_id; RTCStatsMember remote_candidate_id; // TODO(hbos): Support enum types? // "RTCStatsMember"? // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember state; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember priority; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember nominated; // TODO(hbos): Collected by |RTCStatsCollector| but different than the spec. // crbug.com/633550 RTCStatsMember writable; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember readable; RTCStatsMember bytes_sent; RTCStatsMember bytes_received; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember total_round_trip_time; // TODO(hbos): Collected by |RTCStatsCollector| but different than the spec. // crbug.com/633550 RTCStatsMember current_round_trip_time; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember available_outgoing_bitrate; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember available_incoming_bitrate; RTCStatsMember requests_received; RTCStatsMember requests_sent; RTCStatsMember responses_received; RTCStatsMember responses_sent; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember retransmissions_received; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember retransmissions_sent; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember consent_requests_received; RTCStatsMember consent_requests_sent; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember consent_responses_received; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550 RTCStatsMember consent_responses_sent; }; // https://w3c.github.io/webrtc-stats/#icecandidate-dict* // TODO(hbos): |RTCStatsCollector| only collects candidates that are part of // ice candidate pairs, but there could be candidates not paired with anything. // crbug.com/632723 class RTCIceCandidateStats : public RTCStats { public: WEBRTC_RTCSTATS_DECL(); RTCIceCandidateStats(const RTCIceCandidateStats& other); ~RTCIceCandidateStats() override; RTCStatsMember ip; RTCStatsMember port; RTCStatsMember protocol; // TODO(hbos): Support enum types? "RTCStatsMember"? RTCStatsMember candidate_type; RTCStatsMember priority; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/632723 RTCStatsMember url; protected: RTCIceCandidateStats(const std::string& id, int64_t timestamp_us); RTCIceCandidateStats(std::string&& id, int64_t timestamp_us); }; // In the spec both local and remote varieties are of type RTCIceCandidateStats. // But here we define them as subclasses of |RTCIceCandidateStats| because the // |kType| need to be different ("RTCStatsType type") in the local/remote case. // https://w3c.github.io/webrtc-stats/#rtcstatstype-str* class RTCLocalIceCandidateStats final : public RTCIceCandidateStats { public: static const char kType[]; RTCLocalIceCandidateStats(const std::string& id, int64_t timestamp_us); RTCLocalIceCandidateStats(std::string&& id, int64_t timestamp_us); const char* type() const override; }; class RTCRemoteIceCandidateStats final : public RTCIceCandidateStats { public: static const char kType[]; RTCRemoteIceCandidateStats(const std::string& id, int64_t timestamp_us); RTCRemoteIceCandidateStats(std::string&& id, int64_t timestamp_us); const char* type() const override; }; // https://w3c.github.io/webrtc-stats/#msstats-dict* // TODO(hbos): Tracking bug crbug.com/660827 class RTCMediaStreamStats final : public RTCStats { public: WEBRTC_RTCSTATS_DECL(); RTCMediaStreamStats(const std::string& id, int64_t timestamp_us); RTCMediaStreamStats(std::string&& id, int64_t timestamp_us); RTCMediaStreamStats(const RTCMediaStreamStats& other); ~RTCMediaStreamStats() override; RTCStatsMember stream_identifier; RTCStatsMember> track_ids; }; // https://w3c.github.io/webrtc-stats/#mststats-dict* // TODO(hbos): Tracking bug crbug.com/659137 class RTCMediaStreamTrackStats final : public RTCStats { public: WEBRTC_RTCSTATS_DECL(); RTCMediaStreamTrackStats(const std::string& id, int64_t timestamp_us); RTCMediaStreamTrackStats(std::string&& id, int64_t timestamp_us); RTCMediaStreamTrackStats(const RTCMediaStreamTrackStats& other); ~RTCMediaStreamTrackStats() override; RTCStatsMember track_identifier; RTCStatsMember remote_source; RTCStatsMember ended; // TODO(hbos): |RTCStatsCollector| does not return stats for detached tracks. // crbug.com/659137 RTCStatsMember detached; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659137 RTCStatsMember> ssrc_ids; // Video-only members RTCStatsMember frame_width; RTCStatsMember frame_height; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659137 RTCStatsMember frames_per_second; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659137 RTCStatsMember frames_sent; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659137 RTCStatsMember frames_received; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659137 RTCStatsMember frames_decoded; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659137 RTCStatsMember frames_dropped; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659137 RTCStatsMember frames_corrupted; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659137 RTCStatsMember partial_frames_lost; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659137 RTCStatsMember full_frames_lost; // Audio-only members RTCStatsMember audio_level; RTCStatsMember echo_return_loss; RTCStatsMember echo_return_loss_enhancement; }; // https://w3c.github.io/webrtc-stats/#pcstats-dict* class RTCPeerConnectionStats final : public RTCStats { public: WEBRTC_RTCSTATS_DECL(); RTCPeerConnectionStats(const std::string& id, int64_t timestamp_us); RTCPeerConnectionStats(std::string&& id, int64_t timestamp_us); RTCPeerConnectionStats(const RTCPeerConnectionStats& other); ~RTCPeerConnectionStats() override; RTCStatsMember data_channels_opened; RTCStatsMember data_channels_closed; }; // https://w3c.github.io/webrtc-stats/#streamstats-dict* // TODO(hbos): Tracking bug crbug.com/657854 class RTCRTPStreamStats : public RTCStats { public: WEBRTC_RTCSTATS_DECL(); RTCRTPStreamStats(const RTCRTPStreamStats& other); ~RTCRTPStreamStats() override; RTCStatsMember ssrc; // TODO(hbos): When the remote case is supported |RTCStatsCollector| needs to // set this. crbug.com/657855, 657856 RTCStatsMember associate_stats_id; // TODO(hbos): Remote case not supported by |RTCStatsCollector|. // crbug.com/657855, 657856 RTCStatsMember is_remote; // = false RTCStatsMember media_type; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/657854, 659137 RTCStatsMember media_track_id; RTCStatsMember transport_id; RTCStatsMember codec_id; // FIR and PLI counts are only defined for |media_type == "video"|. RTCStatsMember fir_count; RTCStatsMember pli_count; // TODO(hbos): NACK count should be collected by |RTCStatsCollector| for both // audio and video but is only defined in the "video" case. crbug.com/657856 RTCStatsMember nack_count; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/657854 // SLI count is only defined for |media_type == "video"|. RTCStatsMember sli_count; protected: RTCRTPStreamStats(const std::string& id, int64_t timestamp_us); RTCRTPStreamStats(std::string&& id, int64_t timestamp_us); }; // https://w3c.github.io/webrtc-stats/#inboundrtpstats-dict* // Tracking bug crbug.com/657855 // TODO(hbos): Support the remote case |is_remote = true|. crbug.com/657855 class RTCInboundRTPStreamStats final : public RTCRTPStreamStats { public: WEBRTC_RTCSTATS_DECL(); RTCInboundRTPStreamStats(const std::string& id, int64_t timestamp_us); RTCInboundRTPStreamStats(std::string&& id, int64_t timestamp_us); RTCInboundRTPStreamStats(const RTCInboundRTPStreamStats& other); ~RTCInboundRTPStreamStats() override; RTCStatsMember packets_received; RTCStatsMember bytes_received; RTCStatsMember packets_lost; // TODO(hbos): Not collected in the "video" case by |RTCStatsCollector|. // crbug.com/657855 RTCStatsMember jitter; RTCStatsMember fraction_lost; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/657855 RTCStatsMember packets_discarded; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/657855 RTCStatsMember packets_repaired; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/657855 RTCStatsMember burst_packets_lost; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/657855 RTCStatsMember burst_packets_discarded; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/657855 RTCStatsMember burst_loss_count; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/657855 RTCStatsMember burst_discard_count; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/657855 RTCStatsMember burst_loss_rate; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/657855 RTCStatsMember burst_discard_rate; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/657855 RTCStatsMember gap_loss_rate; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/657855 RTCStatsMember gap_discard_rate; }; // https://w3c.github.io/webrtc-stats/#outboundrtpstats-dict* // Tracking bug crbug.com/657856 // TODO(hbos): Support the remote case |is_remote = true|. crbug.com/657856 class RTCOutboundRTPStreamStats final : public RTCRTPStreamStats { public: WEBRTC_RTCSTATS_DECL(); RTCOutboundRTPStreamStats(const std::string& id, int64_t timestamp_us); RTCOutboundRTPStreamStats(std::string&& id, int64_t timestamp_us); RTCOutboundRTPStreamStats(const RTCOutboundRTPStreamStats& other); ~RTCOutboundRTPStreamStats() override; RTCStatsMember packets_sent; RTCStatsMember bytes_sent; // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/657856 RTCStatsMember target_bitrate; RTCStatsMember round_trip_time; }; // https://w3c.github.io/webrtc-stats/#transportstats-dict* class RTCTransportStats final : public RTCStats { public: WEBRTC_RTCSTATS_DECL(); RTCTransportStats(const std::string& id, int64_t timestamp_us); RTCTransportStats(std::string&& id, int64_t timestamp_us); RTCTransportStats(const RTCTransportStats& other); ~RTCTransportStats() override; RTCStatsMember bytes_sent; RTCStatsMember bytes_received; RTCStatsMember rtcp_transport_stats_id; RTCStatsMember active_connection; RTCStatsMember selected_candidate_pair_id; RTCStatsMember local_certificate_id; RTCStatsMember remote_certificate_id; }; } // namespace webrtc #endif // WEBRTC_API_STATS_RTCSTATS_OBJECTS_H_