blob: 734f16273c2d4ae14fdc2c1f8cf929f660b2e121 [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
Philipp Hancke69c1df22022-04-22 15:46:24 +020065// https://w3c.github.io/webrtc-stats/#dom-rtcdtlsrole
66const char* const RTCDtlsRole::kUnknown = "unknown";
67const char* const RTCDtlsRole::kClient = "client";
68const char* const RTCDtlsRole::kServer = "server";
69
Philipp Hanckecc1b9b02022-05-04 18:58:26 +020070// https://www.w3.org/TR/webrtc/#rtcicerole
71const char* const RTCIceRole::kUnknown = "unknown";
72const char* const RTCIceRole::kControlled = "controlled";
73const char* const RTCIceRole::kControlling = "controlling";
74
Philipp Hancke1f491572022-05-09 17:43:31 +020075// https://www.w3.org/TR/webrtc/#dom-rtcicetransportstate
76const char* const RTCIceTransportState::kNew = "new";
77const char* const RTCIceTransportState::kChecking = "checking";
78const char* const RTCIceTransportState::kConnected = "connected";
79const char* const RTCIceTransportState::kCompleted = "completed";
80const char* const RTCIceTransportState::kDisconnected = "disconnected";
81const char* const RTCIceTransportState::kFailed = "failed";
82const char* const RTCIceTransportState::kClosed = "closed";
83
Steve Antond6a5cbd2017-08-18 09:40:25 -070084// clang-format off
hbos2fa7c672016-10-24 04:00:05 -070085WEBRTC_RTCSTATS_IMPL(RTCCertificateStats, RTCStats, "certificate",
86 &fingerprint,
87 &fingerprint_algorithm,
88 &base64_certificate,
Nico Weber22f99252019-02-20 10:13:16 -050089 &issuer_certificate_id)
Steve Antond6a5cbd2017-08-18 09:40:25 -070090// clang-format on
hbos2fa7c672016-10-24 04:00:05 -070091
Yves Gerey665174f2018-06-19 15:03:05 +020092RTCCertificateStats::RTCCertificateStats(const std::string& id,
93 int64_t timestamp_us)
94 : RTCCertificateStats(std::string(id), timestamp_us) {}
hbos2fa7c672016-10-24 04:00:05 -070095
Yves Gerey665174f2018-06-19 15:03:05 +020096RTCCertificateStats::RTCCertificateStats(std::string&& id, int64_t timestamp_us)
hbos2fa7c672016-10-24 04:00:05 -070097 : RTCStats(std::move(id), timestamp_us),
98 fingerprint("fingerprint"),
99 fingerprint_algorithm("fingerprintAlgorithm"),
100 base64_certificate("base64Certificate"),
Yves Gerey665174f2018-06-19 15:03:05 +0200101 issuer_certificate_id("issuerCertificateId") {}
hbos2fa7c672016-10-24 04:00:05 -0700102
Philipp Hancke6738b012022-10-11 13:04:03 +0200103RTCCertificateStats::RTCCertificateStats(const RTCCertificateStats& other) =
104 default;
Yves Gerey665174f2018-06-19 15:03:05 +0200105RTCCertificateStats::~RTCCertificateStats() {}
hbos2fa7c672016-10-24 04:00:05 -0700106
Steve Antond6a5cbd2017-08-18 09:40:25 -0700107// clang-format off
hbos0adb8282016-11-23 02:32:06 -0800108WEBRTC_RTCSTATS_IMPL(RTCCodecStats, RTCStats, "codec",
Philipp Hancke95157a02020-11-16 20:08:27 +0100109 &transport_id,
hbos0adb8282016-11-23 02:32:06 -0800110 &payload_type,
hbos13f54b22017-02-28 06:56:04 -0800111 &mime_type,
hbos0adb8282016-11-23 02:32:06 -0800112 &clock_rate,
113 &channels,
Henrik Boström6b430862019-08-16 13:09:51 +0200114 &sdp_fmtp_line)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700115// clang-format on
hbos0adb8282016-11-23 02:32:06 -0800116
Yves Gerey665174f2018-06-19 15:03:05 +0200117RTCCodecStats::RTCCodecStats(const std::string& id, int64_t timestamp_us)
118 : RTCCodecStats(std::string(id), timestamp_us) {}
hbos0adb8282016-11-23 02:32:06 -0800119
Yves Gerey665174f2018-06-19 15:03:05 +0200120RTCCodecStats::RTCCodecStats(std::string&& id, int64_t timestamp_us)
hbos0adb8282016-11-23 02:32:06 -0800121 : RTCStats(std::move(id), timestamp_us),
Philipp Hancke95157a02020-11-16 20:08:27 +0100122 transport_id("transportId"),
hbos0adb8282016-11-23 02:32:06 -0800123 payload_type("payloadType"),
hbos13f54b22017-02-28 06:56:04 -0800124 mime_type("mimeType"),
hbos0adb8282016-11-23 02:32:06 -0800125 clock_rate("clockRate"),
126 channels("channels"),
Henrik Boström6b430862019-08-16 13:09:51 +0200127 sdp_fmtp_line("sdpFmtpLine") {}
hbos0adb8282016-11-23 02:32:06 -0800128
Philipp Hancke6738b012022-10-11 13:04:03 +0200129RTCCodecStats::RTCCodecStats(const RTCCodecStats& other) = default;
hbos0adb8282016-11-23 02:32:06 -0800130
Yves Gerey665174f2018-06-19 15:03:05 +0200131RTCCodecStats::~RTCCodecStats() {}
hbos0adb8282016-11-23 02:32:06 -0800132
Steve Antond6a5cbd2017-08-18 09:40:25 -0700133// clang-format off
hbos2fa7c672016-10-24 04:00:05 -0700134WEBRTC_RTCSTATS_IMPL(RTCDataChannelStats, RTCStats, "data-channel",
135 &label,
136 &protocol,
Harald Alvestrand10ef8472020-06-05 15:38:51 +0200137 &data_channel_identifier,
hbos2fa7c672016-10-24 04:00:05 -0700138 &state,
139 &messages_sent,
140 &bytes_sent,
141 &messages_received,
Nico Weber22f99252019-02-20 10:13:16 -0500142 &bytes_received)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700143// clang-format on
hbos2fa7c672016-10-24 04:00:05 -0700144
Yves Gerey665174f2018-06-19 15:03:05 +0200145RTCDataChannelStats::RTCDataChannelStats(const std::string& id,
146 int64_t timestamp_us)
147 : RTCDataChannelStats(std::string(id), timestamp_us) {}
hbos2fa7c672016-10-24 04:00:05 -0700148
Yves Gerey665174f2018-06-19 15:03:05 +0200149RTCDataChannelStats::RTCDataChannelStats(std::string&& id, int64_t timestamp_us)
hbos2fa7c672016-10-24 04:00:05 -0700150 : RTCStats(std::move(id), timestamp_us),
151 label("label"),
152 protocol("protocol"),
Harald Alvestrand10ef8472020-06-05 15:38:51 +0200153 data_channel_identifier("dataChannelIdentifier"),
hbos2fa7c672016-10-24 04:00:05 -0700154 state("state"),
155 messages_sent("messagesSent"),
156 bytes_sent("bytesSent"),
157 messages_received("messagesReceived"),
Yves Gerey665174f2018-06-19 15:03:05 +0200158 bytes_received("bytesReceived") {}
hbos2fa7c672016-10-24 04:00:05 -0700159
Philipp Hancke6738b012022-10-11 13:04:03 +0200160RTCDataChannelStats::RTCDataChannelStats(const RTCDataChannelStats& other) =
161 default;
hbos2fa7c672016-10-24 04:00:05 -0700162
Yves Gerey665174f2018-06-19 15:03:05 +0200163RTCDataChannelStats::~RTCDataChannelStats() {}
hbos2fa7c672016-10-24 04:00:05 -0700164
Steve Antond6a5cbd2017-08-18 09:40:25 -0700165// clang-format off
hbosc47a0c32016-10-11 14:54:49 -0700166WEBRTC_RTCSTATS_IMPL(RTCIceCandidatePairStats, RTCStats, "candidate-pair",
167 &transport_id,
168 &local_candidate_id,
169 &remote_candidate_id,
170 &state,
171 &priority,
172 &nominated,
173 &writable,
Taylor Brandstetter79326ea2021-09-28 15:09:53 -0700174 &packets_sent,
175 &packets_received,
hbosc47a0c32016-10-11 14:54:49 -0700176 &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,
hbosc47a0c32016-10-11 14:54:49 -0700186 &consent_requests_sent,
Taylor Brandstetter79326ea2021-09-28 15:09:53 -0700187 &packets_discarded_on_send,
Philipp Hancke0487c572022-11-01 17:03:01 +0100188 &bytes_discarded_on_send,
189 &last_packet_received_timestamp,
190 &last_packet_sent_timestamp)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700191// clang-format on
hbosc47a0c32016-10-11 14:54:49 -0700192
Yves Gerey665174f2018-06-19 15:03:05 +0200193RTCIceCandidatePairStats::RTCIceCandidatePairStats(const std::string& id,
194 int64_t timestamp_us)
195 : RTCIceCandidatePairStats(std::string(id), timestamp_us) {}
hbosc47a0c32016-10-11 14:54:49 -0700196
Yves Gerey665174f2018-06-19 15:03:05 +0200197RTCIceCandidatePairStats::RTCIceCandidatePairStats(std::string&& id,
198 int64_t timestamp_us)
hbosc47a0c32016-10-11 14:54:49 -0700199 : RTCStats(std::move(id), timestamp_us),
200 transport_id("transportId"),
201 local_candidate_id("localCandidateId"),
202 remote_candidate_id("remoteCandidateId"),
203 state("state"),
204 priority("priority"),
205 nominated("nominated"),
206 writable("writable"),
Taylor Brandstetter79326ea2021-09-28 15:09:53 -0700207 packets_sent("packetsSent"),
208 packets_received("packetsReceived"),
hbosc47a0c32016-10-11 14:54:49 -0700209 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"),
hbosc47a0c32016-10-11 14:54:49 -0700219 consent_requests_sent("consentRequestsSent"),
Taylor Brandstetter79326ea2021-09-28 15:09:53 -0700220 packets_discarded_on_send("packetsDiscardedOnSend"),
Philipp Hancke0487c572022-11-01 17:03:01 +0100221 bytes_discarded_on_send("bytesDiscardedOnSend"),
222 last_packet_received_timestamp("lastPacketReceivedTimestamp"),
223 last_packet_sent_timestamp("lastPacketSentTimestamp") {}
hbosc47a0c32016-10-11 14:54:49 -0700224
225RTCIceCandidatePairStats::RTCIceCandidatePairStats(
Philipp Hancke6738b012022-10-11 13:04:03 +0200226 const RTCIceCandidatePairStats& other) = default;
hbosc47a0c32016-10-11 14:54:49 -0700227
Yves Gerey665174f2018-06-19 15:03:05 +0200228RTCIceCandidatePairStats::~RTCIceCandidatePairStats() {}
hbosc47a0c32016-10-11 14:54:49 -0700229
Steve Antond6a5cbd2017-08-18 09:40:25 -0700230// clang-format off
Henrik Boström1df1bf82018-03-20 13:24:20 +0100231WEBRTC_RTCSTATS_IMPL(RTCIceCandidateStats, RTCStats, "abstract-ice-candidate",
hbosb4e426e2017-01-02 09:59:31 -0800232 &transport_id,
hbosc3a2b7f2017-01-02 04:46:15 -0800233 &is_remote,
Gary Liu37e489c2017-11-21 10:49:36 -0800234 &network_type,
hbosab9f6e42016-10-07 02:18:47 -0700235 &ip,
Philipp Hanckea9ba4502021-03-22 13:22:54 +0100236 &address,
hbosab9f6e42016-10-07 02:18:47 -0700237 &port,
238 &protocol,
Philipp Hancke95513752018-09-27 14:40:08 +0200239 &relay_protocol,
hbosab9f6e42016-10-07 02:18:47 -0700240 &candidate_type,
241 &priority,
Jonas Oreland0d13bbd2022-03-02 11:17:36 +0100242 &url,
Philipp Hancke0e3cd632022-09-27 10:23:09 +0200243 &foundation,
244 &related_address,
245 &related_port,
246 &username_fragment,
247 &tcp_type,
Jonas Oreland0d13bbd2022-03-02 11:17:36 +0100248 &vpn,
249 &network_adapter_type)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700250// clang-format on
hbosab9f6e42016-10-07 02:18:47 -0700251
Yves Gerey665174f2018-06-19 15:03:05 +0200252RTCIceCandidateStats::RTCIceCandidateStats(const std::string& id,
253 int64_t timestamp_us,
254 bool is_remote)
255 : RTCIceCandidateStats(std::string(id), timestamp_us, is_remote) {}
hbosab9f6e42016-10-07 02:18:47 -0700256
Gary Liu37e489c2017-11-21 10:49:36 -0800257RTCIceCandidateStats::RTCIceCandidateStats(std::string&& id,
258 int64_t timestamp_us,
259 bool is_remote)
hbosab9f6e42016-10-07 02:18:47 -0700260 : RTCStats(std::move(id), timestamp_us),
hbosb4e426e2017-01-02 09:59:31 -0800261 transport_id("transportId"),
hbosc3a2b7f2017-01-02 04:46:15 -0800262 is_remote("isRemote", is_remote),
Gary Liu37e489c2017-11-21 10:49:36 -0800263 network_type("networkType"),
hbosab9f6e42016-10-07 02:18:47 -0700264 ip("ip"),
Philipp Hanckea9ba4502021-03-22 13:22:54 +0100265 address("address"),
hbosab9f6e42016-10-07 02:18:47 -0700266 port("port"),
267 protocol("protocol"),
Philipp Hancke95513752018-09-27 14:40:08 +0200268 relay_protocol("relayProtocol"),
hbosab9f6e42016-10-07 02:18:47 -0700269 candidate_type("candidateType"),
270 priority("priority"),
Jonas Oreland0d13bbd2022-03-02 11:17:36 +0100271 url("url"),
Philipp Hancke0e3cd632022-09-27 10:23:09 +0200272 foundation("foundation"),
273 related_address("relatedAddress"),
274 related_port("relatedPort"),
275 username_fragment("usernameFragment"),
276 tcp_type("tcpType"),
Jonas Oreland0d13bbd2022-03-02 11:17:36 +0100277 vpn("vpn"),
278 network_adapter_type("networkAdapterType") {}
hbosab9f6e42016-10-07 02:18:47 -0700279
Philipp Hancke6738b012022-10-11 13:04:03 +0200280RTCIceCandidateStats::RTCIceCandidateStats(const RTCIceCandidateStats& other) =
281 default;
hbosab9f6e42016-10-07 02:18:47 -0700282
Yves Gerey665174f2018-06-19 15:03:05 +0200283RTCIceCandidateStats::~RTCIceCandidateStats() {}
hbosab9f6e42016-10-07 02:18:47 -0700284
285const char RTCLocalIceCandidateStats::kType[] = "local-candidate";
286
Yves Gerey665174f2018-06-19 15:03:05 +0200287RTCLocalIceCandidateStats::RTCLocalIceCandidateStats(const std::string& id,
288 int64_t timestamp_us)
289 : RTCIceCandidateStats(id, timestamp_us, false) {}
hbosab9f6e42016-10-07 02:18:47 -0700290
Yves Gerey665174f2018-06-19 15:03:05 +0200291RTCLocalIceCandidateStats::RTCLocalIceCandidateStats(std::string&& id,
292 int64_t timestamp_us)
293 : RTCIceCandidateStats(std::move(id), timestamp_us, false) {}
hbosab9f6e42016-10-07 02:18:47 -0700294
Henrik Boström1df1bf82018-03-20 13:24:20 +0100295std::unique_ptr<RTCStats> RTCLocalIceCandidateStats::copy() const {
Philipp Hanckeb5cf12d2022-09-06 11:55:31 +0200296 return std::make_unique<RTCLocalIceCandidateStats>(*this);
Henrik Boström1df1bf82018-03-20 13:24:20 +0100297}
298
hbosab9f6e42016-10-07 02:18:47 -0700299const char* RTCLocalIceCandidateStats::type() const {
300 return kType;
301}
302
303const char RTCRemoteIceCandidateStats::kType[] = "remote-candidate";
304
Yves Gerey665174f2018-06-19 15:03:05 +0200305RTCRemoteIceCandidateStats::RTCRemoteIceCandidateStats(const std::string& id,
306 int64_t timestamp_us)
307 : RTCIceCandidateStats(id, timestamp_us, true) {}
hbosab9f6e42016-10-07 02:18:47 -0700308
Yves Gerey665174f2018-06-19 15:03:05 +0200309RTCRemoteIceCandidateStats::RTCRemoteIceCandidateStats(std::string&& id,
310 int64_t timestamp_us)
311 : RTCIceCandidateStats(std::move(id), timestamp_us, true) {}
hbosab9f6e42016-10-07 02:18:47 -0700312
Henrik Boström1df1bf82018-03-20 13:24:20 +0100313std::unique_ptr<RTCStats> RTCRemoteIceCandidateStats::copy() const {
Philipp Hanckeb5cf12d2022-09-06 11:55:31 +0200314 return std::make_unique<RTCRemoteIceCandidateStats>(*this);
Henrik Boström1df1bf82018-03-20 13:24:20 +0100315}
316
hbosab9f6e42016-10-07 02:18:47 -0700317const char* RTCRemoteIceCandidateStats::type() const {
318 return kType;
319}
320
Steve Antond6a5cbd2017-08-18 09:40:25 -0700321// clang-format off
Henrik Boström15166b22022-10-19 11:06:58 +0200322WEBRTC_RTCSTATS_IMPL(DEPRECATED_RTCMediaStreamStats, RTCStats, "stream",
hbos09bc1282016-11-08 06:29:22 -0800323 &stream_identifier,
Nico Weber22f99252019-02-20 10:13:16 -0500324 &track_ids)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700325// clang-format on
hbos09bc1282016-11-08 06:29:22 -0800326
Henrik Boström15166b22022-10-19 11:06:58 +0200327DEPRECATED_RTCMediaStreamStats::DEPRECATED_RTCMediaStreamStats(
328 const std::string& id,
329 int64_t timestamp_us)
330 : DEPRECATED_RTCMediaStreamStats(std::string(id), timestamp_us) {}
hbos09bc1282016-11-08 06:29:22 -0800331
Henrik Boström15166b22022-10-19 11:06:58 +0200332DEPRECATED_RTCMediaStreamStats::DEPRECATED_RTCMediaStreamStats(
333 std::string&& id,
334 int64_t timestamp_us)
hbos09bc1282016-11-08 06:29:22 -0800335 : RTCStats(std::move(id), timestamp_us),
336 stream_identifier("streamIdentifier"),
Yves Gerey665174f2018-06-19 15:03:05 +0200337 track_ids("trackIds") {}
hbos09bc1282016-11-08 06:29:22 -0800338
Henrik Boström15166b22022-10-19 11:06:58 +0200339DEPRECATED_RTCMediaStreamStats::DEPRECATED_RTCMediaStreamStats(
340 const DEPRECATED_RTCMediaStreamStats& other) = default;
hbos09bc1282016-11-08 06:29:22 -0800341
Henrik Boström15166b22022-10-19 11:06:58 +0200342DEPRECATED_RTCMediaStreamStats::~DEPRECATED_RTCMediaStreamStats() {}
hbos09bc1282016-11-08 06:29:22 -0800343
Steve Antond6a5cbd2017-08-18 09:40:25 -0700344// clang-format off
Henrik Boström15166b22022-10-19 11:06:58 +0200345WEBRTC_RTCSTATS_IMPL(DEPRECATED_RTCMediaStreamTrackStats, RTCStats, "track",
zsteine76bd3a2017-07-14 12:17:49 -0700346 &track_identifier,
Henrik Boström646fda02019-05-22 15:49:42 +0200347 &media_source_id,
zsteine76bd3a2017-07-14 12:17:49 -0700348 &remote_source,
349 &ended,
350 &detached,
351 &kind,
Gustaf Ullbergb0a02072017-10-02 12:00:34 +0200352 &jitter_buffer_delay,
Chen Xing0acffb52019-01-15 15:46:29 +0100353 &jitter_buffer_emitted_count,
zsteine76bd3a2017-07-14 12:17:49 -0700354 &frame_width,
355 &frame_height,
zsteine76bd3a2017-07-14 12:17:49 -0700356 &frames_sent,
Ilya Nikolaevskiy70473fc2018-02-28 16:35:03 +0100357 &huge_frames_sent,
zsteine76bd3a2017-07-14 12:17:49 -0700358 &frames_received,
359 &frames_decoded,
360 &frames_dropped,
zsteine76bd3a2017-07-14 12:17:49 -0700361 &audio_level,
362 &total_audio_energy,
zsteine76bd3a2017-07-14 12:17:49 -0700363 &echo_return_loss,
Steve Anton2dbc69f2017-08-24 17:15:13 -0700364 &echo_return_loss_enhancement,
365 &total_samples_received,
366 &total_samples_duration,
Gustaf Ullberg9a2e9062017-09-18 09:28:20 +0200367 &concealed_samples,
Henrik Boström21e99da2019-08-21 12:09:51 +0200368 &silent_concealed_samples,
Ruslan Burakov8af88962018-11-22 17:21:10 +0100369 &concealment_events,
Henrik Boström21e99da2019-08-21 12:09:51 +0200370 &inserted_samples_for_deceleration,
Henrik Boströmadbcbf72022-10-31 16:31:40 +0100371 &removed_samples_for_acceleration)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700372// clang-format on
hbos09bc1282016-11-08 06:29:22 -0800373
Henrik Boström15166b22022-10-19 11:06:58 +0200374DEPRECATED_RTCMediaStreamTrackStats::DEPRECATED_RTCMediaStreamTrackStats(
375 const std::string& id,
376 int64_t timestamp_us,
377 const char* kind)
378 : DEPRECATED_RTCMediaStreamTrackStats(std::string(id), timestamp_us, kind) {
379}
hbos09bc1282016-11-08 06:29:22 -0800380
Henrik Boström15166b22022-10-19 11:06:58 +0200381DEPRECATED_RTCMediaStreamTrackStats::DEPRECATED_RTCMediaStreamTrackStats(
382 std::string&& id,
383 int64_t timestamp_us,
384 const char* kind)
hbos09bc1282016-11-08 06:29:22 -0800385 : RTCStats(std::move(id), timestamp_us),
386 track_identifier("trackIdentifier"),
Henrik Boström646fda02019-05-22 15:49:42 +0200387 media_source_id("mediaSourceId"),
hbos09bc1282016-11-08 06:29:22 -0800388 remote_source("remoteSource"),
389 ended("ended"),
390 detached("detached"),
hbos160e4a72017-01-17 02:53:23 -0800391 kind("kind", kind),
Gustaf Ullbergb0a02072017-10-02 12:00:34 +0200392 jitter_buffer_delay("jitterBufferDelay"),
Chen Xing0acffb52019-01-15 15:46:29 +0100393 jitter_buffer_emitted_count("jitterBufferEmittedCount"),
hbos09bc1282016-11-08 06:29:22 -0800394 frame_width("frameWidth"),
395 frame_height("frameHeight"),
hbos09bc1282016-11-08 06:29:22 -0800396 frames_sent("framesSent"),
Ilya Nikolaevskiy70473fc2018-02-28 16:35:03 +0100397 huge_frames_sent("hugeFramesSent"),
hbos09bc1282016-11-08 06:29:22 -0800398 frames_received("framesReceived"),
399 frames_decoded("framesDecoded"),
400 frames_dropped("framesDropped"),
hbos09bc1282016-11-08 06:29:22 -0800401 audio_level("audioLevel"),
zsteine76bd3a2017-07-14 12:17:49 -0700402 total_audio_energy("totalAudioEnergy"),
hbos09bc1282016-11-08 06:29:22 -0800403 echo_return_loss("echoReturnLoss"),
Steve Anton2dbc69f2017-08-24 17:15:13 -0700404 echo_return_loss_enhancement("echoReturnLossEnhancement"),
405 total_samples_received("totalSamplesReceived"),
406 total_samples_duration("totalSamplesDuration"),
Gustaf Ullberg9a2e9062017-09-18 09:28:20 +0200407 concealed_samples("concealedSamples"),
Ivo Creusen8d8ffdb2019-04-30 09:45:21 +0200408 silent_concealed_samples("silentConcealedSamples"),
Ruslan Burakov8af88962018-11-22 17:21:10 +0100409 concealment_events("concealmentEvents"),
Ivo Creusen8d8ffdb2019-04-30 09:45:21 +0200410 inserted_samples_for_deceleration("insertedSamplesForDeceleration"),
Henrik Boströmadbcbf72022-10-31 16:31:40 +0100411 removed_samples_for_acceleration("removedSamplesForAcceleration") {
hbos160e4a72017-01-17 02:53:23 -0800412 RTC_DCHECK(kind == RTCMediaStreamTrackKind::kAudio ||
413 kind == RTCMediaStreamTrackKind::kVideo);
hbos09bc1282016-11-08 06:29:22 -0800414}
415
Henrik Boström15166b22022-10-19 11:06:58 +0200416DEPRECATED_RTCMediaStreamTrackStats::DEPRECATED_RTCMediaStreamTrackStats(
417 const DEPRECATED_RTCMediaStreamTrackStats& other) = default;
hbos09bc1282016-11-08 06:29:22 -0800418
Henrik Boström15166b22022-10-19 11:06:58 +0200419DEPRECATED_RTCMediaStreamTrackStats::~DEPRECATED_RTCMediaStreamTrackStats() {}
hbos09bc1282016-11-08 06:29:22 -0800420
Steve Antond6a5cbd2017-08-18 09:40:25 -0700421// clang-format off
hbosfc5e0502016-10-06 02:06:10 -0700422WEBRTC_RTCSTATS_IMPL(RTCPeerConnectionStats, RTCStats, "peer-connection",
423 &data_channels_opened,
Nico Weber22f99252019-02-20 10:13:16 -0500424 &data_channels_closed)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700425// clang-format on
hbosd565b732016-08-30 14:04:35 -0700426
Yves Gerey665174f2018-06-19 15:03:05 +0200427RTCPeerConnectionStats::RTCPeerConnectionStats(const std::string& id,
428 int64_t timestamp_us)
429 : RTCPeerConnectionStats(std::string(id), timestamp_us) {}
hbosd565b732016-08-30 14:04:35 -0700430
Yves Gerey665174f2018-06-19 15:03:05 +0200431RTCPeerConnectionStats::RTCPeerConnectionStats(std::string&& id,
432 int64_t timestamp_us)
hbos0e6758d2016-08-31 07:57:36 -0700433 : RTCStats(std::move(id), timestamp_us),
hbosd565b732016-08-30 14:04:35 -0700434 data_channels_opened("dataChannelsOpened"),
Yves Gerey665174f2018-06-19 15:03:05 +0200435 data_channels_closed("dataChannelsClosed") {}
hbosd565b732016-08-30 14:04:35 -0700436
hbosfc5e0502016-10-06 02:06:10 -0700437RTCPeerConnectionStats::RTCPeerConnectionStats(
Philipp Hancke6738b012022-10-11 13:04:03 +0200438 const RTCPeerConnectionStats& other) = default;
hbosfc5e0502016-10-06 02:06:10 -0700439
Yves Gerey665174f2018-06-19 15:03:05 +0200440RTCPeerConnectionStats::~RTCPeerConnectionStats() {}
hbosfc5e0502016-10-06 02:06:10 -0700441
Steve Antond6a5cbd2017-08-18 09:40:25 -0700442// clang-format off
hbos6ded1902016-11-01 01:50:46 -0700443WEBRTC_RTCSTATS_IMPL(RTCRTPStreamStats, RTCStats, "rtp",
444 &ssrc,
Philipp Hancke3bc01662018-08-28 14:55:03 +0200445 &kind,
hbosb0ae9202017-01-27 06:35:16 -0800446 &track_id,
hbos6ded1902016-11-01 01:50:46 -0700447 &transport_id,
448 &codec_id,
Di Wufd1e9d12021-03-09 09:25:28 -0800449 &media_type)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700450// clang-format on
hbos6ded1902016-11-01 01:50:46 -0700451
Yves Gerey665174f2018-06-19 15:03:05 +0200452RTCRTPStreamStats::RTCRTPStreamStats(const std::string& id,
453 int64_t timestamp_us)
454 : RTCRTPStreamStats(std::string(id), timestamp_us) {}
hbos6ded1902016-11-01 01:50:46 -0700455
Yves Gerey665174f2018-06-19 15:03:05 +0200456RTCRTPStreamStats::RTCRTPStreamStats(std::string&& id, int64_t timestamp_us)
hbos6ded1902016-11-01 01:50:46 -0700457 : RTCStats(std::move(id), timestamp_us),
458 ssrc("ssrc"),
Philipp Hancke3bc01662018-08-28 14:55:03 +0200459 kind("kind"),
hbosb0ae9202017-01-27 06:35:16 -0800460 track_id("trackId"),
hbos6ded1902016-11-01 01:50:46 -0700461 transport_id("transportId"),
462 codec_id("codecId"),
Di Wufd1e9d12021-03-09 09:25:28 -0800463 media_type("mediaType") {}
hbos6ded1902016-11-01 01:50:46 -0700464
Philipp Hancke6738b012022-10-11 13:04:03 +0200465RTCRTPStreamStats::RTCRTPStreamStats(const RTCRTPStreamStats& other) = default;
hbos6ded1902016-11-01 01:50:46 -0700466
Yves Gerey665174f2018-06-19 15:03:05 +0200467RTCRTPStreamStats::~RTCRTPStreamStats() {}
hbos6ded1902016-11-01 01:50:46 -0700468
Steve Antond6a5cbd2017-08-18 09:40:25 -0700469// clang-format off
hbos6ded1902016-11-01 01:50:46 -0700470WEBRTC_RTCSTATS_IMPL(
Di Wufd1e9d12021-03-09 09:25:28 -0800471 RTCReceivedRtpStreamStats, RTCRTPStreamStats, "received-rtp",
472 &jitter,
Henrik Boströma494e4b2022-10-03 17:26:41 +0200473 &packets_lost)
Di Wufd1e9d12021-03-09 09:25:28 -0800474// clang-format on
475
476RTCReceivedRtpStreamStats::RTCReceivedRtpStreamStats(const std::string&& id,
477 int64_t timestamp_us)
478 : RTCReceivedRtpStreamStats(std::string(id), timestamp_us) {}
479
480RTCReceivedRtpStreamStats::RTCReceivedRtpStreamStats(std::string&& id,
481 int64_t timestamp_us)
482 : RTCRTPStreamStats(std::move(id), timestamp_us),
483 jitter("jitter"),
Henrik Boströma494e4b2022-10-03 17:26:41 +0200484 packets_lost("packetsLost") {}
Di Wufd1e9d12021-03-09 09:25:28 -0800485
486RTCReceivedRtpStreamStats::RTCReceivedRtpStreamStats(
Philipp Hancke6738b012022-10-11 13:04:03 +0200487 const RTCReceivedRtpStreamStats& other) = default;
Di Wufd1e9d12021-03-09 09:25:28 -0800488
489RTCReceivedRtpStreamStats::~RTCReceivedRtpStreamStats() {}
490
491// clang-format off
492WEBRTC_RTCSTATS_IMPL(
Alessio Bazzicaf7b1b952021-03-23 17:23:04 +0100493 RTCSentRtpStreamStats, RTCRTPStreamStats, "sent-rtp",
494 &packets_sent,
495 &bytes_sent)
496// clang-format on
497
498RTCSentRtpStreamStats::RTCSentRtpStreamStats(const std::string&& id,
499 int64_t timestamp_us)
500 : RTCSentRtpStreamStats(std::string(id), timestamp_us) {}
501
502RTCSentRtpStreamStats::RTCSentRtpStreamStats(std::string&& id,
503 int64_t timestamp_us)
504 : RTCRTPStreamStats(std::move(id), timestamp_us),
505 packets_sent("packetsSent"),
506 bytes_sent("bytesSent") {}
507
Philipp Hancke6738b012022-10-11 13:04:03 +0200508RTCSentRtpStreamStats::RTCSentRtpStreamStats(
509 const RTCSentRtpStreamStats& other) = default;
Alessio Bazzicaf7b1b952021-03-23 17:23:04 +0100510
511RTCSentRtpStreamStats::~RTCSentRtpStreamStats() {}
512
513// clang-format off
514WEBRTC_RTCSTATS_IMPL(
Di Wufd1e9d12021-03-09 09:25:28 -0800515 RTCInboundRTPStreamStats, RTCReceivedRtpStreamStats, "inbound-rtp",
Henrik Boströma6c7d5c2022-06-16 16:55:31 +0200516 &track_identifier,
Henrik Boström1ab61882022-06-16 17:07:33 +0200517 &mid,
Alessio Bazzicaf7b1b952021-03-23 17:23:04 +0100518 &remote_id,
hboseeafe942016-11-01 03:00:17 -0700519 &packets_received,
Henrik Boströma494e4b2022-10-03 17:26:41 +0200520 &packets_discarded,
Henrik Boström4a5dab02020-01-28 11:15:35 +0100521 &fec_packets_received,
522 &fec_packets_discarded,
hboseeafe942016-11-01 03:00:17 -0700523 &bytes_received,
Niels Möllerac0a4cb2019-10-09 15:01:33 +0200524 &header_bytes_received,
Henrik Boström01738c62019-04-15 17:32:00 +0200525 &last_packet_received_timestamp,
Eldar Rello4e5bc9f2020-07-06 14:18:07 +0300526 &jitter_buffer_delay,
Ivo Creusen11fdb082022-07-04 14:16:39 +0200527 &jitter_buffer_target_delay,
Ivo Creusen1a84b562022-07-19 16:33:10 +0200528 &jitter_buffer_minimum_delay,
Eldar Rello4e5bc9f2020-07-06 14:18:07 +0300529 &jitter_buffer_emitted_count,
530 &total_samples_received,
531 &concealed_samples,
532 &silent_concealed_samples,
533 &concealment_events,
534 &inserted_samples_for_deceleration,
535 &removed_samples_for_acceleration,
536 &audio_level,
537 &total_audio_energy,
538 &total_samples_duration,
Philipp Hanckea16a6a62022-04-25 12:21:30 +0200539 &frames_received,
Eldar Rello4e5bc9f2020-07-06 14:18:07 +0300540 &frame_width,
541 &frame_height,
Eldar Rello4e5bc9f2020-07-06 14:18:07 +0300542 &frames_per_second,
Henrik Boström2e069262019-04-09 13:59:31 +0200543 &frames_decoded,
Rasmus Brandt2efae772019-06-27 14:29:34 +0200544 &key_frames_decoded,
Eldar Rello4e5bc9f2020-07-06 14:18:07 +0300545 &frames_dropped,
Johannes Kronbfd343b2019-07-01 10:07:50 +0200546 &total_decode_time,
Philipp Hanckea16a6a62022-04-25 12:21:30 +0200547 &total_processing_delay,
Philipp Hancke0359ba22022-05-05 15:55:36 +0200548 &total_assembly_time,
549 &frames_assembled_from_multiple_packets,
Johannes Kron00376e12019-11-25 10:25:42 +0100550 &total_inter_frame_delay,
551 &total_squared_inter_frame_delay,
Henrik Boströmc57a28c2022-10-06 11:59:05 +0200552 &pause_count,
553 &total_pauses_duration,
554 &freeze_count,
555 &total_freezes_duration,
Henrik Boström6b430862019-08-16 13:09:51 +0200556 &content_type,
Åsa Perssonfcf79cc2019-10-22 15:23:44 +0200557 &estimated_playout_timestamp,
Di Wufd1e9d12021-03-09 09:25:28 -0800558 &decoder_implementation,
559 &fir_count,
560 &pli_count,
561 &nack_count,
Philipp Hancke6fb8d1a2022-05-30 12:37:04 +0200562 &qp_sum,
Henrik Boströmc5f8f802022-10-19 17:50:09 +0200563 &goog_timing_frame_info,
Evan Shrubsole13c0be42022-10-31 11:03:10 +0000564 &power_efficient_decoder,
Henrik Boström2fb83072022-10-06 13:37:11 +0200565 &jitter_buffer_flushes,
566 &delayed_packet_outage_samples,
567 &relative_packet_arrival_delay,
568 &interruption_count,
569 &total_interruption_duration,
Philipp Hancke6fb8d1a2022-05-30 12:37:04 +0200570 &min_playout_delay)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700571// clang-format on
hboseeafe942016-11-01 03:00:17 -0700572
Yves Gerey665174f2018-06-19 15:03:05 +0200573RTCInboundRTPStreamStats::RTCInboundRTPStreamStats(const std::string& id,
574 int64_t timestamp_us)
575 : RTCInboundRTPStreamStats(std::string(id), timestamp_us) {}
hboseeafe942016-11-01 03:00:17 -0700576
Yves Gerey665174f2018-06-19 15:03:05 +0200577RTCInboundRTPStreamStats::RTCInboundRTPStreamStats(std::string&& id,
578 int64_t timestamp_us)
Di Wufd1e9d12021-03-09 09:25:28 -0800579 : RTCReceivedRtpStreamStats(std::move(id), timestamp_us),
Henrik Boströma6c7d5c2022-06-16 16:55:31 +0200580 track_identifier("trackIdentifier"),
Henrik Boström1ab61882022-06-16 17:07:33 +0200581 mid("mid"),
Alessio Bazzicaf7b1b952021-03-23 17:23:04 +0100582 remote_id("remoteId"),
hboseeafe942016-11-01 03:00:17 -0700583 packets_received("packetsReceived"),
Henrik Boströma494e4b2022-10-03 17:26:41 +0200584 packets_discarded("packetsDiscarded"),
Ivo Creusen8d8ffdb2019-04-30 09:45:21 +0200585 fec_packets_received("fecPacketsReceived"),
586 fec_packets_discarded("fecPacketsDiscarded"),
hboseeafe942016-11-01 03:00:17 -0700587 bytes_received("bytesReceived"),
Niels Möllerac0a4cb2019-10-09 15:01:33 +0200588 header_bytes_received("headerBytesReceived"),
Henrik Boström01738c62019-04-15 17:32:00 +0200589 last_packet_received_timestamp("lastPacketReceivedTimestamp"),
Eldar Rello4e5bc9f2020-07-06 14:18:07 +0300590 jitter_buffer_delay("jitterBufferDelay"),
Ivo Creusen11fdb082022-07-04 14:16:39 +0200591 jitter_buffer_target_delay("jitterBufferTargetDelay"),
Ivo Creusen1a84b562022-07-19 16:33:10 +0200592 jitter_buffer_minimum_delay("jitterBufferMinimumDelay"),
Eldar Rello4e5bc9f2020-07-06 14:18:07 +0300593 jitter_buffer_emitted_count("jitterBufferEmittedCount"),
594 total_samples_received("totalSamplesReceived"),
595 concealed_samples("concealedSamples"),
596 silent_concealed_samples("silentConcealedSamples"),
597 concealment_events("concealmentEvents"),
598 inserted_samples_for_deceleration("insertedSamplesForDeceleration"),
599 removed_samples_for_acceleration("removedSamplesForAcceleration"),
600 audio_level("audioLevel"),
601 total_audio_energy("totalAudioEnergy"),
602 total_samples_duration("totalSamplesDuration"),
Philipp Hanckea16a6a62022-04-25 12:21:30 +0200603 frames_received("framesReceived"),
Eldar Rello4e5bc9f2020-07-06 14:18:07 +0300604 frame_width("frameWidth"),
605 frame_height("frameHeight"),
Eldar Rello4e5bc9f2020-07-06 14:18:07 +0300606 frames_per_second("framesPerSecond"),
Henrik Boström2e069262019-04-09 13:59:31 +0200607 frames_decoded("framesDecoded"),
Rasmus Brandt2efae772019-06-27 14:29:34 +0200608 key_frames_decoded("keyFramesDecoded"),
Eldar Rello4e5bc9f2020-07-06 14:18:07 +0300609 frames_dropped("framesDropped"),
Johannes Kronbfd343b2019-07-01 10:07:50 +0200610 total_decode_time("totalDecodeTime"),
Philipp Hanckea16a6a62022-04-25 12:21:30 +0200611 total_processing_delay("totalProcessingDelay"),
Philipp Hancke0359ba22022-05-05 15:55:36 +0200612 total_assembly_time("totalAssemblyTime"),
613 frames_assembled_from_multiple_packets(
614 "framesAssembledFromMultiplePackets"),
Johannes Kron00376e12019-11-25 10:25:42 +0100615 total_inter_frame_delay("totalInterFrameDelay"),
616 total_squared_inter_frame_delay("totalSquaredInterFrameDelay"),
Henrik Boströmc57a28c2022-10-06 11:59:05 +0200617 pause_count("pauseCount"),
618 total_pauses_duration("totalPausesDuration"),
619 freeze_count("freezeCount"),
620 total_freezes_duration("totalFreezesDuration"),
Henrik Boström6b430862019-08-16 13:09:51 +0200621 content_type("contentType"),
Åsa Perssonfcf79cc2019-10-22 15:23:44 +0200622 estimated_playout_timestamp("estimatedPlayoutTimestamp"),
Di Wufd1e9d12021-03-09 09:25:28 -0800623 decoder_implementation("decoderImplementation"),
624 fir_count("firCount"),
625 pli_count("pliCount"),
626 nack_count("nackCount"),
Philipp Hancke6fb8d1a2022-05-30 12:37:04 +0200627 qp_sum("qpSum"),
Henrik Boströmc5f8f802022-10-19 17:50:09 +0200628 goog_timing_frame_info("googTimingFrameInfo"),
Evan Shrubsole13c0be42022-10-31 11:03:10 +0000629 power_efficient_decoder("powerEfficientDecoder"),
Henrik Boström2fb83072022-10-06 13:37:11 +0200630 jitter_buffer_flushes(
631 "jitterBufferFlushes",
632 {NonStandardGroupId::kRtcAudioJitterBufferMaxPackets}),
633 delayed_packet_outage_samples(
634 "delayedPacketOutageSamples",
635 {NonStandardGroupId::kRtcAudioJitterBufferMaxPackets,
636 NonStandardGroupId::kRtcStatsRelativePacketArrivalDelay}),
637 relative_packet_arrival_delay(
638 "relativePacketArrivalDelay",
639 {NonStandardGroupId::kRtcStatsRelativePacketArrivalDelay}),
640 interruption_count("interruptionCount"),
641 total_interruption_duration("totalInterruptionDuration"),
Philipp Hancke6fb8d1a2022-05-30 12:37:04 +0200642 min_playout_delay("minPlayoutDelay") {}
hboseeafe942016-11-01 03:00:17 -0700643
644RTCInboundRTPStreamStats::RTCInboundRTPStreamStats(
Philipp Hancke6738b012022-10-11 13:04:03 +0200645 const RTCInboundRTPStreamStats& other) = default;
Yves Gerey665174f2018-06-19 15:03:05 +0200646RTCInboundRTPStreamStats::~RTCInboundRTPStreamStats() {}
hboseeafe942016-11-01 03:00:17 -0700647
Steve Antond6a5cbd2017-08-18 09:40:25 -0700648// clang-format off
hboseeafe942016-11-01 03:00:17 -0700649WEBRTC_RTCSTATS_IMPL(
hbos6ded1902016-11-01 01:50:46 -0700650 RTCOutboundRTPStreamStats, RTCRTPStreamStats, "outbound-rtp",
Henrik Boström646fda02019-05-22 15:49:42 +0200651 &media_source_id,
Henrik Boström4f40fa52019-12-19 13:27:27 +0100652 &remote_id,
Henrik Boström1ab61882022-06-16 17:07:33 +0200653 &mid,
Henrik Boströma0ff50c2020-05-05 15:54:46 +0200654 &rid,
hbos6ded1902016-11-01 01:50:46 -0700655 &packets_sent,
Henrik Boströmcf96e0f2019-04-17 13:51:53 +0200656 &retransmitted_packets_sent,
hbos6ded1902016-11-01 01:50:46 -0700657 &bytes_sent,
Niels Möllerac0a4cb2019-10-09 15:01:33 +0200658 &header_bytes_sent,
Henrik Boströmcf96e0f2019-04-17 13:51:53 +0200659 &retransmitted_bytes_sent,
hbos6ded1902016-11-01 01:50:46 -0700660 &target_bitrate,
Henrik Boströmf71362f2019-04-08 16:14:23 +0200661 &frames_encoded,
Rasmus Brandt2efae772019-06-27 14:29:34 +0200662 &key_frames_encoded,
Henrik Boström2e069262019-04-09 13:59:31 +0200663 &total_encode_time,
Henrik Boström23aff9b2019-05-20 15:15:38 +0200664 &total_encoded_bytes_target,
Henrik Boströma0ff50c2020-05-05 15:54:46 +0200665 &frame_width,
666 &frame_height,
667 &frames_per_second,
668 &frames_sent,
669 &huge_frames_sent,
Henrik Boström9fe18342019-05-16 18:38:20 +0200670 &total_packet_send_delay,
Henrik Boströmce33b6a2019-05-28 17:42:38 +0200671 &quality_limitation_reason,
Byoungchan Lee7d235352021-05-28 21:32:04 +0900672 &quality_limitation_durations,
Evan Shrubsolecc62b162019-09-09 11:26:45 +0200673 &quality_limitation_resolution_changes,
Henrik Boström6b430862019-08-16 13:09:51 +0200674 &content_type,
Di Wufd1e9d12021-03-09 09:25:28 -0800675 &encoder_implementation,
676 &fir_count,
677 &pli_count,
678 &nack_count,
Philipp Hancke684e2412022-07-28 12:41:00 +0200679 &qp_sum,
Evan Shrubsole13c0be42022-10-31 11:03:10 +0000680 &active,
Evan Shrubsole9b235cd2022-12-06 10:09:10 +0000681 &power_efficient_encoder,
682 &scalability_mode)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700683// clang-format on
hbos6ded1902016-11-01 01:50:46 -0700684
Yves Gerey665174f2018-06-19 15:03:05 +0200685RTCOutboundRTPStreamStats::RTCOutboundRTPStreamStats(const std::string& id,
686 int64_t timestamp_us)
687 : RTCOutboundRTPStreamStats(std::string(id), timestamp_us) {}
hbos6ded1902016-11-01 01:50:46 -0700688
Yves Gerey665174f2018-06-19 15:03:05 +0200689RTCOutboundRTPStreamStats::RTCOutboundRTPStreamStats(std::string&& id,
690 int64_t timestamp_us)
hbos6ded1902016-11-01 01:50:46 -0700691 : RTCRTPStreamStats(std::move(id), timestamp_us),
Henrik Boström646fda02019-05-22 15:49:42 +0200692 media_source_id("mediaSourceId"),
Henrik Boström4f40fa52019-12-19 13:27:27 +0100693 remote_id("remoteId"),
Henrik Boström1ab61882022-06-16 17:07:33 +0200694 mid("mid"),
Henrik Boströma0ff50c2020-05-05 15:54:46 +0200695 rid("rid"),
hbos6ded1902016-11-01 01:50:46 -0700696 packets_sent("packetsSent"),
Henrik Boströmcf96e0f2019-04-17 13:51:53 +0200697 retransmitted_packets_sent("retransmittedPacketsSent"),
hbos6ded1902016-11-01 01:50:46 -0700698 bytes_sent("bytesSent"),
Niels Möllerac0a4cb2019-10-09 15:01:33 +0200699 header_bytes_sent("headerBytesSent"),
Henrik Boströmcf96e0f2019-04-17 13:51:53 +0200700 retransmitted_bytes_sent("retransmittedBytesSent"),
hbos6ded1902016-11-01 01:50:46 -0700701 target_bitrate("targetBitrate"),
Henrik Boströmf71362f2019-04-08 16:14:23 +0200702 frames_encoded("framesEncoded"),
Rasmus Brandt2efae772019-06-27 14:29:34 +0200703 key_frames_encoded("keyFramesEncoded"),
Henrik Boström2e069262019-04-09 13:59:31 +0200704 total_encode_time("totalEncodeTime"),
Henrik Boström23aff9b2019-05-20 15:15:38 +0200705 total_encoded_bytes_target("totalEncodedBytesTarget"),
Henrik Boströma0ff50c2020-05-05 15:54:46 +0200706 frame_width("frameWidth"),
707 frame_height("frameHeight"),
708 frames_per_second("framesPerSecond"),
709 frames_sent("framesSent"),
710 huge_frames_sent("hugeFramesSent"),
Henrik Boström9fe18342019-05-16 18:38:20 +0200711 total_packet_send_delay("totalPacketSendDelay"),
Henrik Boströmce33b6a2019-05-28 17:42:38 +0200712 quality_limitation_reason("qualityLimitationReason"),
Byoungchan Lee7d235352021-05-28 21:32:04 +0900713 quality_limitation_durations("qualityLimitationDurations"),
Evan Shrubsolecc62b162019-09-09 11:26:45 +0200714 quality_limitation_resolution_changes(
715 "qualityLimitationResolutionChanges"),
Henrik Boström6b430862019-08-16 13:09:51 +0200716 content_type("contentType"),
Di Wufd1e9d12021-03-09 09:25:28 -0800717 encoder_implementation("encoderImplementation"),
718 fir_count("firCount"),
719 pli_count("pliCount"),
720 nack_count("nackCount"),
Philipp Hancke684e2412022-07-28 12:41:00 +0200721 qp_sum("qpSum"),
Evan Shrubsole13c0be42022-10-31 11:03:10 +0000722 active("active"),
Evan Shrubsole9b235cd2022-12-06 10:09:10 +0000723 power_efficient_encoder("powerEfficientEncoder"),
724 scalability_mode("scalabilityMode") {}
hbos6ded1902016-11-01 01:50:46 -0700725
726RTCOutboundRTPStreamStats::RTCOutboundRTPStreamStats(
Philipp Hancke6738b012022-10-11 13:04:03 +0200727 const RTCOutboundRTPStreamStats& other) = default;
hbos6ded1902016-11-01 01:50:46 -0700728
Yves Gerey665174f2018-06-19 15:03:05 +0200729RTCOutboundRTPStreamStats::~RTCOutboundRTPStreamStats() {}
hbos6ded1902016-11-01 01:50:46 -0700730
Steve Antond6a5cbd2017-08-18 09:40:25 -0700731// clang-format off
Henrik Boström883eefc2019-05-27 13:40:25 +0200732WEBRTC_RTCSTATS_IMPL(
Henrik Boström2f71b612021-03-23 15:18:55 +0100733 RTCRemoteInboundRtpStreamStats, RTCReceivedRtpStreamStats,
734 "remote-inbound-rtp",
Henrik Boström883eefc2019-05-27 13:40:25 +0200735 &local_id,
Di Wu86f04ad2021-02-28 23:36:03 -0800736 &round_trip_time,
Di Wu88a51b22021-03-01 11:22:06 -0800737 &fraction_lost,
738 &total_round_trip_time,
739 &round_trip_time_measurements)
Henrik Boström883eefc2019-05-27 13:40:25 +0200740// clang-format on
741
742RTCRemoteInboundRtpStreamStats::RTCRemoteInboundRtpStreamStats(
743 const std::string& id,
744 int64_t timestamp_us)
745 : RTCRemoteInboundRtpStreamStats(std::string(id), timestamp_us) {}
746
747RTCRemoteInboundRtpStreamStats::RTCRemoteInboundRtpStreamStats(
748 std::string&& id,
749 int64_t timestamp_us)
Di Wufd1e9d12021-03-09 09:25:28 -0800750 : RTCReceivedRtpStreamStats(std::move(id), timestamp_us),
Henrik Boström883eefc2019-05-27 13:40:25 +0200751 local_id("localId"),
Di Wu86f04ad2021-02-28 23:36:03 -0800752 round_trip_time("roundTripTime"),
Di Wu88a51b22021-03-01 11:22:06 -0800753 fraction_lost("fractionLost"),
754 total_round_trip_time("totalRoundTripTime"),
755 round_trip_time_measurements("roundTripTimeMeasurements") {}
Henrik Boström883eefc2019-05-27 13:40:25 +0200756
757RTCRemoteInboundRtpStreamStats::RTCRemoteInboundRtpStreamStats(
Philipp Hancke6738b012022-10-11 13:04:03 +0200758 const RTCRemoteInboundRtpStreamStats& other) = default;
Henrik Boström883eefc2019-05-27 13:40:25 +0200759
760RTCRemoteInboundRtpStreamStats::~RTCRemoteInboundRtpStreamStats() {}
761
762// clang-format off
Alessio Bazzicaf7b1b952021-03-23 17:23:04 +0100763WEBRTC_RTCSTATS_IMPL(
764 RTCRemoteOutboundRtpStreamStats, RTCSentRtpStreamStats,
765 "remote-outbound-rtp",
766 &local_id,
767 &remote_timestamp,
Ivo Creusen2562cf02021-09-03 14:51:22 +0000768 &reports_sent,
769 &round_trip_time,
770 &round_trip_time_measurements,
771 &total_round_trip_time)
Alessio Bazzicaf7b1b952021-03-23 17:23:04 +0100772// clang-format on
773
774RTCRemoteOutboundRtpStreamStats::RTCRemoteOutboundRtpStreamStats(
775 const std::string& id,
776 int64_t timestamp_us)
777 : RTCRemoteOutboundRtpStreamStats(std::string(id), timestamp_us) {}
778
779RTCRemoteOutboundRtpStreamStats::RTCRemoteOutboundRtpStreamStats(
780 std::string&& id,
781 int64_t timestamp_us)
782 : RTCSentRtpStreamStats(std::move(id), timestamp_us),
783 local_id("localId"),
784 remote_timestamp("remoteTimestamp"),
Ivo Creusen2562cf02021-09-03 14:51:22 +0000785 reports_sent("reportsSent"),
786 round_trip_time("roundTripTime"),
787 round_trip_time_measurements("roundTripTimeMeasurements"),
788 total_round_trip_time("totalRoundTripTime") {}
Alessio Bazzicaf7b1b952021-03-23 17:23:04 +0100789
790RTCRemoteOutboundRtpStreamStats::RTCRemoteOutboundRtpStreamStats(
Philipp Hancke6738b012022-10-11 13:04:03 +0200791 const RTCRemoteOutboundRtpStreamStats& other) = default;
Alessio Bazzicaf7b1b952021-03-23 17:23:04 +0100792
793RTCRemoteOutboundRtpStreamStats::~RTCRemoteOutboundRtpStreamStats() {}
794
795// clang-format off
Henrik Boström646fda02019-05-22 15:49:42 +0200796WEBRTC_RTCSTATS_IMPL(RTCMediaSourceStats, RTCStats, "parent-media-source",
797 &track_identifier,
798 &kind)
799// clang-format on
800
801RTCMediaSourceStats::RTCMediaSourceStats(const std::string& id,
802 int64_t timestamp_us)
803 : RTCMediaSourceStats(std::string(id), timestamp_us) {}
804
805RTCMediaSourceStats::RTCMediaSourceStats(std::string&& id, int64_t timestamp_us)
806 : RTCStats(std::move(id), timestamp_us),
807 track_identifier("trackIdentifier"),
808 kind("kind") {}
809
Philipp Hancke6738b012022-10-11 13:04:03 +0200810RTCMediaSourceStats::RTCMediaSourceStats(const RTCMediaSourceStats& other) =
811 default;
Henrik Boström646fda02019-05-22 15:49:42 +0200812
813RTCMediaSourceStats::~RTCMediaSourceStats() {}
814
815// clang-format off
Henrik Boströmd2c336f2019-07-03 17:11:10 +0200816WEBRTC_RTCSTATS_IMPL(RTCAudioSourceStats, RTCMediaSourceStats, "media-source",
817 &audio_level,
818 &total_audio_energy,
Taylor Brandstetter64851c02021-06-24 13:32:50 -0700819 &total_samples_duration,
820 &echo_return_loss,
821 &echo_return_loss_enhancement)
Henrik Boström646fda02019-05-22 15:49:42 +0200822// clang-format on
823
824RTCAudioSourceStats::RTCAudioSourceStats(const std::string& id,
825 int64_t timestamp_us)
826 : RTCAudioSourceStats(std::string(id), timestamp_us) {}
827
828RTCAudioSourceStats::RTCAudioSourceStats(std::string&& id, int64_t timestamp_us)
Henrik Boströmd2c336f2019-07-03 17:11:10 +0200829 : RTCMediaSourceStats(std::move(id), timestamp_us),
830 audio_level("audioLevel"),
831 total_audio_energy("totalAudioEnergy"),
Taylor Brandstetter64851c02021-06-24 13:32:50 -0700832 total_samples_duration("totalSamplesDuration"),
833 echo_return_loss("echoReturnLoss"),
834 echo_return_loss_enhancement("echoReturnLossEnhancement") {}
Henrik Boström646fda02019-05-22 15:49:42 +0200835
Philipp Hancke6738b012022-10-11 13:04:03 +0200836RTCAudioSourceStats::RTCAudioSourceStats(const RTCAudioSourceStats& other) =
837 default;
Henrik Boström646fda02019-05-22 15:49:42 +0200838
839RTCAudioSourceStats::~RTCAudioSourceStats() {}
840
841// clang-format off
842WEBRTC_RTCSTATS_IMPL(RTCVideoSourceStats, RTCMediaSourceStats, "media-source",
843 &width,
844 &height,
845 &frames,
846 &frames_per_second)
847// clang-format on
848
849RTCVideoSourceStats::RTCVideoSourceStats(const std::string& id,
850 int64_t timestamp_us)
851 : RTCVideoSourceStats(std::string(id), timestamp_us) {}
852
853RTCVideoSourceStats::RTCVideoSourceStats(std::string&& id, int64_t timestamp_us)
854 : RTCMediaSourceStats(std::move(id), timestamp_us),
855 width("width"),
856 height("height"),
857 frames("frames"),
858 frames_per_second("framesPerSecond") {}
859
Philipp Hancke6738b012022-10-11 13:04:03 +0200860RTCVideoSourceStats::RTCVideoSourceStats(const RTCVideoSourceStats& other) =
861 default;
Henrik Boström646fda02019-05-22 15:49:42 +0200862
863RTCVideoSourceStats::~RTCVideoSourceStats() {}
864
865// clang-format off
hbos2fa7c672016-10-24 04:00:05 -0700866WEBRTC_RTCSTATS_IMPL(RTCTransportStats, RTCStats, "transport",
867 &bytes_sent,
Artem Titovedacbd52020-07-06 16:06:37 +0200868 &packets_sent,
hbos2fa7c672016-10-24 04:00:05 -0700869 &bytes_received,
Artem Titovedacbd52020-07-06 16:06:37 +0200870 &packets_received,
hbos2fa7c672016-10-24 04:00:05 -0700871 &rtcp_transport_stats_id,
hbos7064d592017-01-16 07:38:02 -0800872 &dtls_state,
hbos2fa7c672016-10-24 04:00:05 -0700873 &selected_candidate_pair_id,
874 &local_certificate_id,
Jonas Oreland149dc722019-08-28 08:10:27 +0200875 &remote_certificate_id,
Harald Alvestrand5cb78072019-10-28 09:51:17 +0100876 &tls_version,
877 &dtls_cipher,
Philipp Hancke69c1df22022-04-22 15:46:24 +0200878 &dtls_role,
Harald Alvestrand5cb78072019-10-28 09:51:17 +0100879 &srtp_cipher,
Philipp Hanckecc1b9b02022-05-04 18:58:26 +0200880 &selected_candidate_pair_changes,
Philipp Hancke95b1a342022-05-05 07:53:54 +0200881 &ice_role,
Philipp Hancke1f491572022-05-09 17:43:31 +0200882 &ice_local_username_fragment,
883 &ice_state)
Steve Antond6a5cbd2017-08-18 09:40:25 -0700884// clang-format on
hbos2fa7c672016-10-24 04:00:05 -0700885
Yves Gerey665174f2018-06-19 15:03:05 +0200886RTCTransportStats::RTCTransportStats(const std::string& id,
887 int64_t timestamp_us)
888 : RTCTransportStats(std::string(id), timestamp_us) {}
hbos2fa7c672016-10-24 04:00:05 -0700889
Yves Gerey665174f2018-06-19 15:03:05 +0200890RTCTransportStats::RTCTransportStats(std::string&& id, int64_t timestamp_us)
hbos2fa7c672016-10-24 04:00:05 -0700891 : RTCStats(std::move(id), timestamp_us),
892 bytes_sent("bytesSent"),
Artem Titovedacbd52020-07-06 16:06:37 +0200893 packets_sent("packetsSent"),
hbos2fa7c672016-10-24 04:00:05 -0700894 bytes_received("bytesReceived"),
Artem Titovedacbd52020-07-06 16:06:37 +0200895 packets_received("packetsReceived"),
hbos2fa7c672016-10-24 04:00:05 -0700896 rtcp_transport_stats_id("rtcpTransportStatsId"),
hbos7064d592017-01-16 07:38:02 -0800897 dtls_state("dtlsState"),
hbos2fa7c672016-10-24 04:00:05 -0700898 selected_candidate_pair_id("selectedCandidatePairId"),
899 local_certificate_id("localCertificateId"),
Jonas Oreland149dc722019-08-28 08:10:27 +0200900 remote_certificate_id("remoteCertificateId"),
Harald Alvestrand5cb78072019-10-28 09:51:17 +0100901 tls_version("tlsVersion"),
902 dtls_cipher("dtlsCipher"),
Philipp Hancke69c1df22022-04-22 15:46:24 +0200903 dtls_role("dtlsRole"),
Harald Alvestrand5cb78072019-10-28 09:51:17 +0100904 srtp_cipher("srtpCipher"),
Philipp Hanckecc1b9b02022-05-04 18:58:26 +0200905 selected_candidate_pair_changes("selectedCandidatePairChanges"),
Philipp Hancke95b1a342022-05-05 07:53:54 +0200906 ice_role("iceRole"),
Philipp Hancke1f491572022-05-09 17:43:31 +0200907 ice_local_username_fragment("iceLocalUsernameFragment"),
908 ice_state("iceState") {}
hbos2fa7c672016-10-24 04:00:05 -0700909
Philipp Hancke6738b012022-10-11 13:04:03 +0200910RTCTransportStats::RTCTransportStats(const RTCTransportStats& other) = default;
hbos2fa7c672016-10-24 04:00:05 -0700911
Yves Gerey665174f2018-06-19 15:03:05 +0200912RTCTransportStats::~RTCTransportStats() {}
hbos2fa7c672016-10-24 04:00:05 -0700913
hbosd565b732016-08-30 14:04:35 -0700914} // namespace webrtc