xref: /aosp_15_r20/external/webrtc/api/stats/rtcstats_objects.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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