1*d9f75844SAndroid Build Coastguard Worker /* 2*d9f75844SAndroid Build Coastguard Worker * Copyright 2016 The WebRTC Project Authors. All rights reserved. 3*d9f75844SAndroid Build Coastguard Worker * 4*d9f75844SAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*d9f75844SAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*d9f75844SAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*d9f75844SAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*d9f75844SAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*d9f75844SAndroid Build Coastguard Worker */ 10*d9f75844SAndroid Build Coastguard Worker 11*d9f75844SAndroid Build Coastguard Worker #ifndef API_STATS_RTCSTATS_OBJECTS_H_ 12*d9f75844SAndroid Build Coastguard Worker #define API_STATS_RTCSTATS_OBJECTS_H_ 13*d9f75844SAndroid Build Coastguard Worker 14*d9f75844SAndroid Build Coastguard Worker #include <stdint.h> 15*d9f75844SAndroid Build Coastguard Worker 16*d9f75844SAndroid Build Coastguard Worker #include <map> 17*d9f75844SAndroid Build Coastguard Worker #include <memory> 18*d9f75844SAndroid Build Coastguard Worker #include <string> 19*d9f75844SAndroid Build Coastguard Worker #include <vector> 20*d9f75844SAndroid Build Coastguard Worker 21*d9f75844SAndroid Build Coastguard Worker #include "api/stats/rtc_stats.h" 22*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/system/rtc_export.h" 23*d9f75844SAndroid Build Coastguard Worker 24*d9f75844SAndroid Build Coastguard Worker namespace webrtc { 25*d9f75844SAndroid Build Coastguard Worker 26*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-pc/#idl-def-rtcdatachannelstate 27*d9f75844SAndroid Build Coastguard Worker struct RTCDataChannelState { 28*d9f75844SAndroid Build Coastguard Worker static const char* const kConnecting; 29*d9f75844SAndroid Build Coastguard Worker static const char* const kOpen; 30*d9f75844SAndroid Build Coastguard Worker static const char* const kClosing; 31*d9f75844SAndroid Build Coastguard Worker static const char* const kClosed; 32*d9f75844SAndroid Build Coastguard Worker }; 33*d9f75844SAndroid Build Coastguard Worker 34*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#dom-rtcstatsicecandidatepairstate 35*d9f75844SAndroid Build Coastguard Worker struct RTCStatsIceCandidatePairState { 36*d9f75844SAndroid Build Coastguard Worker static const char* const kFrozen; 37*d9f75844SAndroid Build Coastguard Worker static const char* const kWaiting; 38*d9f75844SAndroid Build Coastguard Worker static const char* const kInProgress; 39*d9f75844SAndroid Build Coastguard Worker static const char* const kFailed; 40*d9f75844SAndroid Build Coastguard Worker static const char* const kSucceeded; 41*d9f75844SAndroid Build Coastguard Worker }; 42*d9f75844SAndroid Build Coastguard Worker 43*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-pc/#rtcicecandidatetype-enum 44*d9f75844SAndroid Build Coastguard Worker struct RTCIceCandidateType { 45*d9f75844SAndroid Build Coastguard Worker static const char* const kHost; 46*d9f75844SAndroid Build Coastguard Worker static const char* const kSrflx; 47*d9f75844SAndroid Build Coastguard Worker static const char* const kPrflx; 48*d9f75844SAndroid Build Coastguard Worker static const char* const kRelay; 49*d9f75844SAndroid Build Coastguard Worker }; 50*d9f75844SAndroid Build Coastguard Worker 51*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-pc/#idl-def-rtcdtlstransportstate 52*d9f75844SAndroid Build Coastguard Worker struct RTCDtlsTransportState { 53*d9f75844SAndroid Build Coastguard Worker static const char* const kNew; 54*d9f75844SAndroid Build Coastguard Worker static const char* const kConnecting; 55*d9f75844SAndroid Build Coastguard Worker static const char* const kConnected; 56*d9f75844SAndroid Build Coastguard Worker static const char* const kClosed; 57*d9f75844SAndroid Build Coastguard Worker static const char* const kFailed; 58*d9f75844SAndroid Build Coastguard Worker }; 59*d9f75844SAndroid Build Coastguard Worker 60*d9f75844SAndroid Build Coastguard Worker // `RTCMediaStreamTrackStats::kind` is not an enum in the spec but the only 61*d9f75844SAndroid Build Coastguard Worker // valid values are "audio" and "video". 62*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamtrackstats-kind 63*d9f75844SAndroid Build Coastguard Worker struct RTCMediaStreamTrackKind { 64*d9f75844SAndroid Build Coastguard Worker static const char* const kAudio; 65*d9f75844SAndroid Build Coastguard Worker static const char* const kVideo; 66*d9f75844SAndroid Build Coastguard Worker }; 67*d9f75844SAndroid Build Coastguard Worker 68*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#dom-rtcnetworktype 69*d9f75844SAndroid Build Coastguard Worker struct RTCNetworkType { 70*d9f75844SAndroid Build Coastguard Worker static const char* const kBluetooth; 71*d9f75844SAndroid Build Coastguard Worker static const char* const kCellular; 72*d9f75844SAndroid Build Coastguard Worker static const char* const kEthernet; 73*d9f75844SAndroid Build Coastguard Worker static const char* const kWifi; 74*d9f75844SAndroid Build Coastguard Worker static const char* const kWimax; 75*d9f75844SAndroid Build Coastguard Worker static const char* const kVpn; 76*d9f75844SAndroid Build Coastguard Worker static const char* const kUnknown; 77*d9f75844SAndroid Build Coastguard Worker }; 78*d9f75844SAndroid Build Coastguard Worker 79*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#dom-rtcqualitylimitationreason 80*d9f75844SAndroid Build Coastguard Worker struct RTCQualityLimitationReason { 81*d9f75844SAndroid Build Coastguard Worker static const char* const kNone; 82*d9f75844SAndroid Build Coastguard Worker static const char* const kCpu; 83*d9f75844SAndroid Build Coastguard Worker static const char* const kBandwidth; 84*d9f75844SAndroid Build Coastguard Worker static const char* const kOther; 85*d9f75844SAndroid Build Coastguard Worker }; 86*d9f75844SAndroid Build Coastguard Worker 87*d9f75844SAndroid Build Coastguard Worker // https://webrtc.org/experiments/rtp-hdrext/video-content-type/ 88*d9f75844SAndroid Build Coastguard Worker struct RTCContentType { 89*d9f75844SAndroid Build Coastguard Worker static const char* const kUnspecified; 90*d9f75844SAndroid Build Coastguard Worker static const char* const kScreenshare; 91*d9f75844SAndroid Build Coastguard Worker }; 92*d9f75844SAndroid Build Coastguard Worker 93*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#dom-rtcdtlsrole 94*d9f75844SAndroid Build Coastguard Worker struct RTCDtlsRole { 95*d9f75844SAndroid Build Coastguard Worker static const char* const kUnknown; 96*d9f75844SAndroid Build Coastguard Worker static const char* const kClient; 97*d9f75844SAndroid Build Coastguard Worker static const char* const kServer; 98*d9f75844SAndroid Build Coastguard Worker }; 99*d9f75844SAndroid Build Coastguard Worker 100*d9f75844SAndroid Build Coastguard Worker // https://www.w3.org/TR/webrtc/#rtcicerole 101*d9f75844SAndroid Build Coastguard Worker struct RTCIceRole { 102*d9f75844SAndroid Build Coastguard Worker static const char* const kUnknown; 103*d9f75844SAndroid Build Coastguard Worker static const char* const kControlled; 104*d9f75844SAndroid Build Coastguard Worker static const char* const kControlling; 105*d9f75844SAndroid Build Coastguard Worker }; 106*d9f75844SAndroid Build Coastguard Worker 107*d9f75844SAndroid Build Coastguard Worker // https://www.w3.org/TR/webrtc/#dom-rtcicetransportstate 108*d9f75844SAndroid Build Coastguard Worker struct RTCIceTransportState { 109*d9f75844SAndroid Build Coastguard Worker static const char* const kNew; 110*d9f75844SAndroid Build Coastguard Worker static const char* const kChecking; 111*d9f75844SAndroid Build Coastguard Worker static const char* const kConnected; 112*d9f75844SAndroid Build Coastguard Worker static const char* const kCompleted; 113*d9f75844SAndroid Build Coastguard Worker static const char* const kDisconnected; 114*d9f75844SAndroid Build Coastguard Worker static const char* const kFailed; 115*d9f75844SAndroid Build Coastguard Worker static const char* const kClosed; 116*d9f75844SAndroid Build Coastguard Worker }; 117*d9f75844SAndroid Build Coastguard Worker 118*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#certificatestats-dict* 119*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT RTCCertificateStats final : public RTCStats { 120*d9f75844SAndroid Build Coastguard Worker public: 121*d9f75844SAndroid Build Coastguard Worker WEBRTC_RTCSTATS_DECL(); 122*d9f75844SAndroid Build Coastguard Worker 123*d9f75844SAndroid Build Coastguard Worker RTCCertificateStats(const std::string& id, int64_t timestamp_us); 124*d9f75844SAndroid Build Coastguard Worker RTCCertificateStats(std::string&& id, int64_t timestamp_us); 125*d9f75844SAndroid Build Coastguard Worker RTCCertificateStats(const RTCCertificateStats& other); 126*d9f75844SAndroid Build Coastguard Worker ~RTCCertificateStats() override; 127*d9f75844SAndroid Build Coastguard Worker 128*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> fingerprint; 129*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> fingerprint_algorithm; 130*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> base64_certificate; 131*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> issuer_certificate_id; 132*d9f75844SAndroid Build Coastguard Worker }; 133*d9f75844SAndroid Build Coastguard Worker 134*d9f75844SAndroid Build Coastguard Worker // Non standard extension mapping to rtc::AdapterType 135*d9f75844SAndroid Build Coastguard Worker struct RTCNetworkAdapterType { 136*d9f75844SAndroid Build Coastguard Worker static constexpr char kUnknown[] = "unknown"; 137*d9f75844SAndroid Build Coastguard Worker static constexpr char kEthernet[] = "ethernet"; 138*d9f75844SAndroid Build Coastguard Worker static constexpr char kWifi[] = "wifi"; 139*d9f75844SAndroid Build Coastguard Worker static constexpr char kCellular[] = "cellular"; 140*d9f75844SAndroid Build Coastguard Worker static constexpr char kLoopback[] = "loopback"; 141*d9f75844SAndroid Build Coastguard Worker static constexpr char kAny[] = "any"; 142*d9f75844SAndroid Build Coastguard Worker static constexpr char kCellular2g[] = "cellular2g"; 143*d9f75844SAndroid Build Coastguard Worker static constexpr char kCellular3g[] = "cellular3g"; 144*d9f75844SAndroid Build Coastguard Worker static constexpr char kCellular4g[] = "cellular4g"; 145*d9f75844SAndroid Build Coastguard Worker static constexpr char kCellular5g[] = "cellular5g"; 146*d9f75844SAndroid Build Coastguard Worker }; 147*d9f75844SAndroid Build Coastguard Worker 148*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#codec-dict* 149*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT RTCCodecStats final : public RTCStats { 150*d9f75844SAndroid Build Coastguard Worker public: 151*d9f75844SAndroid Build Coastguard Worker WEBRTC_RTCSTATS_DECL(); 152*d9f75844SAndroid Build Coastguard Worker 153*d9f75844SAndroid Build Coastguard Worker RTCCodecStats(const std::string& id, int64_t timestamp_us); 154*d9f75844SAndroid Build Coastguard Worker RTCCodecStats(std::string&& id, int64_t timestamp_us); 155*d9f75844SAndroid Build Coastguard Worker RTCCodecStats(const RTCCodecStats& other); 156*d9f75844SAndroid Build Coastguard Worker ~RTCCodecStats() override; 157*d9f75844SAndroid Build Coastguard Worker 158*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> transport_id; 159*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> payload_type; 160*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> mime_type; 161*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> clock_rate; 162*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> channels; 163*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> sdp_fmtp_line; 164*d9f75844SAndroid Build Coastguard Worker }; 165*d9f75844SAndroid Build Coastguard Worker 166*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#dcstats-dict* 167*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT RTCDataChannelStats final : public RTCStats { 168*d9f75844SAndroid Build Coastguard Worker public: 169*d9f75844SAndroid Build Coastguard Worker WEBRTC_RTCSTATS_DECL(); 170*d9f75844SAndroid Build Coastguard Worker 171*d9f75844SAndroid Build Coastguard Worker RTCDataChannelStats(const std::string& id, int64_t timestamp_us); 172*d9f75844SAndroid Build Coastguard Worker RTCDataChannelStats(std::string&& id, int64_t timestamp_us); 173*d9f75844SAndroid Build Coastguard Worker RTCDataChannelStats(const RTCDataChannelStats& other); 174*d9f75844SAndroid Build Coastguard Worker ~RTCDataChannelStats() override; 175*d9f75844SAndroid Build Coastguard Worker 176*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> label; 177*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> protocol; 178*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<int32_t> data_channel_identifier; 179*d9f75844SAndroid Build Coastguard Worker // Enum type RTCDataChannelState. 180*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> state; 181*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> messages_sent; 182*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> bytes_sent; 183*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> messages_received; 184*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> bytes_received; 185*d9f75844SAndroid Build Coastguard Worker }; 186*d9f75844SAndroid Build Coastguard Worker 187*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#candidatepair-dict* 188*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT RTCIceCandidatePairStats final : public RTCStats { 189*d9f75844SAndroid Build Coastguard Worker public: 190*d9f75844SAndroid Build Coastguard Worker WEBRTC_RTCSTATS_DECL(); 191*d9f75844SAndroid Build Coastguard Worker 192*d9f75844SAndroid Build Coastguard Worker RTCIceCandidatePairStats(const std::string& id, int64_t timestamp_us); 193*d9f75844SAndroid Build Coastguard Worker RTCIceCandidatePairStats(std::string&& id, int64_t timestamp_us); 194*d9f75844SAndroid Build Coastguard Worker RTCIceCandidatePairStats(const RTCIceCandidatePairStats& other); 195*d9f75844SAndroid Build Coastguard Worker ~RTCIceCandidatePairStats() override; 196*d9f75844SAndroid Build Coastguard Worker 197*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> transport_id; 198*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> local_candidate_id; 199*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> remote_candidate_id; 200*d9f75844SAndroid Build Coastguard Worker // Enum type RTCStatsIceCandidatePairState. 201*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> state; 202*d9f75844SAndroid Build Coastguard Worker // Obsolete: priority 203*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> priority; 204*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<bool> nominated; 205*d9f75844SAndroid Build Coastguard Worker // `writable` does not exist in the spec and old comments suggest it used to 206*d9f75844SAndroid Build Coastguard Worker // exist but was incorrectly implemented. 207*d9f75844SAndroid Build Coastguard Worker // TODO(https://crbug.com/webrtc/14171): Standardize and/or modify 208*d9f75844SAndroid Build Coastguard Worker // implementation. 209*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<bool> writable; 210*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> packets_sent; 211*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> packets_received; 212*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> bytes_sent; 213*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> bytes_received; 214*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> total_round_trip_time; 215*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> current_round_trip_time; 216*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> available_outgoing_bitrate; 217*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> available_incoming_bitrate; 218*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> requests_received; 219*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> requests_sent; 220*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> responses_received; 221*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> responses_sent; 222*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> consent_requests_sent; 223*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> packets_discarded_on_send; 224*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> bytes_discarded_on_send; 225*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> last_packet_received_timestamp; 226*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> last_packet_sent_timestamp; 227*d9f75844SAndroid Build Coastguard Worker }; 228*d9f75844SAndroid Build Coastguard Worker 229*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#icecandidate-dict* 230*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT RTCIceCandidateStats : public RTCStats { 231*d9f75844SAndroid Build Coastguard Worker public: 232*d9f75844SAndroid Build Coastguard Worker WEBRTC_RTCSTATS_DECL(); 233*d9f75844SAndroid Build Coastguard Worker 234*d9f75844SAndroid Build Coastguard Worker RTCIceCandidateStats(const RTCIceCandidateStats& other); 235*d9f75844SAndroid Build Coastguard Worker ~RTCIceCandidateStats() override; 236*d9f75844SAndroid Build Coastguard Worker 237*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> transport_id; 238*d9f75844SAndroid Build Coastguard Worker // Obsolete: is_remote 239*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<bool> is_remote; 240*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> network_type; 241*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> ip; 242*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> address; 243*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<int32_t> port; 244*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> protocol; 245*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> relay_protocol; 246*d9f75844SAndroid Build Coastguard Worker // Enum type RTCIceCandidateType. 247*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> candidate_type; 248*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<int32_t> priority; 249*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> url; 250*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> foundation; 251*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> related_address; 252*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<int32_t> related_port; 253*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> username_fragment; 254*d9f75844SAndroid Build Coastguard Worker // Enum type RTCIceTcpCandidateType. 255*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> tcp_type; 256*d9f75844SAndroid Build Coastguard Worker 257*d9f75844SAndroid Build Coastguard Worker RTCNonStandardStatsMember<bool> vpn; 258*d9f75844SAndroid Build Coastguard Worker RTCNonStandardStatsMember<std::string> network_adapter_type; 259*d9f75844SAndroid Build Coastguard Worker 260*d9f75844SAndroid Build Coastguard Worker protected: 261*d9f75844SAndroid Build Coastguard Worker RTCIceCandidateStats(const std::string& id, 262*d9f75844SAndroid Build Coastguard Worker int64_t timestamp_us, 263*d9f75844SAndroid Build Coastguard Worker bool is_remote); 264*d9f75844SAndroid Build Coastguard Worker RTCIceCandidateStats(std::string&& id, int64_t timestamp_us, bool is_remote); 265*d9f75844SAndroid Build Coastguard Worker }; 266*d9f75844SAndroid Build Coastguard Worker 267*d9f75844SAndroid Build Coastguard Worker // In the spec both local and remote varieties are of type RTCIceCandidateStats. 268*d9f75844SAndroid Build Coastguard Worker // But here we define them as subclasses of `RTCIceCandidateStats` because the 269*d9f75844SAndroid Build Coastguard Worker // `kType` need to be different ("RTCStatsType type") in the local/remote case. 270*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#rtcstatstype-str* 271*d9f75844SAndroid Build Coastguard Worker // This forces us to have to override copy() and type(). 272*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT RTCLocalIceCandidateStats final : public RTCIceCandidateStats { 273*d9f75844SAndroid Build Coastguard Worker public: 274*d9f75844SAndroid Build Coastguard Worker static const char kType[]; 275*d9f75844SAndroid Build Coastguard Worker RTCLocalIceCandidateStats(const std::string& id, int64_t timestamp_us); 276*d9f75844SAndroid Build Coastguard Worker RTCLocalIceCandidateStats(std::string&& id, int64_t timestamp_us); 277*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<RTCStats> copy() const override; 278*d9f75844SAndroid Build Coastguard Worker const char* type() const override; 279*d9f75844SAndroid Build Coastguard Worker }; 280*d9f75844SAndroid Build Coastguard Worker 281*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT RTCRemoteIceCandidateStats final 282*d9f75844SAndroid Build Coastguard Worker : public RTCIceCandidateStats { 283*d9f75844SAndroid Build Coastguard Worker public: 284*d9f75844SAndroid Build Coastguard Worker static const char kType[]; 285*d9f75844SAndroid Build Coastguard Worker RTCRemoteIceCandidateStats(const std::string& id, int64_t timestamp_us); 286*d9f75844SAndroid Build Coastguard Worker RTCRemoteIceCandidateStats(std::string&& id, int64_t timestamp_us); 287*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<RTCStats> copy() const override; 288*d9f75844SAndroid Build Coastguard Worker const char* type() const override; 289*d9f75844SAndroid Build Coastguard Worker }; 290*d9f75844SAndroid Build Coastguard Worker 291*d9f75844SAndroid Build Coastguard Worker // TODO(https://crbug.com/webrtc/14419): Delete this class, it's deprecated. 292*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT DEPRECATED_RTCMediaStreamStats final : public RTCStats { 293*d9f75844SAndroid Build Coastguard Worker public: 294*d9f75844SAndroid Build Coastguard Worker WEBRTC_RTCSTATS_DECL(); 295*d9f75844SAndroid Build Coastguard Worker 296*d9f75844SAndroid Build Coastguard Worker DEPRECATED_RTCMediaStreamStats(const std::string& id, int64_t timestamp_us); 297*d9f75844SAndroid Build Coastguard Worker DEPRECATED_RTCMediaStreamStats(std::string&& id, int64_t timestamp_us); 298*d9f75844SAndroid Build Coastguard Worker DEPRECATED_RTCMediaStreamStats(const DEPRECATED_RTCMediaStreamStats& other); 299*d9f75844SAndroid Build Coastguard Worker ~DEPRECATED_RTCMediaStreamStats() override; 300*d9f75844SAndroid Build Coastguard Worker 301*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> stream_identifier; 302*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::vector<std::string>> track_ids; 303*d9f75844SAndroid Build Coastguard Worker }; 304*d9f75844SAndroid Build Coastguard Worker using RTCMediaStreamStats [[deprecated("bugs.webrtc.org/14419")]] = 305*d9f75844SAndroid Build Coastguard Worker DEPRECATED_RTCMediaStreamStats; 306*d9f75844SAndroid Build Coastguard Worker 307*d9f75844SAndroid Build Coastguard Worker // TODO(https://crbug.com/webrtc/14175): Delete this class, it's deprecated. 308*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT DEPRECATED_RTCMediaStreamTrackStats final : public RTCStats { 309*d9f75844SAndroid Build Coastguard Worker public: 310*d9f75844SAndroid Build Coastguard Worker WEBRTC_RTCSTATS_DECL(); 311*d9f75844SAndroid Build Coastguard Worker 312*d9f75844SAndroid Build Coastguard Worker DEPRECATED_RTCMediaStreamTrackStats(const std::string& id, 313*d9f75844SAndroid Build Coastguard Worker int64_t timestamp_us, 314*d9f75844SAndroid Build Coastguard Worker const char* kind); 315*d9f75844SAndroid Build Coastguard Worker DEPRECATED_RTCMediaStreamTrackStats(std::string&& id, 316*d9f75844SAndroid Build Coastguard Worker int64_t timestamp_us, 317*d9f75844SAndroid Build Coastguard Worker const char* kind); 318*d9f75844SAndroid Build Coastguard Worker DEPRECATED_RTCMediaStreamTrackStats( 319*d9f75844SAndroid Build Coastguard Worker const DEPRECATED_RTCMediaStreamTrackStats& other); 320*d9f75844SAndroid Build Coastguard Worker ~DEPRECATED_RTCMediaStreamTrackStats() override; 321*d9f75844SAndroid Build Coastguard Worker 322*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> track_identifier; 323*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> media_source_id; 324*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<bool> remote_source; 325*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<bool> ended; 326*d9f75844SAndroid Build Coastguard Worker // TODO(https://crbug.com/webrtc/14173): Remove this obsolete metric. 327*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<bool> detached; 328*d9f75844SAndroid Build Coastguard Worker // Enum type RTCMediaStreamTrackKind. 329*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> kind; 330*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> jitter_buffer_delay; 331*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> jitter_buffer_emitted_count; 332*d9f75844SAndroid Build Coastguard Worker // Video-only members 333*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> frame_width; 334*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> frame_height; 335*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> frames_sent; 336*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> huge_frames_sent; 337*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> frames_received; 338*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> frames_decoded; 339*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> frames_dropped; 340*d9f75844SAndroid Build Coastguard Worker // Audio-only members 341*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> audio_level; // Receive-only 342*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> total_audio_energy; // Receive-only 343*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> echo_return_loss; 344*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> echo_return_loss_enhancement; 345*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> total_samples_received; 346*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> total_samples_duration; // Receive-only 347*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> concealed_samples; 348*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> silent_concealed_samples; 349*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> concealment_events; 350*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> inserted_samples_for_deceleration; 351*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> removed_samples_for_acceleration; 352*d9f75844SAndroid Build Coastguard Worker }; 353*d9f75844SAndroid Build Coastguard Worker using RTCMediaStreamTrackStats [[deprecated("bugs.webrtc.org/14175")]] = 354*d9f75844SAndroid Build Coastguard Worker DEPRECATED_RTCMediaStreamTrackStats; 355*d9f75844SAndroid Build Coastguard Worker 356*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#pcstats-dict* 357*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT RTCPeerConnectionStats final : public RTCStats { 358*d9f75844SAndroid Build Coastguard Worker public: 359*d9f75844SAndroid Build Coastguard Worker WEBRTC_RTCSTATS_DECL(); 360*d9f75844SAndroid Build Coastguard Worker 361*d9f75844SAndroid Build Coastguard Worker RTCPeerConnectionStats(const std::string& id, int64_t timestamp_us); 362*d9f75844SAndroid Build Coastguard Worker RTCPeerConnectionStats(std::string&& id, int64_t timestamp_us); 363*d9f75844SAndroid Build Coastguard Worker RTCPeerConnectionStats(const RTCPeerConnectionStats& other); 364*d9f75844SAndroid Build Coastguard Worker ~RTCPeerConnectionStats() override; 365*d9f75844SAndroid Build Coastguard Worker 366*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> data_channels_opened; 367*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> data_channels_closed; 368*d9f75844SAndroid Build Coastguard Worker }; 369*d9f75844SAndroid Build Coastguard Worker 370*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#streamstats-dict* 371*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT RTCRTPStreamStats : public RTCStats { 372*d9f75844SAndroid Build Coastguard Worker public: 373*d9f75844SAndroid Build Coastguard Worker WEBRTC_RTCSTATS_DECL(); 374*d9f75844SAndroid Build Coastguard Worker 375*d9f75844SAndroid Build Coastguard Worker RTCRTPStreamStats(const RTCRTPStreamStats& other); 376*d9f75844SAndroid Build Coastguard Worker ~RTCRTPStreamStats() override; 377*d9f75844SAndroid Build Coastguard Worker 378*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> ssrc; 379*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> kind; 380*d9f75844SAndroid Build Coastguard Worker // Obsolete: track_id 381*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> track_id; 382*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> transport_id; 383*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> codec_id; 384*d9f75844SAndroid Build Coastguard Worker 385*d9f75844SAndroid Build Coastguard Worker // Obsolete 386*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> media_type; // renamed to kind. 387*d9f75844SAndroid Build Coastguard Worker 388*d9f75844SAndroid Build Coastguard Worker protected: 389*d9f75844SAndroid Build Coastguard Worker RTCRTPStreamStats(const std::string& id, int64_t timestamp_us); 390*d9f75844SAndroid Build Coastguard Worker RTCRTPStreamStats(std::string&& id, int64_t timestamp_us); 391*d9f75844SAndroid Build Coastguard Worker }; 392*d9f75844SAndroid Build Coastguard Worker 393*d9f75844SAndroid Build Coastguard Worker // https://www.w3.org/TR/webrtc-stats/#receivedrtpstats-dict* 394*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT RTCReceivedRtpStreamStats : public RTCRTPStreamStats { 395*d9f75844SAndroid Build Coastguard Worker public: 396*d9f75844SAndroid Build Coastguard Worker WEBRTC_RTCSTATS_DECL(); 397*d9f75844SAndroid Build Coastguard Worker 398*d9f75844SAndroid Build Coastguard Worker RTCReceivedRtpStreamStats(const RTCReceivedRtpStreamStats& other); 399*d9f75844SAndroid Build Coastguard Worker ~RTCReceivedRtpStreamStats() override; 400*d9f75844SAndroid Build Coastguard Worker 401*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> jitter; 402*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<int32_t> packets_lost; // Signed per RFC 3550 403*d9f75844SAndroid Build Coastguard Worker 404*d9f75844SAndroid Build Coastguard Worker protected: 405*d9f75844SAndroid Build Coastguard Worker RTCReceivedRtpStreamStats(const std::string&& id, int64_t timestamp_us); 406*d9f75844SAndroid Build Coastguard Worker RTCReceivedRtpStreamStats(std::string&& id, int64_t timestamp_us); 407*d9f75844SAndroid Build Coastguard Worker }; 408*d9f75844SAndroid Build Coastguard Worker 409*d9f75844SAndroid Build Coastguard Worker // https://www.w3.org/TR/webrtc-stats/#sentrtpstats-dict* 410*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT RTCSentRtpStreamStats : public RTCRTPStreamStats { 411*d9f75844SAndroid Build Coastguard Worker public: 412*d9f75844SAndroid Build Coastguard Worker WEBRTC_RTCSTATS_DECL(); 413*d9f75844SAndroid Build Coastguard Worker 414*d9f75844SAndroid Build Coastguard Worker RTCSentRtpStreamStats(const RTCSentRtpStreamStats& other); 415*d9f75844SAndroid Build Coastguard Worker ~RTCSentRtpStreamStats() override; 416*d9f75844SAndroid Build Coastguard Worker 417*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> packets_sent; 418*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> bytes_sent; 419*d9f75844SAndroid Build Coastguard Worker 420*d9f75844SAndroid Build Coastguard Worker protected: 421*d9f75844SAndroid Build Coastguard Worker RTCSentRtpStreamStats(const std::string&& id, int64_t timestamp_us); 422*d9f75844SAndroid Build Coastguard Worker RTCSentRtpStreamStats(std::string&& id, int64_t timestamp_us); 423*d9f75844SAndroid Build Coastguard Worker }; 424*d9f75844SAndroid Build Coastguard Worker 425*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#inboundrtpstats-dict* 426*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT RTCInboundRTPStreamStats final 427*d9f75844SAndroid Build Coastguard Worker : public RTCReceivedRtpStreamStats { 428*d9f75844SAndroid Build Coastguard Worker public: 429*d9f75844SAndroid Build Coastguard Worker WEBRTC_RTCSTATS_DECL(); 430*d9f75844SAndroid Build Coastguard Worker 431*d9f75844SAndroid Build Coastguard Worker RTCInboundRTPStreamStats(const std::string& id, int64_t timestamp_us); 432*d9f75844SAndroid Build Coastguard Worker RTCInboundRTPStreamStats(std::string&& id, int64_t timestamp_us); 433*d9f75844SAndroid Build Coastguard Worker RTCInboundRTPStreamStats(const RTCInboundRTPStreamStats& other); 434*d9f75844SAndroid Build Coastguard Worker ~RTCInboundRTPStreamStats() override; 435*d9f75844SAndroid Build Coastguard Worker 436*d9f75844SAndroid Build Coastguard Worker // TODO(https://crbug.com/webrtc/14174): Implement trackIdentifier and kind. 437*d9f75844SAndroid Build Coastguard Worker 438*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> track_identifier; 439*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> mid; 440*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> remote_id; 441*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> packets_received; 442*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> packets_discarded; 443*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> fec_packets_received; 444*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> fec_packets_discarded; 445*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> bytes_received; 446*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> header_bytes_received; 447*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> last_packet_received_timestamp; 448*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> jitter_buffer_delay; 449*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> jitter_buffer_target_delay; 450*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> jitter_buffer_minimum_delay; 451*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> jitter_buffer_emitted_count; 452*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> total_samples_received; 453*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> concealed_samples; 454*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> silent_concealed_samples; 455*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> concealment_events; 456*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> inserted_samples_for_deceleration; 457*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> removed_samples_for_acceleration; 458*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> audio_level; 459*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> total_audio_energy; 460*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> total_samples_duration; 461*d9f75844SAndroid Build Coastguard Worker // Stats below are only implemented or defined for video. 462*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<int32_t> frames_received; 463*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> frame_width; 464*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> frame_height; 465*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> frames_per_second; 466*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> frames_decoded; 467*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> key_frames_decoded; 468*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> frames_dropped; 469*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> total_decode_time; 470*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> total_processing_delay; 471*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> total_assembly_time; 472*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> frames_assembled_from_multiple_packets; 473*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> total_inter_frame_delay; 474*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> total_squared_inter_frame_delay; 475*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> pause_count; 476*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> total_pauses_duration; 477*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> freeze_count; 478*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> total_freezes_duration; 479*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-provisional-stats/#dom-rtcinboundrtpstreamstats-contenttype 480*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> content_type; 481*d9f75844SAndroid Build Coastguard Worker // Only populated if audio/video sync is enabled. 482*d9f75844SAndroid Build Coastguard Worker // TODO(https://crbug.com/webrtc/14177): Expose even if A/V sync is off? 483*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> estimated_playout_timestamp; 484*d9f75844SAndroid Build Coastguard Worker // Only implemented for video. 485*d9f75844SAndroid Build Coastguard Worker // TODO(https://crbug.com/webrtc/14178): Also implement for audio. 486*d9f75844SAndroid Build Coastguard Worker RTCRestrictedStatsMember<std::string, 487*d9f75844SAndroid Build Coastguard Worker StatExposureCriteria::kHardwareCapability> 488*d9f75844SAndroid Build Coastguard Worker decoder_implementation; 489*d9f75844SAndroid Build Coastguard Worker // FIR and PLI counts are only defined for |kind == "video"|. 490*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> fir_count; 491*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> pli_count; 492*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> nack_count; 493*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> qp_sum; 494*d9f75844SAndroid Build Coastguard Worker // This is a remnant of the legacy getStats() API. When the "video-timing" 495*d9f75844SAndroid Build Coastguard Worker // header extension is used, 496*d9f75844SAndroid Build Coastguard Worker // https://webrtc.github.io/webrtc-org/experiments/rtp-hdrext/video-timing/, 497*d9f75844SAndroid Build Coastguard Worker // `googTimingFrameInfo` is exposed with the value of 498*d9f75844SAndroid Build Coastguard Worker // TimingFrameInfo::ToString(). 499*d9f75844SAndroid Build Coastguard Worker // TODO(https://crbug.com/webrtc/14586): Unship or standardize this metric. 500*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> goog_timing_frame_info; 501*d9f75844SAndroid Build Coastguard Worker RTCRestrictedStatsMember<bool, StatExposureCriteria::kHardwareCapability> 502*d9f75844SAndroid Build Coastguard Worker power_efficient_decoder; 503*d9f75844SAndroid Build Coastguard Worker // Non-standard audio metrics. 504*d9f75844SAndroid Build Coastguard Worker RTCNonStandardStatsMember<uint64_t> jitter_buffer_flushes; 505*d9f75844SAndroid Build Coastguard Worker RTCNonStandardStatsMember<uint64_t> delayed_packet_outage_samples; 506*d9f75844SAndroid Build Coastguard Worker RTCNonStandardStatsMember<double> relative_packet_arrival_delay; 507*d9f75844SAndroid Build Coastguard Worker RTCNonStandardStatsMember<uint32_t> interruption_count; 508*d9f75844SAndroid Build Coastguard Worker RTCNonStandardStatsMember<double> total_interruption_duration; 509*d9f75844SAndroid Build Coastguard Worker 510*d9f75844SAndroid Build Coastguard Worker // The former googMinPlayoutDelayMs (in seconds). 511*d9f75844SAndroid Build Coastguard Worker RTCNonStandardStatsMember<double> min_playout_delay; 512*d9f75844SAndroid Build Coastguard Worker }; 513*d9f75844SAndroid Build Coastguard Worker 514*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#outboundrtpstats-dict* 515*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT RTCOutboundRTPStreamStats final : public RTCRTPStreamStats { 516*d9f75844SAndroid Build Coastguard Worker public: 517*d9f75844SAndroid Build Coastguard Worker WEBRTC_RTCSTATS_DECL(); 518*d9f75844SAndroid Build Coastguard Worker 519*d9f75844SAndroid Build Coastguard Worker RTCOutboundRTPStreamStats(const std::string& id, int64_t timestamp_us); 520*d9f75844SAndroid Build Coastguard Worker RTCOutboundRTPStreamStats(std::string&& id, int64_t timestamp_us); 521*d9f75844SAndroid Build Coastguard Worker RTCOutboundRTPStreamStats(const RTCOutboundRTPStreamStats& other); 522*d9f75844SAndroid Build Coastguard Worker ~RTCOutboundRTPStreamStats() override; 523*d9f75844SAndroid Build Coastguard Worker 524*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> media_source_id; 525*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> remote_id; 526*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> mid; 527*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> rid; 528*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> packets_sent; 529*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> retransmitted_packets_sent; 530*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> bytes_sent; 531*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> header_bytes_sent; 532*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> retransmitted_bytes_sent; 533*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> target_bitrate; 534*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> frames_encoded; 535*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> key_frames_encoded; 536*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> total_encode_time; 537*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> total_encoded_bytes_target; 538*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> frame_width; 539*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> frame_height; 540*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> frames_per_second; 541*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> frames_sent; 542*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> huge_frames_sent; 543*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> total_packet_send_delay; 544*d9f75844SAndroid Build Coastguard Worker // Enum type RTCQualityLimitationReason 545*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> quality_limitation_reason; 546*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::map<std::string, double>> quality_limitation_durations; 547*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#dom-rtcoutboundrtpstreamstats-qualitylimitationresolutionchanges 548*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> quality_limitation_resolution_changes; 549*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-provisional-stats/#dom-rtcoutboundrtpstreamstats-contenttype 550*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> content_type; 551*d9f75844SAndroid Build Coastguard Worker // Only implemented for video. 552*d9f75844SAndroid Build Coastguard Worker // TODO(https://crbug.com/webrtc/14178): Implement for audio as well. 553*d9f75844SAndroid Build Coastguard Worker RTCRestrictedStatsMember<std::string, 554*d9f75844SAndroid Build Coastguard Worker StatExposureCriteria::kHardwareCapability> 555*d9f75844SAndroid Build Coastguard Worker encoder_implementation; 556*d9f75844SAndroid Build Coastguard Worker // FIR and PLI counts are only defined for |kind == "video"|. 557*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> fir_count; 558*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> pli_count; 559*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> nack_count; 560*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> qp_sum; 561*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<bool> active; 562*d9f75844SAndroid Build Coastguard Worker RTCRestrictedStatsMember<bool, StatExposureCriteria::kHardwareCapability> 563*d9f75844SAndroid Build Coastguard Worker power_efficient_encoder; 564*d9f75844SAndroid Build Coastguard Worker }; 565*d9f75844SAndroid Build Coastguard Worker 566*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#remoteinboundrtpstats-dict* 567*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT RTCRemoteInboundRtpStreamStats final 568*d9f75844SAndroid Build Coastguard Worker : public RTCReceivedRtpStreamStats { 569*d9f75844SAndroid Build Coastguard Worker public: 570*d9f75844SAndroid Build Coastguard Worker WEBRTC_RTCSTATS_DECL(); 571*d9f75844SAndroid Build Coastguard Worker 572*d9f75844SAndroid Build Coastguard Worker RTCRemoteInboundRtpStreamStats(const std::string& id, int64_t timestamp_us); 573*d9f75844SAndroid Build Coastguard Worker RTCRemoteInboundRtpStreamStats(std::string&& id, int64_t timestamp_us); 574*d9f75844SAndroid Build Coastguard Worker RTCRemoteInboundRtpStreamStats(const RTCRemoteInboundRtpStreamStats& other); 575*d9f75844SAndroid Build Coastguard Worker ~RTCRemoteInboundRtpStreamStats() override; 576*d9f75844SAndroid Build Coastguard Worker 577*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> local_id; 578*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> round_trip_time; 579*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> fraction_lost; 580*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> total_round_trip_time; 581*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<int32_t> round_trip_time_measurements; 582*d9f75844SAndroid Build Coastguard Worker }; 583*d9f75844SAndroid Build Coastguard Worker 584*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#remoteoutboundrtpstats-dict* 585*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT RTCRemoteOutboundRtpStreamStats final 586*d9f75844SAndroid Build Coastguard Worker : public RTCSentRtpStreamStats { 587*d9f75844SAndroid Build Coastguard Worker public: 588*d9f75844SAndroid Build Coastguard Worker WEBRTC_RTCSTATS_DECL(); 589*d9f75844SAndroid Build Coastguard Worker 590*d9f75844SAndroid Build Coastguard Worker RTCRemoteOutboundRtpStreamStats(const std::string& id, int64_t timestamp_us); 591*d9f75844SAndroid Build Coastguard Worker RTCRemoteOutboundRtpStreamStats(std::string&& id, int64_t timestamp_us); 592*d9f75844SAndroid Build Coastguard Worker RTCRemoteOutboundRtpStreamStats(const RTCRemoteOutboundRtpStreamStats& other); 593*d9f75844SAndroid Build Coastguard Worker ~RTCRemoteOutboundRtpStreamStats() override; 594*d9f75844SAndroid Build Coastguard Worker 595*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> local_id; 596*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> remote_timestamp; 597*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> reports_sent; 598*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> round_trip_time; 599*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> round_trip_time_measurements; 600*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> total_round_trip_time; 601*d9f75844SAndroid Build Coastguard Worker }; 602*d9f75844SAndroid Build Coastguard Worker 603*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#dom-rtcmediasourcestats 604*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT RTCMediaSourceStats : public RTCStats { 605*d9f75844SAndroid Build Coastguard Worker public: 606*d9f75844SAndroid Build Coastguard Worker WEBRTC_RTCSTATS_DECL(); 607*d9f75844SAndroid Build Coastguard Worker 608*d9f75844SAndroid Build Coastguard Worker RTCMediaSourceStats(const RTCMediaSourceStats& other); 609*d9f75844SAndroid Build Coastguard Worker ~RTCMediaSourceStats() override; 610*d9f75844SAndroid Build Coastguard Worker 611*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> track_identifier; 612*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> kind; 613*d9f75844SAndroid Build Coastguard Worker 614*d9f75844SAndroid Build Coastguard Worker protected: 615*d9f75844SAndroid Build Coastguard Worker RTCMediaSourceStats(const std::string& id, int64_t timestamp_us); 616*d9f75844SAndroid Build Coastguard Worker RTCMediaSourceStats(std::string&& id, int64_t timestamp_us); 617*d9f75844SAndroid Build Coastguard Worker }; 618*d9f75844SAndroid Build Coastguard Worker 619*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#dom-rtcaudiosourcestats 620*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT RTCAudioSourceStats final : public RTCMediaSourceStats { 621*d9f75844SAndroid Build Coastguard Worker public: 622*d9f75844SAndroid Build Coastguard Worker WEBRTC_RTCSTATS_DECL(); 623*d9f75844SAndroid Build Coastguard Worker 624*d9f75844SAndroid Build Coastguard Worker RTCAudioSourceStats(const std::string& id, int64_t timestamp_us); 625*d9f75844SAndroid Build Coastguard Worker RTCAudioSourceStats(std::string&& id, int64_t timestamp_us); 626*d9f75844SAndroid Build Coastguard Worker RTCAudioSourceStats(const RTCAudioSourceStats& other); 627*d9f75844SAndroid Build Coastguard Worker ~RTCAudioSourceStats() override; 628*d9f75844SAndroid Build Coastguard Worker 629*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> audio_level; 630*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> total_audio_energy; 631*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> total_samples_duration; 632*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> echo_return_loss; 633*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> echo_return_loss_enhancement; 634*d9f75844SAndroid Build Coastguard Worker }; 635*d9f75844SAndroid Build Coastguard Worker 636*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#dom-rtcvideosourcestats 637*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT RTCVideoSourceStats final : public RTCMediaSourceStats { 638*d9f75844SAndroid Build Coastguard Worker public: 639*d9f75844SAndroid Build Coastguard Worker WEBRTC_RTCSTATS_DECL(); 640*d9f75844SAndroid Build Coastguard Worker 641*d9f75844SAndroid Build Coastguard Worker RTCVideoSourceStats(const std::string& id, int64_t timestamp_us); 642*d9f75844SAndroid Build Coastguard Worker RTCVideoSourceStats(std::string&& id, int64_t timestamp_us); 643*d9f75844SAndroid Build Coastguard Worker RTCVideoSourceStats(const RTCVideoSourceStats& other); 644*d9f75844SAndroid Build Coastguard Worker ~RTCVideoSourceStats() override; 645*d9f75844SAndroid Build Coastguard Worker 646*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> width; 647*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> height; 648*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> frames; 649*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<double> frames_per_second; 650*d9f75844SAndroid Build Coastguard Worker }; 651*d9f75844SAndroid Build Coastguard Worker 652*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-stats/#transportstats-dict* 653*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT RTCTransportStats final : public RTCStats { 654*d9f75844SAndroid Build Coastguard Worker public: 655*d9f75844SAndroid Build Coastguard Worker WEBRTC_RTCSTATS_DECL(); 656*d9f75844SAndroid Build Coastguard Worker 657*d9f75844SAndroid Build Coastguard Worker RTCTransportStats(const std::string& id, int64_t timestamp_us); 658*d9f75844SAndroid Build Coastguard Worker RTCTransportStats(std::string&& id, int64_t timestamp_us); 659*d9f75844SAndroid Build Coastguard Worker RTCTransportStats(const RTCTransportStats& other); 660*d9f75844SAndroid Build Coastguard Worker ~RTCTransportStats() override; 661*d9f75844SAndroid Build Coastguard Worker 662*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> bytes_sent; 663*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> packets_sent; 664*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> bytes_received; 665*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint64_t> packets_received; 666*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> rtcp_transport_stats_id; 667*d9f75844SAndroid Build Coastguard Worker // Enum type RTCDtlsTransportState. 668*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> dtls_state; 669*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> selected_candidate_pair_id; 670*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> local_certificate_id; 671*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> remote_certificate_id; 672*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> tls_version; 673*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> dtls_cipher; 674*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> dtls_role; 675*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> srtp_cipher; 676*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<uint32_t> selected_candidate_pair_changes; 677*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> ice_role; 678*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> ice_local_username_fragment; 679*d9f75844SAndroid Build Coastguard Worker RTCStatsMember<std::string> ice_state; 680*d9f75844SAndroid Build Coastguard Worker }; 681*d9f75844SAndroid Build Coastguard Worker 682*d9f75844SAndroid Build Coastguard Worker } // namespace webrtc 683*d9f75844SAndroid Build Coastguard Worker 684*d9f75844SAndroid Build Coastguard Worker #endif // API_STATS_RTCSTATS_OBJECTS_H_ 685