blob: 5a803de071cd32c2aa22e828b016b34ca87ca5b8 [file] [log] [blame]
hbosd565b732016-08-30 14:04:35 -07001/*
2 * Copyright 2016 The WebRTC Project Authors. All rights reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#include "api/stats/rtcstats_objects.h"
hbosd565b732016-08-30 14:04:35 -070012
Yves Gerey3e707812018-11-28 16:47:49 +010013#include <utility>
14
Jakob Ivarsson758d9462019-03-19 15:38:49 +010015#include "api/stats/rtc_stats.h"
Jonas Olssona4d87372019-07-05 19:08:33 +020016#include "rtc_base/checks.h"
Jakob Ivarsson758d9462019-03-19 15:38:49 +010017
hbosd565b732016-08-30 14:04:35 -070018namespace webrtc {
19
agrieve26622d32017-08-08 10:48:15 -070020const char* const RTCDataChannelState::kConnecting = "connecting";
21const char* const RTCDataChannelState::kOpen = "open";
22const char* const RTCDataChannelState::kClosing = "closing";
23const char* const RTCDataChannelState::kClosed = "closed";
hboscc555c52016-10-18 12:48:31 -070024
agrieve26622d32017-08-08 10:48:15 -070025const char* const RTCStatsIceCandidatePairState::kFrozen = "frozen";
26const char* const RTCStatsIceCandidatePairState::kWaiting = "waiting";
27const char* const RTCStatsIceCandidatePairState::kInProgress = "in-progress";
28const char* const RTCStatsIceCandidatePairState::kFailed = "failed";
29const char* const RTCStatsIceCandidatePairState::kSucceeded = "succeeded";
hbosc47a0c32016-10-11 14:54:49 -070030
31// Strings defined in https://tools.ietf.org/html/rfc5245.
agrieve26622d32017-08-08 10:48:15 -070032const char* const RTCIceCandidateType::kHost = "host";
33const char* const RTCIceCandidateType::kSrflx = "srflx";
34const char* const RTCIceCandidateType::kPrflx = "prflx";
35const char* const RTCIceCandidateType::kRelay = "relay";
hbosab9f6e42016-10-07 02:18:47 -070036
agrieve26622d32017-08-08 10:48:15 -070037const char* const RTCDtlsTransportState::kNew = "new";
38const char* const RTCDtlsTransportState::kConnecting = "connecting";
39const char* const RTCDtlsTransportState::kConnected = "connected";
40const char* const RTCDtlsTransportState::kClosed = "closed";
41const char* const RTCDtlsTransportState::kFailed = "failed";
hbos7064d592017-01-16 07:38:02 -080042
agrieve26622d32017-08-08 10:48:15 -070043const char* const RTCMediaStreamTrackKind::kAudio = "audio";
44const char* const RTCMediaStreamTrackKind::kVideo = "video";
hbos160e4a72017-01-17 02:53:23 -080045
Gary Liu37e489c2017-11-21 10:49:36 -080046// https://w3c.github.io/webrtc-stats/#dom-rtcnetworktype
47const char* const RTCNetworkType::kBluetooth = "bluetooth";
48const char* const RTCNetworkType::kCellular = "cellular";
49const char* const RTCNetworkType::kEthernet = "ethernet";
50const char* const RTCNetworkType::kWifi = "wifi";
51const char* const RTCNetworkType::kWimax = "wimax";
52const char* const RTCNetworkType::kVpn = "vpn";
53const char* const RTCNetworkType::kUnknown = "unknown";
54
Henrik Boströmce33b6a2019-05-28 17:42:38 +020055// https://w3c.github.io/webrtc-stats/#dom-rtcqualitylimitationreason
56const char* const RTCQualityLimitationReason::kNone = "none";
57const char* const RTCQualityLimitationReason::kCpu = "cpu";
58const char* const RTCQualityLimitationReason::kBandwidth = "bandwidth";
59const char* const RTCQualityLimitationReason::kOther = "other";
60
Henrik Boström2e069262019-04-09 13:59:31 +020061// https://webrtc.org/experiments/rtp-hdrext/video-content-type/
62const char* const RTCContentType::kUnspecified = "unspecified";
63const char* const RTCContentType::kScreenshare = "screenshare";
64
Steve Antond6a5cbd2017-08-18 09:40:25 -070065// clang-format off
hbos2fa7c672016-10-24 04:00:05 -070066WEBRTC_RTCSTATS_IMPL(RTCCertificateStats, RTCStats, "certificate",
67 &fingerprint,
68 &fingerprint_algorithm,
69 &base64_certificate,
Nico Weber22f99252019-02-20 10:13:16 -050070 &issuer_certificate_id)
Steve Antond6a5cbd2017-08-18 09:40:25 -070071// clang-format on
hbos2fa7c672016-10-24 04:00:05 -070072
Yves Gerey665174f2018-06-19 15:03:05 +020073RTCCertificateStats::RTCCertificateStats(const std::string& id,
74 int64_t timestamp_us)
75 : RTCCertificateStats(std::string(id), timestamp_us) {}
hbos2fa7c672016-10-24 04:00:05 -070076
Yves Gerey665174f2018-06-19 15:03:05 +020077RTCCertificateStats::RTCCertificateStats(std::string&& id, int64_t timestamp_us)
hbos2fa7c672016-10-24 04:00:05 -070078 : RTCStats(std::move(id), timestamp_us),
79 fingerprint("fingerprint"),
80 fingerprint_algorithm("fingerprintAlgorithm"),
81 base64_certificate("base64Certificate"),
Yves Gerey665174f2018-06-19 15:03:05 +020082 issuer_certificate_id("issuerCertificateId") {}
hbos2fa7c672016-10-24 04:00:05 -070083
Yves Gerey665174f2018-06-19 15:03:05 +020084RTCCertificateStats::RTCCertificateStats(const RTCCertificateStats& other)
hbos2fa7c672016-10-24 04:00:05 -070085 : RTCStats(other.id(), other.timestamp_us()),
86 fingerprint(other.fingerprint),
87 fingerprint_algorithm(other.fingerprint_algorithm),
88 base64_certificate(other.base64_certificate),
Yves Gerey665174f2018-06-19 15:03:05 +020089 issuer_certificate_id(other.issuer_certificate_id) {}
hbos2fa7c672016-10-24 04:00:05 -070090
Yves Gerey665174f2018-06-19 15:03:05 +020091RTCCertificateStats::~RTCCertificateStats() {}
hbos2fa7c672016-10-24 04:00:05 -070092
Steve Antond6a5cbd2017-08-18 09:40:25 -070093// clang-format off
hbos0adb8282016-11-23 02:32:06 -080094WEBRTC_RTCSTATS_IMPL(RTCCodecStats, RTCStats, "codec",
Philipp Hancke95157a02020-11-16 20:08:27 +010095 &transport_id,
hbos0adb8282016-11-23 02:32:06 -080096 &payload_type,
hbos13f54b22017-02-28 06:56:04 -080097 &mime_type,
hbos0adb8282016-11-23 02:32:06 -080098 &clock_rate,
99 &channels,
Henrik Boström6b430862019-08-16 13:09:51 +0200100 &sdp_fmtp_line)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700101// clang-format on
hbos0adb8282016-11-23 02:32:06 -0800102
Yves Gerey665174f2018-06-19 15:03:05 +0200103RTCCodecStats::RTCCodecStats(const std::string& id, int64_t timestamp_us)
104 : RTCCodecStats(std::string(id), timestamp_us) {}
hbos0adb8282016-11-23 02:32:06 -0800105
Yves Gerey665174f2018-06-19 15:03:05 +0200106RTCCodecStats::RTCCodecStats(std::string&& id, int64_t timestamp_us)
hbos0adb8282016-11-23 02:32:06 -0800107 : RTCStats(std::move(id), timestamp_us),
Philipp Hancke95157a02020-11-16 20:08:27 +0100108 transport_id("transportId"),
hbos0adb8282016-11-23 02:32:06 -0800109 payload_type("payloadType"),
hbos13f54b22017-02-28 06:56:04 -0800110 mime_type("mimeType"),
hbos0adb8282016-11-23 02:32:06 -0800111 clock_rate("clockRate"),
112 channels("channels"),
Henrik Boström6b430862019-08-16 13:09:51 +0200113 sdp_fmtp_line("sdpFmtpLine") {}
hbos0adb8282016-11-23 02:32:06 -0800114
Yves Gerey665174f2018-06-19 15:03:05 +0200115RTCCodecStats::RTCCodecStats(const RTCCodecStats& other)
hbos0adb8282016-11-23 02:32:06 -0800116 : RTCStats(other.id(), other.timestamp_us()),
Philipp Hancke95157a02020-11-16 20:08:27 +0100117 transport_id(other.transport_id),
hbos0adb8282016-11-23 02:32:06 -0800118 payload_type(other.payload_type),
hbos13f54b22017-02-28 06:56:04 -0800119 mime_type(other.mime_type),
hbos0adb8282016-11-23 02:32:06 -0800120 clock_rate(other.clock_rate),
121 channels(other.channels),
Henrik Boström6b430862019-08-16 13:09:51 +0200122 sdp_fmtp_line(other.sdp_fmtp_line) {}
hbos0adb8282016-11-23 02:32:06 -0800123
Yves Gerey665174f2018-06-19 15:03:05 +0200124RTCCodecStats::~RTCCodecStats() {}
hbos0adb8282016-11-23 02:32:06 -0800125
Steve Antond6a5cbd2017-08-18 09:40:25 -0700126// clang-format off
hbos2fa7c672016-10-24 04:00:05 -0700127WEBRTC_RTCSTATS_IMPL(RTCDataChannelStats, RTCStats, "data-channel",
128 &label,
129 &protocol,
Harald Alvestrand10ef8472020-06-05 15:38:51 +0200130 &data_channel_identifier,
hbos2fa7c672016-10-24 04:00:05 -0700131 &state,
132 &messages_sent,
133 &bytes_sent,
134 &messages_received,
Nico Weber22f99252019-02-20 10:13:16 -0500135 &bytes_received)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700136// clang-format on
hbos2fa7c672016-10-24 04:00:05 -0700137
Yves Gerey665174f2018-06-19 15:03:05 +0200138RTCDataChannelStats::RTCDataChannelStats(const std::string& id,
139 int64_t timestamp_us)
140 : RTCDataChannelStats(std::string(id), timestamp_us) {}
hbos2fa7c672016-10-24 04:00:05 -0700141
Yves Gerey665174f2018-06-19 15:03:05 +0200142RTCDataChannelStats::RTCDataChannelStats(std::string&& id, int64_t timestamp_us)
hbos2fa7c672016-10-24 04:00:05 -0700143 : RTCStats(std::move(id), timestamp_us),
144 label("label"),
145 protocol("protocol"),
Harald Alvestrand10ef8472020-06-05 15:38:51 +0200146 data_channel_identifier("dataChannelIdentifier"),
hbos2fa7c672016-10-24 04:00:05 -0700147 state("state"),
148 messages_sent("messagesSent"),
149 bytes_sent("bytesSent"),
150 messages_received("messagesReceived"),
Yves Gerey665174f2018-06-19 15:03:05 +0200151 bytes_received("bytesReceived") {}
hbos2fa7c672016-10-24 04:00:05 -0700152
Yves Gerey665174f2018-06-19 15:03:05 +0200153RTCDataChannelStats::RTCDataChannelStats(const RTCDataChannelStats& other)
hbos2fa7c672016-10-24 04:00:05 -0700154 : RTCStats(other.id(), other.timestamp_us()),
155 label(other.label),
156 protocol(other.protocol),
Harald Alvestrand10ef8472020-06-05 15:38:51 +0200157 data_channel_identifier(other.data_channel_identifier),
hbos2fa7c672016-10-24 04:00:05 -0700158 state(other.state),
159 messages_sent(other.messages_sent),
160 bytes_sent(other.bytes_sent),
161 messages_received(other.messages_received),
Yves Gerey665174f2018-06-19 15:03:05 +0200162 bytes_received(other.bytes_received) {}
hbos2fa7c672016-10-24 04:00:05 -0700163
Yves Gerey665174f2018-06-19 15:03:05 +0200164RTCDataChannelStats::~RTCDataChannelStats() {}
hbos2fa7c672016-10-24 04:00:05 -0700165
Steve Antond6a5cbd2017-08-18 09:40:25 -0700166// clang-format off
hbosc47a0c32016-10-11 14:54:49 -0700167WEBRTC_RTCSTATS_IMPL(RTCIceCandidatePairStats, RTCStats, "candidate-pair",
168 &transport_id,
169 &local_candidate_id,
170 &remote_candidate_id,
171 &state,
172 &priority,
173 &nominated,
174 &writable,
175 &readable,
176 &bytes_sent,
177 &bytes_received,
hbos3168c7a2016-12-15 06:17:08 -0800178 &total_round_trip_time,
179 &current_round_trip_time,
hbosc47a0c32016-10-11 14:54:49 -0700180 &available_outgoing_bitrate,
181 &available_incoming_bitrate,
182 &requests_received,
183 &requests_sent,
184 &responses_received,
185 &responses_sent,
186 &retransmissions_received,
187 &retransmissions_sent,
188 &consent_requests_received,
189 &consent_requests_sent,
190 &consent_responses_received,
Nico Weber22f99252019-02-20 10:13:16 -0500191 &consent_responses_sent)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700192// clang-format on
hbosc47a0c32016-10-11 14:54:49 -0700193
Yves Gerey665174f2018-06-19 15:03:05 +0200194RTCIceCandidatePairStats::RTCIceCandidatePairStats(const std::string& id,
195 int64_t timestamp_us)
196 : RTCIceCandidatePairStats(std::string(id), timestamp_us) {}
hbosc47a0c32016-10-11 14:54:49 -0700197
Yves Gerey665174f2018-06-19 15:03:05 +0200198RTCIceCandidatePairStats::RTCIceCandidatePairStats(std::string&& id,
199 int64_t timestamp_us)
hbosc47a0c32016-10-11 14:54:49 -0700200 : RTCStats(std::move(id), timestamp_us),
201 transport_id("transportId"),
202 local_candidate_id("localCandidateId"),
203 remote_candidate_id("remoteCandidateId"),
204 state("state"),
205 priority("priority"),
206 nominated("nominated"),
207 writable("writable"),
208 readable("readable"),
209 bytes_sent("bytesSent"),
210 bytes_received("bytesReceived"),
hbos3168c7a2016-12-15 06:17:08 -0800211 total_round_trip_time("totalRoundTripTime"),
212 current_round_trip_time("currentRoundTripTime"),
hbosc47a0c32016-10-11 14:54:49 -0700213 available_outgoing_bitrate("availableOutgoingBitrate"),
214 available_incoming_bitrate("availableIncomingBitrate"),
215 requests_received("requestsReceived"),
216 requests_sent("requestsSent"),
217 responses_received("responsesReceived"),
218 responses_sent("responsesSent"),
219 retransmissions_received("retransmissionsReceived"),
220 retransmissions_sent("retransmissionsSent"),
221 consent_requests_received("consentRequestsReceived"),
222 consent_requests_sent("consentRequestsSent"),
223 consent_responses_received("consentResponsesReceived"),
Yves Gerey665174f2018-06-19 15:03:05 +0200224 consent_responses_sent("consentResponsesSent") {}
hbosc47a0c32016-10-11 14:54:49 -0700225
226RTCIceCandidatePairStats::RTCIceCandidatePairStats(
227 const RTCIceCandidatePairStats& other)
228 : RTCStats(other.id(), other.timestamp_us()),
229 transport_id(other.transport_id),
230 local_candidate_id(other.local_candidate_id),
231 remote_candidate_id(other.remote_candidate_id),
232 state(other.state),
233 priority(other.priority),
234 nominated(other.nominated),
235 writable(other.writable),
236 readable(other.readable),
237 bytes_sent(other.bytes_sent),
238 bytes_received(other.bytes_received),
hbos3168c7a2016-12-15 06:17:08 -0800239 total_round_trip_time(other.total_round_trip_time),
240 current_round_trip_time(other.current_round_trip_time),
hbosc47a0c32016-10-11 14:54:49 -0700241 available_outgoing_bitrate(other.available_outgoing_bitrate),
242 available_incoming_bitrate(other.available_incoming_bitrate),
243 requests_received(other.requests_received),
244 requests_sent(other.requests_sent),
245 responses_received(other.responses_received),
246 responses_sent(other.responses_sent),
247 retransmissions_received(other.retransmissions_received),
248 retransmissions_sent(other.retransmissions_sent),
249 consent_requests_received(other.consent_requests_received),
250 consent_requests_sent(other.consent_requests_sent),
251 consent_responses_received(other.consent_responses_received),
Yves Gerey665174f2018-06-19 15:03:05 +0200252 consent_responses_sent(other.consent_responses_sent) {}
hbosc47a0c32016-10-11 14:54:49 -0700253
Yves Gerey665174f2018-06-19 15:03:05 +0200254RTCIceCandidatePairStats::~RTCIceCandidatePairStats() {}
hbosc47a0c32016-10-11 14:54:49 -0700255
Steve Antond6a5cbd2017-08-18 09:40:25 -0700256// clang-format off
Henrik Boström1df1bf82018-03-20 13:24:20 +0100257WEBRTC_RTCSTATS_IMPL(RTCIceCandidateStats, RTCStats, "abstract-ice-candidate",
hbosb4e426e2017-01-02 09:59:31 -0800258 &transport_id,
hbosc3a2b7f2017-01-02 04:46:15 -0800259 &is_remote,
Gary Liu37e489c2017-11-21 10:49:36 -0800260 &network_type,
hbosab9f6e42016-10-07 02:18:47 -0700261 &ip,
262 &port,
263 &protocol,
Philipp Hancke95513752018-09-27 14:40:08 +0200264 &relay_protocol,
hbosab9f6e42016-10-07 02:18:47 -0700265 &candidate_type,
266 &priority,
hbosd17a5a72017-01-02 08:09:59 -0800267 &url,
Nico Weber22f99252019-02-20 10:13:16 -0500268 &deleted)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700269// clang-format on
hbosab9f6e42016-10-07 02:18:47 -0700270
Yves Gerey665174f2018-06-19 15:03:05 +0200271RTCIceCandidateStats::RTCIceCandidateStats(const std::string& id,
272 int64_t timestamp_us,
273 bool is_remote)
274 : RTCIceCandidateStats(std::string(id), timestamp_us, is_remote) {}
hbosab9f6e42016-10-07 02:18:47 -0700275
Gary Liu37e489c2017-11-21 10:49:36 -0800276RTCIceCandidateStats::RTCIceCandidateStats(std::string&& id,
277 int64_t timestamp_us,
278 bool is_remote)
hbosab9f6e42016-10-07 02:18:47 -0700279 : RTCStats(std::move(id), timestamp_us),
hbosb4e426e2017-01-02 09:59:31 -0800280 transport_id("transportId"),
hbosc3a2b7f2017-01-02 04:46:15 -0800281 is_remote("isRemote", is_remote),
Gary Liu37e489c2017-11-21 10:49:36 -0800282 network_type("networkType"),
hbosab9f6e42016-10-07 02:18:47 -0700283 ip("ip"),
284 port("port"),
285 protocol("protocol"),
Philipp Hancke95513752018-09-27 14:40:08 +0200286 relay_protocol("relayProtocol"),
hbosab9f6e42016-10-07 02:18:47 -0700287 candidate_type("candidateType"),
288 priority("priority"),
hbosd17a5a72017-01-02 08:09:59 -0800289 url("url"),
Gary Liu37e489c2017-11-21 10:49:36 -0800290 deleted("deleted", false) {}
hbosab9f6e42016-10-07 02:18:47 -0700291
292RTCIceCandidateStats::RTCIceCandidateStats(const RTCIceCandidateStats& other)
293 : RTCStats(other.id(), other.timestamp_us()),
hbosb4e426e2017-01-02 09:59:31 -0800294 transport_id(other.transport_id),
hbosc3a2b7f2017-01-02 04:46:15 -0800295 is_remote(other.is_remote),
Gary Liu37e489c2017-11-21 10:49:36 -0800296 network_type(other.network_type),
hbosab9f6e42016-10-07 02:18:47 -0700297 ip(other.ip),
298 port(other.port),
299 protocol(other.protocol),
Philipp Hancke95513752018-09-27 14:40:08 +0200300 relay_protocol(other.relay_protocol),
hbosab9f6e42016-10-07 02:18:47 -0700301 candidate_type(other.candidate_type),
302 priority(other.priority),
hbosd17a5a72017-01-02 08:09:59 -0800303 url(other.url),
Gary Liu37e489c2017-11-21 10:49:36 -0800304 deleted(other.deleted) {}
hbosab9f6e42016-10-07 02:18:47 -0700305
Yves Gerey665174f2018-06-19 15:03:05 +0200306RTCIceCandidateStats::~RTCIceCandidateStats() {}
hbosab9f6e42016-10-07 02:18:47 -0700307
308const char RTCLocalIceCandidateStats::kType[] = "local-candidate";
309
Yves Gerey665174f2018-06-19 15:03:05 +0200310RTCLocalIceCandidateStats::RTCLocalIceCandidateStats(const std::string& id,
311 int64_t timestamp_us)
312 : RTCIceCandidateStats(id, timestamp_us, false) {}
hbosab9f6e42016-10-07 02:18:47 -0700313
Yves Gerey665174f2018-06-19 15:03:05 +0200314RTCLocalIceCandidateStats::RTCLocalIceCandidateStats(std::string&& id,
315 int64_t timestamp_us)
316 : RTCIceCandidateStats(std::move(id), timestamp_us, false) {}
hbosab9f6e42016-10-07 02:18:47 -0700317
Henrik Boström1df1bf82018-03-20 13:24:20 +0100318std::unique_ptr<RTCStats> RTCLocalIceCandidateStats::copy() const {
319 return std::unique_ptr<RTCStats>(new RTCLocalIceCandidateStats(*this));
320}
321
hbosab9f6e42016-10-07 02:18:47 -0700322const char* RTCLocalIceCandidateStats::type() const {
323 return kType;
324}
325
326const char RTCRemoteIceCandidateStats::kType[] = "remote-candidate";
327
Yves Gerey665174f2018-06-19 15:03:05 +0200328RTCRemoteIceCandidateStats::RTCRemoteIceCandidateStats(const std::string& id,
329 int64_t timestamp_us)
330 : RTCIceCandidateStats(id, timestamp_us, true) {}
hbosab9f6e42016-10-07 02:18:47 -0700331
Yves Gerey665174f2018-06-19 15:03:05 +0200332RTCRemoteIceCandidateStats::RTCRemoteIceCandidateStats(std::string&& id,
333 int64_t timestamp_us)
334 : RTCIceCandidateStats(std::move(id), timestamp_us, true) {}
hbosab9f6e42016-10-07 02:18:47 -0700335
Henrik Boström1df1bf82018-03-20 13:24:20 +0100336std::unique_ptr<RTCStats> RTCRemoteIceCandidateStats::copy() const {
337 return std::unique_ptr<RTCStats>(new RTCRemoteIceCandidateStats(*this));
338}
339
hbosab9f6e42016-10-07 02:18:47 -0700340const char* RTCRemoteIceCandidateStats::type() const {
341 return kType;
342}
343
Steve Antond6a5cbd2017-08-18 09:40:25 -0700344// clang-format off
hbos09bc1282016-11-08 06:29:22 -0800345WEBRTC_RTCSTATS_IMPL(RTCMediaStreamStats, RTCStats, "stream",
346 &stream_identifier,
Nico Weber22f99252019-02-20 10:13:16 -0500347 &track_ids)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700348// clang-format on
hbos09bc1282016-11-08 06:29:22 -0800349
Yves Gerey665174f2018-06-19 15:03:05 +0200350RTCMediaStreamStats::RTCMediaStreamStats(const std::string& id,
351 int64_t timestamp_us)
352 : RTCMediaStreamStats(std::string(id), timestamp_us) {}
hbos09bc1282016-11-08 06:29:22 -0800353
Yves Gerey665174f2018-06-19 15:03:05 +0200354RTCMediaStreamStats::RTCMediaStreamStats(std::string&& id, int64_t timestamp_us)
hbos09bc1282016-11-08 06:29:22 -0800355 : RTCStats(std::move(id), timestamp_us),
356 stream_identifier("streamIdentifier"),
Yves Gerey665174f2018-06-19 15:03:05 +0200357 track_ids("trackIds") {}
hbos09bc1282016-11-08 06:29:22 -0800358
Yves Gerey665174f2018-06-19 15:03:05 +0200359RTCMediaStreamStats::RTCMediaStreamStats(const RTCMediaStreamStats& other)
hbos09bc1282016-11-08 06:29:22 -0800360 : RTCStats(other.id(), other.timestamp_us()),
361 stream_identifier(other.stream_identifier),
Yves Gerey665174f2018-06-19 15:03:05 +0200362 track_ids(other.track_ids) {}
hbos09bc1282016-11-08 06:29:22 -0800363
Yves Gerey665174f2018-06-19 15:03:05 +0200364RTCMediaStreamStats::~RTCMediaStreamStats() {}
hbos09bc1282016-11-08 06:29:22 -0800365
Steve Antond6a5cbd2017-08-18 09:40:25 -0700366// clang-format off
hbos09bc1282016-11-08 06:29:22 -0800367WEBRTC_RTCSTATS_IMPL(RTCMediaStreamTrackStats, RTCStats, "track",
zsteine76bd3a2017-07-14 12:17:49 -0700368 &track_identifier,
Henrik Boström646fda02019-05-22 15:49:42 +0200369 &media_source_id,
zsteine76bd3a2017-07-14 12:17:49 -0700370 &remote_source,
371 &ended,
372 &detached,
373 &kind,
Gustaf Ullbergb0a02072017-10-02 12:00:34 +0200374 &jitter_buffer_delay,
Chen Xing0acffb52019-01-15 15:46:29 +0100375 &jitter_buffer_emitted_count,
zsteine76bd3a2017-07-14 12:17:49 -0700376 &frame_width,
377 &frame_height,
378 &frames_per_second,
379 &frames_sent,
Ilya Nikolaevskiy70473fc2018-02-28 16:35:03 +0100380 &huge_frames_sent,
zsteine76bd3a2017-07-14 12:17:49 -0700381 &frames_received,
382 &frames_decoded,
383 &frames_dropped,
384 &frames_corrupted,
385 &partial_frames_lost,
386 &full_frames_lost,
387 &audio_level,
388 &total_audio_energy,
zsteine76bd3a2017-07-14 12:17:49 -0700389 &echo_return_loss,
Steve Anton2dbc69f2017-08-24 17:15:13 -0700390 &echo_return_loss_enhancement,
391 &total_samples_received,
392 &total_samples_duration,
Gustaf Ullberg9a2e9062017-09-18 09:28:20 +0200393 &concealed_samples,
Henrik Boström21e99da2019-08-21 12:09:51 +0200394 &silent_concealed_samples,
Ruslan Burakov8af88962018-11-22 17:21:10 +0100395 &concealment_events,
Henrik Boström21e99da2019-08-21 12:09:51 +0200396 &inserted_samples_for_deceleration,
397 &removed_samples_for_acceleration,
Jakob Ivarsson352ce5c2018-11-27 12:52:16 +0100398 &jitter_buffer_flushes,
Sergey Silkin02371062019-01-31 16:45:42 +0100399 &delayed_packet_outage_samples,
Jakob Ivarsson232b3fd2019-03-06 09:18:40 +0100400 &relative_packet_arrival_delay,
Artem Titove618cc92020-03-11 11:18:54 +0100401 &jitter_buffer_target_delay,
Henrik Lundin44125fa2019-04-29 17:00:46 +0200402 &interruption_count,
403 &total_interruption_duration,
Sergey Silkin02371062019-01-31 16:45:42 +0100404 &freeze_count,
405 &pause_count,
406 &total_freezes_duration,
407 &total_pauses_duration,
408 &total_frames_duration,
Nico Weber22f99252019-02-20 10:13:16 -0500409 &sum_squared_frame_durations)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700410// clang-format on
hbos09bc1282016-11-08 06:29:22 -0800411
Yves Gerey665174f2018-06-19 15:03:05 +0200412RTCMediaStreamTrackStats::RTCMediaStreamTrackStats(const std::string& id,
413 int64_t timestamp_us,
414 const char* kind)
415 : RTCMediaStreamTrackStats(std::string(id), timestamp_us, kind) {}
hbos09bc1282016-11-08 06:29:22 -0800416
zsteine76bd3a2017-07-14 12:17:49 -0700417RTCMediaStreamTrackStats::RTCMediaStreamTrackStats(std::string&& id,
418 int64_t timestamp_us,
419 const char* kind)
hbos09bc1282016-11-08 06:29:22 -0800420 : RTCStats(std::move(id), timestamp_us),
421 track_identifier("trackIdentifier"),
Henrik Boström646fda02019-05-22 15:49:42 +0200422 media_source_id("mediaSourceId"),
hbos09bc1282016-11-08 06:29:22 -0800423 remote_source("remoteSource"),
424 ended("ended"),
425 detached("detached"),
hbos160e4a72017-01-17 02:53:23 -0800426 kind("kind", kind),
Gustaf Ullbergb0a02072017-10-02 12:00:34 +0200427 jitter_buffer_delay("jitterBufferDelay"),
Chen Xing0acffb52019-01-15 15:46:29 +0100428 jitter_buffer_emitted_count("jitterBufferEmittedCount"),
hbos09bc1282016-11-08 06:29:22 -0800429 frame_width("frameWidth"),
430 frame_height("frameHeight"),
431 frames_per_second("framesPerSecond"),
432 frames_sent("framesSent"),
Ilya Nikolaevskiy70473fc2018-02-28 16:35:03 +0100433 huge_frames_sent("hugeFramesSent"),
hbos09bc1282016-11-08 06:29:22 -0800434 frames_received("framesReceived"),
435 frames_decoded("framesDecoded"),
436 frames_dropped("framesDropped"),
437 frames_corrupted("framesCorrupted"),
438 partial_frames_lost("partialFramesLost"),
439 full_frames_lost("fullFramesLost"),
440 audio_level("audioLevel"),
zsteine76bd3a2017-07-14 12:17:49 -0700441 total_audio_energy("totalAudioEnergy"),
hbos09bc1282016-11-08 06:29:22 -0800442 echo_return_loss("echoReturnLoss"),
Steve Anton2dbc69f2017-08-24 17:15:13 -0700443 echo_return_loss_enhancement("echoReturnLossEnhancement"),
444 total_samples_received("totalSamplesReceived"),
445 total_samples_duration("totalSamplesDuration"),
Gustaf Ullberg9a2e9062017-09-18 09:28:20 +0200446 concealed_samples("concealedSamples"),
Ivo Creusen8d8ffdb2019-04-30 09:45:21 +0200447 silent_concealed_samples("silentConcealedSamples"),
Ruslan Burakov8af88962018-11-22 17:21:10 +0100448 concealment_events("concealmentEvents"),
Ivo Creusen8d8ffdb2019-04-30 09:45:21 +0200449 inserted_samples_for_deceleration("insertedSamplesForDeceleration"),
450 removed_samples_for_acceleration("removedSamplesForAcceleration"),
Jakob Ivarsson758d9462019-03-19 15:38:49 +0100451 jitter_buffer_flushes(
452 "jitterBufferFlushes",
453 {NonStandardGroupId::kRtcAudioJitterBufferMaxPackets}),
454 delayed_packet_outage_samples(
455 "delayedPacketOutageSamples",
456 {NonStandardGroupId::kRtcAudioJitterBufferMaxPackets,
457 NonStandardGroupId::kRtcStatsRelativePacketArrivalDelay}),
458 relative_packet_arrival_delay(
459 "relativePacketArrivalDelay",
460 {NonStandardGroupId::kRtcStatsRelativePacketArrivalDelay}),
Artem Titove618cc92020-03-11 11:18:54 +0100461 jitter_buffer_target_delay("jitterBufferTargetDelay"),
Henrik Lundin44125fa2019-04-29 17:00:46 +0200462 interruption_count("interruptionCount"),
463 total_interruption_duration("totalInterruptionDuration"),
Sergey Silkin02371062019-01-31 16:45:42 +0100464 freeze_count("freezeCount"),
465 pause_count("pauseCount"),
466 total_freezes_duration("totalFreezesDuration"),
467 total_pauses_duration("totalPausesDuration"),
468 total_frames_duration("totalFramesDuration"),
469 sum_squared_frame_durations("sumOfSquaredFramesDuration") {
hbos160e4a72017-01-17 02:53:23 -0800470 RTC_DCHECK(kind == RTCMediaStreamTrackKind::kAudio ||
471 kind == RTCMediaStreamTrackKind::kVideo);
hbos09bc1282016-11-08 06:29:22 -0800472}
473
474RTCMediaStreamTrackStats::RTCMediaStreamTrackStats(
475 const RTCMediaStreamTrackStats& other)
476 : RTCStats(other.id(), other.timestamp_us()),
477 track_identifier(other.track_identifier),
Henrik Boström646fda02019-05-22 15:49:42 +0200478 media_source_id(other.media_source_id),
hbos09bc1282016-11-08 06:29:22 -0800479 remote_source(other.remote_source),
480 ended(other.ended),
481 detached(other.detached),
hbos160e4a72017-01-17 02:53:23 -0800482 kind(other.kind),
Gustaf Ullbergb0a02072017-10-02 12:00:34 +0200483 jitter_buffer_delay(other.jitter_buffer_delay),
Chen Xing0acffb52019-01-15 15:46:29 +0100484 jitter_buffer_emitted_count(other.jitter_buffer_emitted_count),
hbos09bc1282016-11-08 06:29:22 -0800485 frame_width(other.frame_width),
486 frame_height(other.frame_height),
487 frames_per_second(other.frames_per_second),
488 frames_sent(other.frames_sent),
Ilya Nikolaevskiy70473fc2018-02-28 16:35:03 +0100489 huge_frames_sent(other.huge_frames_sent),
hbos09bc1282016-11-08 06:29:22 -0800490 frames_received(other.frames_received),
491 frames_decoded(other.frames_decoded),
492 frames_dropped(other.frames_dropped),
493 frames_corrupted(other.frames_corrupted),
494 partial_frames_lost(other.partial_frames_lost),
495 full_frames_lost(other.full_frames_lost),
496 audio_level(other.audio_level),
zsteine76bd3a2017-07-14 12:17:49 -0700497 total_audio_energy(other.total_audio_energy),
hbos09bc1282016-11-08 06:29:22 -0800498 echo_return_loss(other.echo_return_loss),
Steve Anton2dbc69f2017-08-24 17:15:13 -0700499 echo_return_loss_enhancement(other.echo_return_loss_enhancement),
500 total_samples_received(other.total_samples_received),
501 total_samples_duration(other.total_samples_duration),
Gustaf Ullberg9a2e9062017-09-18 09:28:20 +0200502 concealed_samples(other.concealed_samples),
Ivo Creusen8d8ffdb2019-04-30 09:45:21 +0200503 silent_concealed_samples(other.silent_concealed_samples),
Ruslan Burakov8af88962018-11-22 17:21:10 +0100504 concealment_events(other.concealment_events),
Ivo Creusen8d8ffdb2019-04-30 09:45:21 +0200505 inserted_samples_for_deceleration(
506 other.inserted_samples_for_deceleration),
507 removed_samples_for_acceleration(other.removed_samples_for_acceleration),
Jakob Ivarsson352ce5c2018-11-27 12:52:16 +0100508 jitter_buffer_flushes(other.jitter_buffer_flushes),
Sergey Silkin02371062019-01-31 16:45:42 +0100509 delayed_packet_outage_samples(other.delayed_packet_outage_samples),
Jakob Ivarsson232b3fd2019-03-06 09:18:40 +0100510 relative_packet_arrival_delay(other.relative_packet_arrival_delay),
Artem Titove618cc92020-03-11 11:18:54 +0100511 jitter_buffer_target_delay(other.jitter_buffer_target_delay),
Henrik Lundin44125fa2019-04-29 17:00:46 +0200512 interruption_count(other.interruption_count),
513 total_interruption_duration(other.total_interruption_duration),
Sergey Silkin02371062019-01-31 16:45:42 +0100514 freeze_count(other.freeze_count),
515 pause_count(other.pause_count),
516 total_freezes_duration(other.total_freezes_duration),
517 total_pauses_duration(other.total_pauses_duration),
518 total_frames_duration(other.total_frames_duration),
519 sum_squared_frame_durations(other.sum_squared_frame_durations) {}
hbos09bc1282016-11-08 06:29:22 -0800520
Yves Gerey665174f2018-06-19 15:03:05 +0200521RTCMediaStreamTrackStats::~RTCMediaStreamTrackStats() {}
hbos09bc1282016-11-08 06:29:22 -0800522
Steve Antond6a5cbd2017-08-18 09:40:25 -0700523// clang-format off
hbosfc5e0502016-10-06 02:06:10 -0700524WEBRTC_RTCSTATS_IMPL(RTCPeerConnectionStats, RTCStats, "peer-connection",
525 &data_channels_opened,
Nico Weber22f99252019-02-20 10:13:16 -0500526 &data_channels_closed)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700527// clang-format on
hbosd565b732016-08-30 14:04:35 -0700528
Yves Gerey665174f2018-06-19 15:03:05 +0200529RTCPeerConnectionStats::RTCPeerConnectionStats(const std::string& id,
530 int64_t timestamp_us)
531 : RTCPeerConnectionStats(std::string(id), timestamp_us) {}
hbosd565b732016-08-30 14:04:35 -0700532
Yves Gerey665174f2018-06-19 15:03:05 +0200533RTCPeerConnectionStats::RTCPeerConnectionStats(std::string&& id,
534 int64_t timestamp_us)
hbos0e6758d2016-08-31 07:57:36 -0700535 : RTCStats(std::move(id), timestamp_us),
hbosd565b732016-08-30 14:04:35 -0700536 data_channels_opened("dataChannelsOpened"),
Yves Gerey665174f2018-06-19 15:03:05 +0200537 data_channels_closed("dataChannelsClosed") {}
hbosd565b732016-08-30 14:04:35 -0700538
hbosfc5e0502016-10-06 02:06:10 -0700539RTCPeerConnectionStats::RTCPeerConnectionStats(
540 const RTCPeerConnectionStats& other)
541 : RTCStats(other.id(), other.timestamp_us()),
542 data_channels_opened(other.data_channels_opened),
Yves Gerey665174f2018-06-19 15:03:05 +0200543 data_channels_closed(other.data_channels_closed) {}
hbosfc5e0502016-10-06 02:06:10 -0700544
Yves Gerey665174f2018-06-19 15:03:05 +0200545RTCPeerConnectionStats::~RTCPeerConnectionStats() {}
hbosfc5e0502016-10-06 02:06:10 -0700546
Steve Antond6a5cbd2017-08-18 09:40:25 -0700547// clang-format off
hbos6ded1902016-11-01 01:50:46 -0700548WEBRTC_RTCSTATS_IMPL(RTCRTPStreamStats, RTCStats, "rtp",
549 &ssrc,
hbos6ded1902016-11-01 01:50:46 -0700550 &is_remote,
551 &media_type,
Philipp Hancke3bc01662018-08-28 14:55:03 +0200552 &kind,
hbosb0ae9202017-01-27 06:35:16 -0800553 &track_id,
hbos6ded1902016-11-01 01:50:46 -0700554 &transport_id,
555 &codec_id,
556 &fir_count,
557 &pli_count,
558 &nack_count,
hbos6769c492017-01-02 08:35:13 -0800559 &sli_count,
Nico Weber22f99252019-02-20 10:13:16 -0500560 &qp_sum)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700561// clang-format on
hbos6ded1902016-11-01 01:50:46 -0700562
Yves Gerey665174f2018-06-19 15:03:05 +0200563RTCRTPStreamStats::RTCRTPStreamStats(const std::string& id,
564 int64_t timestamp_us)
565 : RTCRTPStreamStats(std::string(id), timestamp_us) {}
hbos6ded1902016-11-01 01:50:46 -0700566
Yves Gerey665174f2018-06-19 15:03:05 +0200567RTCRTPStreamStats::RTCRTPStreamStats(std::string&& id, int64_t timestamp_us)
hbos6ded1902016-11-01 01:50:46 -0700568 : RTCStats(std::move(id), timestamp_us),
569 ssrc("ssrc"),
hbos6ded1902016-11-01 01:50:46 -0700570 is_remote("isRemote", false),
571 media_type("mediaType"),
Philipp Hancke3bc01662018-08-28 14:55:03 +0200572 kind("kind"),
hbosb0ae9202017-01-27 06:35:16 -0800573 track_id("trackId"),
hbos6ded1902016-11-01 01:50:46 -0700574 transport_id("transportId"),
575 codec_id("codecId"),
576 fir_count("firCount"),
577 pli_count("pliCount"),
578 nack_count("nackCount"),
hbos6769c492017-01-02 08:35:13 -0800579 sli_count("sliCount"),
Yves Gerey665174f2018-06-19 15:03:05 +0200580 qp_sum("qpSum") {}
hbos6ded1902016-11-01 01:50:46 -0700581
Yves Gerey665174f2018-06-19 15:03:05 +0200582RTCRTPStreamStats::RTCRTPStreamStats(const RTCRTPStreamStats& other)
hbos6ded1902016-11-01 01:50:46 -0700583 : RTCStats(other.id(), other.timestamp_us()),
584 ssrc(other.ssrc),
hbos6ded1902016-11-01 01:50:46 -0700585 is_remote(other.is_remote),
586 media_type(other.media_type),
Philipp Hancke3bc01662018-08-28 14:55:03 +0200587 kind(other.kind),
hbosb0ae9202017-01-27 06:35:16 -0800588 track_id(other.track_id),
hbos6ded1902016-11-01 01:50:46 -0700589 transport_id(other.transport_id),
590 codec_id(other.codec_id),
591 fir_count(other.fir_count),
592 pli_count(other.pli_count),
593 nack_count(other.nack_count),
hbos6769c492017-01-02 08:35:13 -0800594 sli_count(other.sli_count),
Yves Gerey665174f2018-06-19 15:03:05 +0200595 qp_sum(other.qp_sum) {}
hbos6ded1902016-11-01 01:50:46 -0700596
Yves Gerey665174f2018-06-19 15:03:05 +0200597RTCRTPStreamStats::~RTCRTPStreamStats() {}
hbos6ded1902016-11-01 01:50:46 -0700598
Steve Antond6a5cbd2017-08-18 09:40:25 -0700599// clang-format off
hbos6ded1902016-11-01 01:50:46 -0700600WEBRTC_RTCSTATS_IMPL(
hboseeafe942016-11-01 03:00:17 -0700601 RTCInboundRTPStreamStats, RTCRTPStreamStats, "inbound-rtp",
602 &packets_received,
Henrik Boström4a5dab02020-01-28 11:15:35 +0100603 &fec_packets_received,
604 &fec_packets_discarded,
hboseeafe942016-11-01 03:00:17 -0700605 &bytes_received,
Niels Möllerac0a4cb2019-10-09 15:01:33 +0200606 &header_bytes_received,
hboseeafe942016-11-01 03:00:17 -0700607 &packets_lost,
Henrik Boström01738c62019-04-15 17:32:00 +0200608 &last_packet_received_timestamp,
hboseeafe942016-11-01 03:00:17 -0700609 &jitter,
Eldar Rello4e5bc9f2020-07-06 14:18:07 +0300610 &jitter_buffer_delay,
611 &jitter_buffer_emitted_count,
612 &total_samples_received,
613 &concealed_samples,
614 &silent_concealed_samples,
615 &concealment_events,
616 &inserted_samples_for_deceleration,
617 &removed_samples_for_acceleration,
618 &audio_level,
619 &total_audio_energy,
620 &total_samples_duration,
621 &frames_received,
hbosa7a9be12017-03-01 01:02:45 -0800622 &round_trip_time,
hboseeafe942016-11-01 03:00:17 -0700623 &packets_discarded,
624 &packets_repaired,
625 &burst_packets_lost,
626 &burst_packets_discarded,
627 &burst_loss_count,
628 &burst_discard_count,
629 &burst_loss_rate,
630 &burst_discard_rate,
631 &gap_loss_rate,
hbos6769c492017-01-02 08:35:13 -0800632 &gap_discard_rate,
Eldar Rello4e5bc9f2020-07-06 14:18:07 +0300633 &frame_width,
634 &frame_height,
635 &frame_bit_depth,
636 &frames_per_second,
Henrik Boström2e069262019-04-09 13:59:31 +0200637 &frames_decoded,
Rasmus Brandt2efae772019-06-27 14:29:34 +0200638 &key_frames_decoded,
Eldar Rello4e5bc9f2020-07-06 14:18:07 +0300639 &frames_dropped,
Johannes Kronbfd343b2019-07-01 10:07:50 +0200640 &total_decode_time,
Johannes Kron00376e12019-11-25 10:25:42 +0100641 &total_inter_frame_delay,
642 &total_squared_inter_frame_delay,
Henrik Boström6b430862019-08-16 13:09:51 +0200643 &content_type,
Åsa Perssonfcf79cc2019-10-22 15:23:44 +0200644 &estimated_playout_timestamp,
Henrik Boström6b430862019-08-16 13:09:51 +0200645 &decoder_implementation)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700646// clang-format on
hboseeafe942016-11-01 03:00:17 -0700647
Yves Gerey665174f2018-06-19 15:03:05 +0200648RTCInboundRTPStreamStats::RTCInboundRTPStreamStats(const std::string& id,
649 int64_t timestamp_us)
650 : RTCInboundRTPStreamStats(std::string(id), timestamp_us) {}
hboseeafe942016-11-01 03:00:17 -0700651
Yves Gerey665174f2018-06-19 15:03:05 +0200652RTCInboundRTPStreamStats::RTCInboundRTPStreamStats(std::string&& id,
653 int64_t timestamp_us)
hboseeafe942016-11-01 03:00:17 -0700654 : RTCRTPStreamStats(std::move(id), timestamp_us),
655 packets_received("packetsReceived"),
Ivo Creusen8d8ffdb2019-04-30 09:45:21 +0200656 fec_packets_received("fecPacketsReceived"),
657 fec_packets_discarded("fecPacketsDiscarded"),
hboseeafe942016-11-01 03:00:17 -0700658 bytes_received("bytesReceived"),
Niels Möllerac0a4cb2019-10-09 15:01:33 +0200659 header_bytes_received("headerBytesReceived"),
hboseeafe942016-11-01 03:00:17 -0700660 packets_lost("packetsLost"),
Henrik Boström01738c62019-04-15 17:32:00 +0200661 last_packet_received_timestamp("lastPacketReceivedTimestamp"),
hboseeafe942016-11-01 03:00:17 -0700662 jitter("jitter"),
Eldar Rello4e5bc9f2020-07-06 14:18:07 +0300663 jitter_buffer_delay("jitterBufferDelay"),
664 jitter_buffer_emitted_count("jitterBufferEmittedCount"),
665 total_samples_received("totalSamplesReceived"),
666 concealed_samples("concealedSamples"),
667 silent_concealed_samples("silentConcealedSamples"),
668 concealment_events("concealmentEvents"),
669 inserted_samples_for_deceleration("insertedSamplesForDeceleration"),
670 removed_samples_for_acceleration("removedSamplesForAcceleration"),
671 audio_level("audioLevel"),
672 total_audio_energy("totalAudioEnergy"),
673 total_samples_duration("totalSamplesDuration"),
674 frames_received("framesReceived"),
hbosa7a9be12017-03-01 01:02:45 -0800675 round_trip_time("roundTripTime"),
hboseeafe942016-11-01 03:00:17 -0700676 packets_discarded("packetsDiscarded"),
677 packets_repaired("packetsRepaired"),
678 burst_packets_lost("burstPacketsLost"),
679 burst_packets_discarded("burstPacketsDiscarded"),
680 burst_loss_count("burstLossCount"),
681 burst_discard_count("burstDiscardCount"),
682 burst_loss_rate("burstLossRate"),
683 burst_discard_rate("burstDiscardRate"),
684 gap_loss_rate("gapLossRate"),
hbos6769c492017-01-02 08:35:13 -0800685 gap_discard_rate("gapDiscardRate"),
Eldar Rello4e5bc9f2020-07-06 14:18:07 +0300686 frame_width("frameWidth"),
687 frame_height("frameHeight"),
688 frame_bit_depth("frameBitDepth"),
689 frames_per_second("framesPerSecond"),
Henrik Boström2e069262019-04-09 13:59:31 +0200690 frames_decoded("framesDecoded"),
Rasmus Brandt2efae772019-06-27 14:29:34 +0200691 key_frames_decoded("keyFramesDecoded"),
Eldar Rello4e5bc9f2020-07-06 14:18:07 +0300692 frames_dropped("framesDropped"),
Johannes Kronbfd343b2019-07-01 10:07:50 +0200693 total_decode_time("totalDecodeTime"),
Johannes Kron00376e12019-11-25 10:25:42 +0100694 total_inter_frame_delay("totalInterFrameDelay"),
695 total_squared_inter_frame_delay("totalSquaredInterFrameDelay"),
Henrik Boström6b430862019-08-16 13:09:51 +0200696 content_type("contentType"),
Åsa Perssonfcf79cc2019-10-22 15:23:44 +0200697 estimated_playout_timestamp("estimatedPlayoutTimestamp"),
Henrik Boström6b430862019-08-16 13:09:51 +0200698 decoder_implementation("decoderImplementation") {}
hboseeafe942016-11-01 03:00:17 -0700699
700RTCInboundRTPStreamStats::RTCInboundRTPStreamStats(
701 const RTCInboundRTPStreamStats& other)
702 : RTCRTPStreamStats(other),
703 packets_received(other.packets_received),
Ivo Creusen8d8ffdb2019-04-30 09:45:21 +0200704 fec_packets_received(other.fec_packets_received),
705 fec_packets_discarded(other.fec_packets_discarded),
hboseeafe942016-11-01 03:00:17 -0700706 bytes_received(other.bytes_received),
Niels Möllerac0a4cb2019-10-09 15:01:33 +0200707 header_bytes_received(other.header_bytes_received),
hboseeafe942016-11-01 03:00:17 -0700708 packets_lost(other.packets_lost),
Henrik Boström01738c62019-04-15 17:32:00 +0200709 last_packet_received_timestamp(other.last_packet_received_timestamp),
hboseeafe942016-11-01 03:00:17 -0700710 jitter(other.jitter),
Eldar Rello4e5bc9f2020-07-06 14:18:07 +0300711 jitter_buffer_delay(other.jitter_buffer_delay),
712 jitter_buffer_emitted_count(other.jitter_buffer_emitted_count),
713 total_samples_received(other.total_samples_received),
714 concealed_samples(other.concealed_samples),
715 silent_concealed_samples(other.silent_concealed_samples),
716 concealment_events(other.concealment_events),
717 inserted_samples_for_deceleration(
718 other.inserted_samples_for_deceleration),
719 removed_samples_for_acceleration(other.removed_samples_for_acceleration),
720 audio_level(other.audio_level),
721 total_audio_energy(other.total_audio_energy),
722 total_samples_duration(other.total_samples_duration),
723 frames_received(other.frames_received),
hbosa7a9be12017-03-01 01:02:45 -0800724 round_trip_time(other.round_trip_time),
hboseeafe942016-11-01 03:00:17 -0700725 packets_discarded(other.packets_discarded),
726 packets_repaired(other.packets_repaired),
727 burst_packets_lost(other.burst_packets_lost),
728 burst_packets_discarded(other.burst_packets_discarded),
729 burst_loss_count(other.burst_loss_count),
730 burst_discard_count(other.burst_discard_count),
731 burst_loss_rate(other.burst_loss_rate),
732 burst_discard_rate(other.burst_discard_rate),
733 gap_loss_rate(other.gap_loss_rate),
hbos6769c492017-01-02 08:35:13 -0800734 gap_discard_rate(other.gap_discard_rate),
Eldar Rello4e5bc9f2020-07-06 14:18:07 +0300735 frame_width(other.frame_width),
736 frame_height(other.frame_height),
737 frame_bit_depth(other.frame_bit_depth),
738 frames_per_second(other.frames_per_second),
Henrik Boström2e069262019-04-09 13:59:31 +0200739 frames_decoded(other.frames_decoded),
Rasmus Brandt2efae772019-06-27 14:29:34 +0200740 key_frames_decoded(other.key_frames_decoded),
Eldar Rello4e5bc9f2020-07-06 14:18:07 +0300741 frames_dropped(other.frames_dropped),
Johannes Kronbfd343b2019-07-01 10:07:50 +0200742 total_decode_time(other.total_decode_time),
Johannes Kron00376e12019-11-25 10:25:42 +0100743 total_inter_frame_delay(other.total_inter_frame_delay),
744 total_squared_inter_frame_delay(other.total_squared_inter_frame_delay),
Henrik Boström6b430862019-08-16 13:09:51 +0200745 content_type(other.content_type),
Åsa Perssonfcf79cc2019-10-22 15:23:44 +0200746 estimated_playout_timestamp(other.estimated_playout_timestamp),
Henrik Boström6b430862019-08-16 13:09:51 +0200747 decoder_implementation(other.decoder_implementation) {}
hboseeafe942016-11-01 03:00:17 -0700748
Yves Gerey665174f2018-06-19 15:03:05 +0200749RTCInboundRTPStreamStats::~RTCInboundRTPStreamStats() {}
hboseeafe942016-11-01 03:00:17 -0700750
Steve Antond6a5cbd2017-08-18 09:40:25 -0700751// clang-format off
hboseeafe942016-11-01 03:00:17 -0700752WEBRTC_RTCSTATS_IMPL(
hbos6ded1902016-11-01 01:50:46 -0700753 RTCOutboundRTPStreamStats, RTCRTPStreamStats, "outbound-rtp",
Henrik Boström646fda02019-05-22 15:49:42 +0200754 &media_source_id,
Henrik Boström4f40fa52019-12-19 13:27:27 +0100755 &remote_id,
Henrik Boströma0ff50c2020-05-05 15:54:46 +0200756 &rid,
hbos6ded1902016-11-01 01:50:46 -0700757 &packets_sent,
Henrik Boströmcf96e0f2019-04-17 13:51:53 +0200758 &retransmitted_packets_sent,
hbos6ded1902016-11-01 01:50:46 -0700759 &bytes_sent,
Niels Möllerac0a4cb2019-10-09 15:01:33 +0200760 &header_bytes_sent,
Henrik Boströmcf96e0f2019-04-17 13:51:53 +0200761 &retransmitted_bytes_sent,
hbos6ded1902016-11-01 01:50:46 -0700762 &target_bitrate,
Henrik Boströmf71362f2019-04-08 16:14:23 +0200763 &frames_encoded,
Rasmus Brandt2efae772019-06-27 14:29:34 +0200764 &key_frames_encoded,
Henrik Boström2e069262019-04-09 13:59:31 +0200765 &total_encode_time,
Henrik Boström23aff9b2019-05-20 15:15:38 +0200766 &total_encoded_bytes_target,
Henrik Boströma0ff50c2020-05-05 15:54:46 +0200767 &frame_width,
768 &frame_height,
769 &frames_per_second,
770 &frames_sent,
771 &huge_frames_sent,
Henrik Boström9fe18342019-05-16 18:38:20 +0200772 &total_packet_send_delay,
Henrik Boströmce33b6a2019-05-28 17:42:38 +0200773 &quality_limitation_reason,
Evan Shrubsolecc62b162019-09-09 11:26:45 +0200774 &quality_limitation_resolution_changes,
Henrik Boström6b430862019-08-16 13:09:51 +0200775 &content_type,
776 &encoder_implementation)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700777// clang-format on
hbos6ded1902016-11-01 01:50:46 -0700778
Yves Gerey665174f2018-06-19 15:03:05 +0200779RTCOutboundRTPStreamStats::RTCOutboundRTPStreamStats(const std::string& id,
780 int64_t timestamp_us)
781 : RTCOutboundRTPStreamStats(std::string(id), timestamp_us) {}
hbos6ded1902016-11-01 01:50:46 -0700782
Yves Gerey665174f2018-06-19 15:03:05 +0200783RTCOutboundRTPStreamStats::RTCOutboundRTPStreamStats(std::string&& id,
784 int64_t timestamp_us)
hbos6ded1902016-11-01 01:50:46 -0700785 : RTCRTPStreamStats(std::move(id), timestamp_us),
Henrik Boström646fda02019-05-22 15:49:42 +0200786 media_source_id("mediaSourceId"),
Henrik Boström4f40fa52019-12-19 13:27:27 +0100787 remote_id("remoteId"),
Henrik Boströma0ff50c2020-05-05 15:54:46 +0200788 rid("rid"),
hbos6ded1902016-11-01 01:50:46 -0700789 packets_sent("packetsSent"),
Henrik Boströmcf96e0f2019-04-17 13:51:53 +0200790 retransmitted_packets_sent("retransmittedPacketsSent"),
hbos6ded1902016-11-01 01:50:46 -0700791 bytes_sent("bytesSent"),
Niels Möllerac0a4cb2019-10-09 15:01:33 +0200792 header_bytes_sent("headerBytesSent"),
Henrik Boströmcf96e0f2019-04-17 13:51:53 +0200793 retransmitted_bytes_sent("retransmittedBytesSent"),
hbos6ded1902016-11-01 01:50:46 -0700794 target_bitrate("targetBitrate"),
Henrik Boströmf71362f2019-04-08 16:14:23 +0200795 frames_encoded("framesEncoded"),
Rasmus Brandt2efae772019-06-27 14:29:34 +0200796 key_frames_encoded("keyFramesEncoded"),
Henrik Boström2e069262019-04-09 13:59:31 +0200797 total_encode_time("totalEncodeTime"),
Henrik Boström23aff9b2019-05-20 15:15:38 +0200798 total_encoded_bytes_target("totalEncodedBytesTarget"),
Henrik Boströma0ff50c2020-05-05 15:54:46 +0200799 frame_width("frameWidth"),
800 frame_height("frameHeight"),
801 frames_per_second("framesPerSecond"),
802 frames_sent("framesSent"),
803 huge_frames_sent("hugeFramesSent"),
Henrik Boström9fe18342019-05-16 18:38:20 +0200804 total_packet_send_delay("totalPacketSendDelay"),
Henrik Boströmce33b6a2019-05-28 17:42:38 +0200805 quality_limitation_reason("qualityLimitationReason"),
Evan Shrubsolecc62b162019-09-09 11:26:45 +0200806 quality_limitation_resolution_changes(
807 "qualityLimitationResolutionChanges"),
Henrik Boström6b430862019-08-16 13:09:51 +0200808 content_type("contentType"),
809 encoder_implementation("encoderImplementation") {}
hbos6ded1902016-11-01 01:50:46 -0700810
811RTCOutboundRTPStreamStats::RTCOutboundRTPStreamStats(
812 const RTCOutboundRTPStreamStats& other)
813 : RTCRTPStreamStats(other),
Henrik Boström646fda02019-05-22 15:49:42 +0200814 media_source_id(other.media_source_id),
Henrik Boström4f40fa52019-12-19 13:27:27 +0100815 remote_id(other.remote_id),
Henrik Boströma0ff50c2020-05-05 15:54:46 +0200816 rid(other.rid),
hbos6ded1902016-11-01 01:50:46 -0700817 packets_sent(other.packets_sent),
Henrik Boströmcf96e0f2019-04-17 13:51:53 +0200818 retransmitted_packets_sent(other.retransmitted_packets_sent),
hbos6ded1902016-11-01 01:50:46 -0700819 bytes_sent(other.bytes_sent),
Niels Möllerac0a4cb2019-10-09 15:01:33 +0200820 header_bytes_sent(other.header_bytes_sent),
Henrik Boströmcf96e0f2019-04-17 13:51:53 +0200821 retransmitted_bytes_sent(other.retransmitted_bytes_sent),
hbos6ded1902016-11-01 01:50:46 -0700822 target_bitrate(other.target_bitrate),
Henrik Boströmf71362f2019-04-08 16:14:23 +0200823 frames_encoded(other.frames_encoded),
Rasmus Brandt2efae772019-06-27 14:29:34 +0200824 key_frames_encoded(other.key_frames_encoded),
Henrik Boström2e069262019-04-09 13:59:31 +0200825 total_encode_time(other.total_encode_time),
Henrik Boström23aff9b2019-05-20 15:15:38 +0200826 total_encoded_bytes_target(other.total_encoded_bytes_target),
Henrik Boströma0ff50c2020-05-05 15:54:46 +0200827 frame_width(other.frame_width),
828 frame_height(other.frame_height),
829 frames_per_second(other.frames_per_second),
830 frames_sent(other.frames_sent),
831 huge_frames_sent(other.huge_frames_sent),
Henrik Boström9fe18342019-05-16 18:38:20 +0200832 total_packet_send_delay(other.total_packet_send_delay),
Henrik Boströmce33b6a2019-05-28 17:42:38 +0200833 quality_limitation_reason(other.quality_limitation_reason),
Evan Shrubsolecc62b162019-09-09 11:26:45 +0200834 quality_limitation_resolution_changes(
835 other.quality_limitation_resolution_changes),
Henrik Boström6b430862019-08-16 13:09:51 +0200836 content_type(other.content_type),
837 encoder_implementation(other.encoder_implementation) {}
hbos6ded1902016-11-01 01:50:46 -0700838
Yves Gerey665174f2018-06-19 15:03:05 +0200839RTCOutboundRTPStreamStats::~RTCOutboundRTPStreamStats() {}
hbos6ded1902016-11-01 01:50:46 -0700840
Steve Antond6a5cbd2017-08-18 09:40:25 -0700841// clang-format off
Henrik Boström883eefc2019-05-27 13:40:25 +0200842WEBRTC_RTCSTATS_IMPL(
843 RTCRemoteInboundRtpStreamStats, RTCStats, "remote-inbound-rtp",
844 &ssrc,
845 &kind,
846 &transport_id,
847 &codec_id,
848 &packets_lost,
849 &jitter,
850 &local_id,
851 &round_trip_time)
852// clang-format on
853
854RTCRemoteInboundRtpStreamStats::RTCRemoteInboundRtpStreamStats(
855 const std::string& id,
856 int64_t timestamp_us)
857 : RTCRemoteInboundRtpStreamStats(std::string(id), timestamp_us) {}
858
859RTCRemoteInboundRtpStreamStats::RTCRemoteInboundRtpStreamStats(
860 std::string&& id,
861 int64_t timestamp_us)
862 : RTCStats(std::move(id), timestamp_us),
863 ssrc("ssrc"),
864 kind("kind"),
865 transport_id("transportId"),
866 codec_id("codecId"),
867 packets_lost("packetsLost"),
868 jitter("jitter"),
869 local_id("localId"),
870 round_trip_time("roundTripTime") {}
871
872RTCRemoteInboundRtpStreamStats::RTCRemoteInboundRtpStreamStats(
873 const RTCRemoteInboundRtpStreamStats& other)
874 : RTCStats(other),
875 ssrc(other.ssrc),
876 kind(other.kind),
877 transport_id(other.transport_id),
878 codec_id(other.codec_id),
879 packets_lost(other.packets_lost),
880 jitter(other.jitter),
881 local_id(other.local_id),
882 round_trip_time(other.round_trip_time) {}
883
884RTCRemoteInboundRtpStreamStats::~RTCRemoteInboundRtpStreamStats() {}
885
886// clang-format off
Henrik Boström646fda02019-05-22 15:49:42 +0200887WEBRTC_RTCSTATS_IMPL(RTCMediaSourceStats, RTCStats, "parent-media-source",
888 &track_identifier,
889 &kind)
890// clang-format on
891
892RTCMediaSourceStats::RTCMediaSourceStats(const std::string& id,
893 int64_t timestamp_us)
894 : RTCMediaSourceStats(std::string(id), timestamp_us) {}
895
896RTCMediaSourceStats::RTCMediaSourceStats(std::string&& id, int64_t timestamp_us)
897 : RTCStats(std::move(id), timestamp_us),
898 track_identifier("trackIdentifier"),
899 kind("kind") {}
900
901RTCMediaSourceStats::RTCMediaSourceStats(const RTCMediaSourceStats& other)
902 : RTCStats(other.id(), other.timestamp_us()),
903 track_identifier(other.track_identifier),
904 kind(other.kind) {}
905
906RTCMediaSourceStats::~RTCMediaSourceStats() {}
907
908// clang-format off
Henrik Boströmd2c336f2019-07-03 17:11:10 +0200909WEBRTC_RTCSTATS_IMPL(RTCAudioSourceStats, RTCMediaSourceStats, "media-source",
910 &audio_level,
911 &total_audio_energy,
912 &total_samples_duration)
Henrik Boström646fda02019-05-22 15:49:42 +0200913// clang-format on
914
915RTCAudioSourceStats::RTCAudioSourceStats(const std::string& id,
916 int64_t timestamp_us)
917 : RTCAudioSourceStats(std::string(id), timestamp_us) {}
918
919RTCAudioSourceStats::RTCAudioSourceStats(std::string&& id, int64_t timestamp_us)
Henrik Boströmd2c336f2019-07-03 17:11:10 +0200920 : RTCMediaSourceStats(std::move(id), timestamp_us),
921 audio_level("audioLevel"),
922 total_audio_energy("totalAudioEnergy"),
923 total_samples_duration("totalSamplesDuration") {}
Henrik Boström646fda02019-05-22 15:49:42 +0200924
925RTCAudioSourceStats::RTCAudioSourceStats(const RTCAudioSourceStats& other)
Henrik Boströmd2c336f2019-07-03 17:11:10 +0200926 : RTCMediaSourceStats(other),
927 audio_level(other.audio_level),
928 total_audio_energy(other.total_audio_energy),
929 total_samples_duration(other.total_samples_duration) {}
Henrik Boström646fda02019-05-22 15:49:42 +0200930
931RTCAudioSourceStats::~RTCAudioSourceStats() {}
932
933// clang-format off
934WEBRTC_RTCSTATS_IMPL(RTCVideoSourceStats, RTCMediaSourceStats, "media-source",
935 &width,
936 &height,
937 &frames,
938 &frames_per_second)
939// clang-format on
940
941RTCVideoSourceStats::RTCVideoSourceStats(const std::string& id,
942 int64_t timestamp_us)
943 : RTCVideoSourceStats(std::string(id), timestamp_us) {}
944
945RTCVideoSourceStats::RTCVideoSourceStats(std::string&& id, int64_t timestamp_us)
946 : RTCMediaSourceStats(std::move(id), timestamp_us),
947 width("width"),
948 height("height"),
949 frames("frames"),
950 frames_per_second("framesPerSecond") {}
951
952RTCVideoSourceStats::RTCVideoSourceStats(const RTCVideoSourceStats& other)
953 : RTCMediaSourceStats(other),
954 width(other.width),
955 height(other.height),
956 frames(other.frames),
957 frames_per_second(other.frames_per_second) {}
958
959RTCVideoSourceStats::~RTCVideoSourceStats() {}
960
961// clang-format off
hbos2fa7c672016-10-24 04:00:05 -0700962WEBRTC_RTCSTATS_IMPL(RTCTransportStats, RTCStats, "transport",
963 &bytes_sent,
Artem Titovedacbd52020-07-06 16:06:37 +0200964 &packets_sent,
hbos2fa7c672016-10-24 04:00:05 -0700965 &bytes_received,
Artem Titovedacbd52020-07-06 16:06:37 +0200966 &packets_received,
hbos2fa7c672016-10-24 04:00:05 -0700967 &rtcp_transport_stats_id,
hbos7064d592017-01-16 07:38:02 -0800968 &dtls_state,
hbos2fa7c672016-10-24 04:00:05 -0700969 &selected_candidate_pair_id,
970 &local_certificate_id,
Jonas Oreland149dc722019-08-28 08:10:27 +0200971 &remote_certificate_id,
Harald Alvestrand5cb78072019-10-28 09:51:17 +0100972 &tls_version,
973 &dtls_cipher,
974 &srtp_cipher,
Jonas Oreland149dc722019-08-28 08:10:27 +0200975 &selected_candidate_pair_changes)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700976// clang-format on
hbos2fa7c672016-10-24 04:00:05 -0700977
Yves Gerey665174f2018-06-19 15:03:05 +0200978RTCTransportStats::RTCTransportStats(const std::string& id,
979 int64_t timestamp_us)
980 : RTCTransportStats(std::string(id), timestamp_us) {}
hbos2fa7c672016-10-24 04:00:05 -0700981
Yves Gerey665174f2018-06-19 15:03:05 +0200982RTCTransportStats::RTCTransportStats(std::string&& id, int64_t timestamp_us)
hbos2fa7c672016-10-24 04:00:05 -0700983 : RTCStats(std::move(id), timestamp_us),
984 bytes_sent("bytesSent"),
Artem Titovedacbd52020-07-06 16:06:37 +0200985 packets_sent("packetsSent"),
hbos2fa7c672016-10-24 04:00:05 -0700986 bytes_received("bytesReceived"),
Artem Titovedacbd52020-07-06 16:06:37 +0200987 packets_received("packetsReceived"),
hbos2fa7c672016-10-24 04:00:05 -0700988 rtcp_transport_stats_id("rtcpTransportStatsId"),
hbos7064d592017-01-16 07:38:02 -0800989 dtls_state("dtlsState"),
hbos2fa7c672016-10-24 04:00:05 -0700990 selected_candidate_pair_id("selectedCandidatePairId"),
991 local_certificate_id("localCertificateId"),
Jonas Oreland149dc722019-08-28 08:10:27 +0200992 remote_certificate_id("remoteCertificateId"),
Harald Alvestrand5cb78072019-10-28 09:51:17 +0100993 tls_version("tlsVersion"),
994 dtls_cipher("dtlsCipher"),
995 srtp_cipher("srtpCipher"),
Jonas Oreland149dc722019-08-28 08:10:27 +0200996 selected_candidate_pair_changes("selectedCandidatePairChanges") {}
hbos2fa7c672016-10-24 04:00:05 -0700997
Yves Gerey665174f2018-06-19 15:03:05 +0200998RTCTransportStats::RTCTransportStats(const RTCTransportStats& other)
hbos2fa7c672016-10-24 04:00:05 -0700999 : RTCStats(other.id(), other.timestamp_us()),
1000 bytes_sent(other.bytes_sent),
Artem Titovedacbd52020-07-06 16:06:37 +02001001 packets_sent(other.packets_sent),
hbos2fa7c672016-10-24 04:00:05 -07001002 bytes_received(other.bytes_received),
Artem Titovedacbd52020-07-06 16:06:37 +02001003 packets_received(other.packets_received),
hbos2fa7c672016-10-24 04:00:05 -07001004 rtcp_transport_stats_id(other.rtcp_transport_stats_id),
hbos7064d592017-01-16 07:38:02 -08001005 dtls_state(other.dtls_state),
hbos2fa7c672016-10-24 04:00:05 -07001006 selected_candidate_pair_id(other.selected_candidate_pair_id),
1007 local_certificate_id(other.local_certificate_id),
Jonas Oreland149dc722019-08-28 08:10:27 +02001008 remote_certificate_id(other.remote_certificate_id),
Harald Alvestrand5cb78072019-10-28 09:51:17 +01001009 tls_version(other.tls_version),
1010 dtls_cipher(other.dtls_cipher),
1011 srtp_cipher(other.srtp_cipher),
Jonas Oreland149dc722019-08-28 08:10:27 +02001012 selected_candidate_pair_changes(other.selected_candidate_pair_changes) {}
hbos2fa7c672016-10-24 04:00:05 -07001013
Yves Gerey665174f2018-06-19 15:03:05 +02001014RTCTransportStats::~RTCTransportStats() {}
hbos2fa7c672016-10-24 04:00:05 -07001015
hbosd565b732016-08-30 14:04:35 -07001016} // namespace webrtc