Revert "[Stats] Cleanup: Remove unimplemented metrics and obsolete TODOs."

This reverts commit 626f87d90501fd8d7a4ea071686cd8befd0d430c.

Reason for revert: Breaks one downstream project, will re-land after the dependency stops referencing an unimplemented RTT metric

Original change's description:
> [Stats] Cleanup: Remove unimplemented metrics and obsolete TODOs.
>
> In preparation for the spec moving closer to PR, let's not have
> placeholder metrics not implemented.
>
> Bug: webrtc:14167
> Change-Id: If4688ef85b57f88154d490186b306b30414874e4
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/265383
> Reviewed-by: Harald Alvestrand <hta@webrtc.org>
> Commit-Queue: Henrik Boström <hbos@webrtc.org>
> Cr-Commit-Position: refs/heads/main@{#37205}

Bug: webrtc:14167
Change-Id: I7e9ac60eb474b44fab678d4c08ddcae846ce456c
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/265800
Auto-Submit: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#37206}
This commit is contained in:
Henrik Boström
2022-06-14 08:19:28 +00:00
committed by WebRTC LUCI CQ
parent 626f87d905
commit 378b1c6826
3 changed files with 181 additions and 30 deletions

View File

@ -176,7 +176,7 @@ class RTC_EXPORT RTCDataChannelStats final : public RTCStats {
RTCStatsMember<std::string> label; RTCStatsMember<std::string> label;
RTCStatsMember<std::string> protocol; RTCStatsMember<std::string> protocol;
RTCStatsMember<int32_t> data_channel_identifier; RTCStatsMember<int32_t> data_channel_identifier;
// Enum type RTCDataChannelState. // TODO(hbos): Support enum types? "RTCStatsMember<RTCDataChannelState>"?
RTCStatsMember<std::string> state; RTCStatsMember<std::string> state;
RTCStatsMember<uint32_t> messages_sent; RTCStatsMember<uint32_t> messages_sent;
RTCStatsMember<uint64_t> bytes_sent; RTCStatsMember<uint64_t> bytes_sent;
@ -185,6 +185,7 @@ class RTC_EXPORT RTCDataChannelStats final : public RTCStats {
}; };
// https://w3c.github.io/webrtc-stats/#candidatepair-dict* // https://w3c.github.io/webrtc-stats/#candidatepair-dict*
// TODO(hbos): Tracking bug https://bugs.webrtc.org/7062
class RTC_EXPORT RTCIceCandidatePairStats final : public RTCStats { class RTC_EXPORT RTCIceCandidatePairStats final : public RTCStats {
public: public:
WEBRTC_RTCSTATS_DECL(); WEBRTC_RTCSTATS_DECL();
@ -197,16 +198,17 @@ class RTC_EXPORT RTCIceCandidatePairStats final : public RTCStats {
RTCStatsMember<std::string> transport_id; RTCStatsMember<std::string> transport_id;
RTCStatsMember<std::string> local_candidate_id; RTCStatsMember<std::string> local_candidate_id;
RTCStatsMember<std::string> remote_candidate_id; RTCStatsMember<std::string> remote_candidate_id;
// Enum type RTCStatsIceCandidatePairState. // TODO(hbos): Support enum types?
// "RTCStatsMember<RTCStatsIceCandidatePairState>"?
RTCStatsMember<std::string> state; RTCStatsMember<std::string> state;
// Obsolete: priority // Obsolete: priority
RTCStatsMember<uint64_t> priority; RTCStatsMember<uint64_t> priority;
RTCStatsMember<bool> nominated; RTCStatsMember<bool> nominated;
// `writable` does not exist in the spec and old comments suggest it used to // TODO(hbos): Collect this the way the spec describes it. We have a value for
// exist but was incorrectly implemented. // it but it is not spec-compliant. https://bugs.webrtc.org/7062
// TODO(https://crbug.com/webrtc/14171): Standardize and/or modify
// implementation.
RTCStatsMember<bool> writable; RTCStatsMember<bool> writable;
// TODO(hbos): Collect and populate this value. https://bugs.webrtc.org/7062
RTCStatsMember<bool> readable;
RTCStatsMember<uint64_t> packets_sent; RTCStatsMember<uint64_t> packets_sent;
RTCStatsMember<uint64_t> packets_received; RTCStatsMember<uint64_t> packets_received;
RTCStatsMember<uint64_t> bytes_sent; RTCStatsMember<uint64_t> bytes_sent;
@ -214,17 +216,35 @@ class RTC_EXPORT RTCIceCandidatePairStats final : public RTCStats {
RTCStatsMember<double> total_round_trip_time; RTCStatsMember<double> total_round_trip_time;
RTCStatsMember<double> current_round_trip_time; RTCStatsMember<double> current_round_trip_time;
RTCStatsMember<double> available_outgoing_bitrate; RTCStatsMember<double> available_outgoing_bitrate;
// TODO(hbos): Populate this value. It is wired up and collected the same way
// "VideoBwe.googAvailableReceiveBandwidth" is, but that value is always
// undefined. https://bugs.webrtc.org/7062
RTCStatsMember<double> available_incoming_bitrate; RTCStatsMember<double> available_incoming_bitrate;
RTCStatsMember<uint64_t> requests_received; RTCStatsMember<uint64_t> requests_received;
RTCStatsMember<uint64_t> requests_sent; RTCStatsMember<uint64_t> requests_sent;
RTCStatsMember<uint64_t> responses_received; RTCStatsMember<uint64_t> responses_received;
RTCStatsMember<uint64_t> responses_sent; RTCStatsMember<uint64_t> responses_sent;
// TODO(hbos): Collect and populate this value. https://bugs.webrtc.org/7062
RTCStatsMember<uint64_t> retransmissions_received;
// TODO(hbos): Collect and populate this value. https://bugs.webrtc.org/7062
RTCStatsMember<uint64_t> retransmissions_sent;
// TODO(hbos): Collect and populate this value. https://bugs.webrtc.org/7062
RTCStatsMember<uint64_t> consent_requests_received;
RTCStatsMember<uint64_t> consent_requests_sent; RTCStatsMember<uint64_t> consent_requests_sent;
// TODO(hbos): Collect and populate this value. https://bugs.webrtc.org/7062
RTCStatsMember<uint64_t> consent_responses_received;
// TODO(hbos): Collect and populate this value. https://bugs.webrtc.org/7062
RTCStatsMember<uint64_t> consent_responses_sent;
RTCStatsMember<uint64_t> packets_discarded_on_send; RTCStatsMember<uint64_t> packets_discarded_on_send;
RTCStatsMember<uint64_t> bytes_discarded_on_send; RTCStatsMember<uint64_t> bytes_discarded_on_send;
}; };
// https://w3c.github.io/webrtc-stats/#icecandidate-dict* // https://w3c.github.io/webrtc-stats/#icecandidate-dict*
// TODO(hbos): `RTCStatsCollector` only collects candidates that are part of
// ice candidate pairs, but there could be candidates not paired with anything.
// crbug.com/632723
// TODO(qingsi): Add the stats of STUN binding requests (keepalives) and collect
// them in the new PeerConnection::GetStats.
class RTC_EXPORT RTCIceCandidateStats : public RTCStats { class RTC_EXPORT RTCIceCandidateStats : public RTCStats {
public: public:
WEBRTC_RTCSTATS_DECL(); WEBRTC_RTCSTATS_DECL();
@ -241,7 +261,7 @@ class RTC_EXPORT RTCIceCandidateStats : public RTCStats {
RTCStatsMember<int32_t> port; RTCStatsMember<int32_t> port;
RTCStatsMember<std::string> protocol; RTCStatsMember<std::string> protocol;
RTCStatsMember<std::string> relay_protocol; RTCStatsMember<std::string> relay_protocol;
// Enum type RTCIceCandidateType. // TODO(hbos): Support enum types? "RTCStatsMember<RTCIceCandidateType>"?
RTCStatsMember<std::string> candidate_type; RTCStatsMember<std::string> candidate_type;
RTCStatsMember<int32_t> priority; RTCStatsMember<int32_t> priority;
RTCStatsMember<std::string> url; RTCStatsMember<std::string> url;
@ -280,8 +300,8 @@ class RTC_EXPORT RTCRemoteIceCandidateStats final
const char* type() const override; const char* type() const override;
}; };
// https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats // https://w3c.github.io/webrtc-stats/#msstats-dict*
// TODO(https://crbug.com/webrtc/14172): Deprecate and remove. // TODO(hbos): Tracking bug crbug.com/660827
class RTC_EXPORT RTCMediaStreamStats final : public RTCStats { class RTC_EXPORT RTCMediaStreamStats final : public RTCStats {
public: public:
WEBRTC_RTCSTATS_DECL(); WEBRTC_RTCSTATS_DECL();
@ -295,8 +315,8 @@ class RTC_EXPORT RTCMediaStreamStats final : public RTCStats {
RTCStatsMember<std::vector<std::string>> track_ids; RTCStatsMember<std::vector<std::string>> track_ids;
}; };
// TODO(https://crbug.com/webrtc/14175): Deprecate and remove in favor of // https://w3c.github.io/webrtc-stats/#mststats-dict*
// RTCMediaSourceStats/RTCOutboundRtpStreamStats and RTCInboundRtpStreamStats. // TODO(hbos): Tracking bug crbug.com/659137
class RTC_EXPORT RTCMediaStreamTrackStats final : public RTCStats { class RTC_EXPORT RTCMediaStreamTrackStats final : public RTCStats {
public: public:
WEBRTC_RTCSTATS_DECL(); WEBRTC_RTCSTATS_DECL();
@ -314,20 +334,29 @@ class RTC_EXPORT RTCMediaStreamTrackStats final : public RTCStats {
RTCStatsMember<std::string> media_source_id; RTCStatsMember<std::string> media_source_id;
RTCStatsMember<bool> remote_source; RTCStatsMember<bool> remote_source;
RTCStatsMember<bool> ended; RTCStatsMember<bool> ended;
// TODO(https://crbug.com/webrtc/14173): Remove this obsolete metric. // TODO(hbos): `RTCStatsCollector` does not return stats for detached tracks.
// crbug.com/659137
RTCStatsMember<bool> detached; RTCStatsMember<bool> detached;
// Enum type RTCMediaStreamTrackKind. // See `RTCMediaStreamTrackKind` for valid values.
RTCStatsMember<std::string> kind; RTCStatsMember<std::string> kind;
RTCStatsMember<double> jitter_buffer_delay; RTCStatsMember<double> jitter_buffer_delay;
RTCStatsMember<uint64_t> jitter_buffer_emitted_count; RTCStatsMember<uint64_t> jitter_buffer_emitted_count;
// Video-only members // Video-only members
RTCStatsMember<uint32_t> frame_width; RTCStatsMember<uint32_t> frame_width;
RTCStatsMember<uint32_t> frame_height; RTCStatsMember<uint32_t> frame_height;
// TODO(hbos): Not collected by `RTCStatsCollector`. crbug.com/659137
RTCStatsMember<double> frames_per_second;
RTCStatsMember<uint32_t> frames_sent; RTCStatsMember<uint32_t> frames_sent;
RTCStatsMember<uint32_t> huge_frames_sent; RTCStatsMember<uint32_t> huge_frames_sent;
RTCStatsMember<uint32_t> frames_received; RTCStatsMember<uint32_t> frames_received;
RTCStatsMember<uint32_t> frames_decoded; RTCStatsMember<uint32_t> frames_decoded;
RTCStatsMember<uint32_t> frames_dropped; RTCStatsMember<uint32_t> frames_dropped;
// TODO(hbos): Not collected by `RTCStatsCollector`. crbug.com/659137
RTCStatsMember<uint32_t> frames_corrupted;
// TODO(hbos): Not collected by `RTCStatsCollector`. crbug.com/659137
RTCStatsMember<uint32_t> partial_frames_lost;
// TODO(hbos): Not collected by `RTCStatsCollector`. crbug.com/659137
RTCStatsMember<uint32_t> full_frames_lost;
// Audio-only members // Audio-only members
RTCStatsMember<double> audio_level; // Receive-only RTCStatsMember<double> audio_level; // Receive-only
RTCStatsMember<double> total_audio_energy; // Receive-only RTCStatsMember<double> total_audio_energy; // Receive-only
@ -341,7 +370,7 @@ class RTC_EXPORT RTCMediaStreamTrackStats final : public RTCStats {
RTCStatsMember<uint64_t> inserted_samples_for_deceleration; RTCStatsMember<uint64_t> inserted_samples_for_deceleration;
RTCStatsMember<uint64_t> removed_samples_for_acceleration; RTCStatsMember<uint64_t> removed_samples_for_acceleration;
// Non-standard audio-only member // Non-standard audio-only member
// https://w3c.github.io/webrtc-provisional-stats/#dom-rtcaudioreceiverstats-jitterbufferflushes // TODO(kuddai): Add description to standard. crbug.com/webrtc/10042
RTCNonStandardStatsMember<uint64_t> jitter_buffer_flushes; RTCNonStandardStatsMember<uint64_t> jitter_buffer_flushes;
RTCNonStandardStatsMember<uint64_t> delayed_packet_outage_samples; RTCNonStandardStatsMember<uint64_t> delayed_packet_outage_samples;
RTCNonStandardStatsMember<double> relative_packet_arrival_delay; RTCNonStandardStatsMember<double> relative_packet_arrival_delay;
@ -351,15 +380,14 @@ class RTC_EXPORT RTCMediaStreamTrackStats final : public RTCStats {
// delay, in seconds, at the time that the sample was emitted from the jitter // delay, in seconds, at the time that the sample was emitted from the jitter
// buffer. (https://github.com/w3c/webrtc-provisional-stats/pull/20) // buffer. (https://github.com/w3c/webrtc-provisional-stats/pull/20)
// Currently it is implemented only for audio. // Currently it is implemented only for audio.
// TODO(https://crbug.com/webrtc/14176): This should be moved to // TODO(titovartem) implement for video streams when will be requested.
// RTCInboundRtpStreamStats and it should be implemented for video as well.
RTCNonStandardStatsMember<double> jitter_buffer_target_delay; RTCNonStandardStatsMember<double> jitter_buffer_target_delay;
// TODO(henrik.lundin): Add description of the interruption metrics at // TODO(henrik.lundin): Add description of the interruption metrics at
// https://github.com/w3c/webrtc-provisional-stats/issues/17 // https://github.com/henbos/webrtc-provisional-stats/issues/17
RTCNonStandardStatsMember<uint32_t> interruption_count; RTCNonStandardStatsMember<uint32_t> interruption_count;
RTCNonStandardStatsMember<double> total_interruption_duration; RTCNonStandardStatsMember<double> total_interruption_duration;
// Non-standard video-only members. // Non-standard video-only members.
// https://w3c.github.io/webrtc-provisional-stats/#dom-rtcvideoreceiverstats // https://henbos.github.io/webrtc-provisional-stats/#RTCVideoReceiverStats-dict*
RTCNonStandardStatsMember<uint32_t> freeze_count; RTCNonStandardStatsMember<uint32_t> freeze_count;
RTCNonStandardStatsMember<uint32_t> pause_count; RTCNonStandardStatsMember<uint32_t> pause_count;
RTCNonStandardStatsMember<double> total_freezes_duration; RTCNonStandardStatsMember<double> total_freezes_duration;
@ -383,6 +411,7 @@ class RTC_EXPORT RTCPeerConnectionStats final : public RTCStats {
}; };
// https://w3c.github.io/webrtc-stats/#streamstats-dict* // https://w3c.github.io/webrtc-stats/#streamstats-dict*
// TODO(hbos): Tracking bug crbug.com/657854
class RTC_EXPORT RTCRTPStreamStats : public RTCStats { class RTC_EXPORT RTCRTPStreamStats : public RTCStats {
public: public:
WEBRTC_RTCSTATS_DECL(); WEBRTC_RTCSTATS_DECL();
@ -413,6 +442,13 @@ class RTC_EXPORT RTCReceivedRtpStreamStats : public RTCRTPStreamStats {
RTCReceivedRtpStreamStats(const RTCReceivedRtpStreamStats& other); RTCReceivedRtpStreamStats(const RTCReceivedRtpStreamStats& other);
~RTCReceivedRtpStreamStats() override; ~RTCReceivedRtpStreamStats() override;
// TODO(hbos) The following fields need to be added and migrated
// both from RTCInboundRtpStreamStats and RTCRemoteInboundRtpStreamStats:
// packetsReceived, packetsRepaired, burstPacketsLost,
// burstPacketDiscarded, burstLossCount, burstDiscardCount, burstLossRate,
// burstDiscardRate, gapLossRate, gapDiscardRate, framesDropped,
// partialFramesLost, fullFramesLost
// crbug.com/webrtc/12532
RTCStatsMember<double> jitter; RTCStatsMember<double> jitter;
RTCStatsMember<int32_t> packets_lost; // Signed per RFC 3550 RTCStatsMember<int32_t> packets_lost; // Signed per RFC 3550
RTCStatsMember<uint64_t> packets_discarded; RTCStatsMember<uint64_t> packets_discarded;
@ -439,6 +475,8 @@ class RTC_EXPORT RTCSentRtpStreamStats : public RTCRTPStreamStats {
}; };
// https://w3c.github.io/webrtc-stats/#inboundrtpstats-dict* // https://w3c.github.io/webrtc-stats/#inboundrtpstats-dict*
// TODO(hbos): Support the remote case |is_remote = true|.
// https://bugs.webrtc.org/7065
class RTC_EXPORT RTCInboundRTPStreamStats final class RTC_EXPORT RTCInboundRTPStreamStats final
: public RTCReceivedRtpStreamStats { : public RTCReceivedRtpStreamStats {
public: public:
@ -449,8 +487,6 @@ class RTC_EXPORT RTCInboundRTPStreamStats final
RTCInboundRTPStreamStats(const RTCInboundRTPStreamStats& other); RTCInboundRTPStreamStats(const RTCInboundRTPStreamStats& other);
~RTCInboundRTPStreamStats() override; ~RTCInboundRTPStreamStats() override;
// TODO(https://crbug.com/webrtc/14174): Implement trackIdentifier and kind.
RTCStatsMember<std::string> remote_id; RTCStatsMember<std::string> remote_id;
RTCStatsMember<uint32_t> packets_received; RTCStatsMember<uint32_t> packets_received;
RTCStatsMember<uint64_t> fec_packets_received; RTCStatsMember<uint64_t> fec_packets_received;
@ -469,28 +505,48 @@ class RTC_EXPORT RTCInboundRTPStreamStats final
RTCStatsMember<double> audio_level; RTCStatsMember<double> audio_level;
RTCStatsMember<double> total_audio_energy; RTCStatsMember<double> total_audio_energy;
RTCStatsMember<double> total_samples_duration; RTCStatsMember<double> total_samples_duration;
// TODO(hbos): Collect and populate this value. https://bugs.webrtc.org/7065
RTCStatsMember<double> round_trip_time;
// TODO(hbos): Collect and populate this value. https://bugs.webrtc.org/7065
RTCStatsMember<uint32_t> packets_repaired;
// TODO(hbos): Collect and populate this value. https://bugs.webrtc.org/7065
RTCStatsMember<uint32_t> burst_packets_lost;
// TODO(hbos): Collect and populate this value. https://bugs.webrtc.org/7065
RTCStatsMember<uint32_t> burst_packets_discarded;
// TODO(hbos): Collect and populate this value. https://bugs.webrtc.org/7065
RTCStatsMember<uint32_t> burst_loss_count;
// TODO(hbos): Collect and populate this value. https://bugs.webrtc.org/7065
RTCStatsMember<uint32_t> burst_discard_count;
// TODO(hbos): Collect and populate this value. https://bugs.webrtc.org/7065
RTCStatsMember<double> burst_loss_rate;
// TODO(hbos): Collect and populate this value. https://bugs.webrtc.org/7065
RTCStatsMember<double> burst_discard_rate;
// TODO(hbos): Collect and populate this value. https://bugs.webrtc.org/7065
RTCStatsMember<double> gap_loss_rate;
// TODO(hbos): Collect and populate this value. https://bugs.webrtc.org/7065
RTCStatsMember<double> gap_discard_rate;
// Stats below are only implemented or defined for video. // Stats below are only implemented or defined for video.
RTCStatsMember<int32_t> frames_received; RTCStatsMember<int32_t> frames_received;
RTCStatsMember<uint32_t> frame_width; RTCStatsMember<uint32_t> frame_width;
RTCStatsMember<uint32_t> frame_height; RTCStatsMember<uint32_t> frame_height;
RTCStatsMember<uint32_t> frame_bit_depth;
RTCStatsMember<double> frames_per_second; RTCStatsMember<double> frames_per_second;
RTCStatsMember<uint32_t> frames_decoded; RTCStatsMember<uint32_t> frames_decoded;
RTCStatsMember<uint32_t> key_frames_decoded; RTCStatsMember<uint32_t> key_frames_decoded;
RTCStatsMember<uint32_t> frames_dropped; RTCStatsMember<uint32_t> frames_dropped;
RTCStatsMember<double> total_decode_time; RTCStatsMember<double> total_decode_time;
RTCStatsMember<double> total_processing_delay; RTCStatsMember<double> total_processing_delay;
// TODO(https://crbug.com/webrtc/13986): standardize // TODO(bugs.webrtc.org/13986): standardize
RTCNonStandardStatsMember<double> total_assembly_time; RTCNonStandardStatsMember<double> total_assembly_time;
RTCNonStandardStatsMember<uint32_t> frames_assembled_from_multiple_packets; RTCNonStandardStatsMember<uint32_t> frames_assembled_from_multiple_packets;
RTCStatsMember<double> total_inter_frame_delay; RTCStatsMember<double> total_inter_frame_delay;
RTCStatsMember<double> total_squared_inter_frame_delay; RTCStatsMember<double> total_squared_inter_frame_delay;
// https://w3c.github.io/webrtc-provisional-stats/#dom-rtcinboundrtpstreamstats-contenttype // https://henbos.github.io/webrtc-provisional-stats/#dom-rtcinboundrtpstreamstats-contenttype
RTCStatsMember<std::string> content_type; RTCStatsMember<std::string> content_type;
// Only populated if audio/video sync is enabled. // TODO(asapersson): Currently only populated if audio/video sync is enabled.
// TODO(https://crbug.com/webrtc/14177): Expose even if A/V sync is off?
RTCStatsMember<double> estimated_playout_timestamp; RTCStatsMember<double> estimated_playout_timestamp;
// Only implemented for video. // TODO(hbos): This is only implemented for video; implement it for audio as
// TODO(https://crbug.com/webrtc/14178): Also implement for audio. // well.
RTCStatsMember<std::string> decoder_implementation; RTCStatsMember<std::string> decoder_implementation;
// FIR and PLI counts are only defined for |kind == "video"|. // FIR and PLI counts are only defined for |kind == "video"|.
RTCStatsMember<uint32_t> fir_count; RTCStatsMember<uint32_t> fir_count;
@ -503,6 +559,8 @@ class RTC_EXPORT RTCInboundRTPStreamStats final
}; };
// https://w3c.github.io/webrtc-stats/#outboundrtpstats-dict* // https://w3c.github.io/webrtc-stats/#outboundrtpstats-dict*
// TODO(hbos): Support the remote case |is_remote = true|.
// https://bugs.webrtc.org/7066
class RTC_EXPORT RTCOutboundRTPStreamStats final : public RTCRTPStreamStats { class RTC_EXPORT RTCOutboundRTPStreamStats final : public RTCRTPStreamStats {
public: public:
WEBRTC_RTCSTATS_DECL(); WEBRTC_RTCSTATS_DECL();
@ -539,10 +597,10 @@ class RTC_EXPORT RTCOutboundRTPStreamStats final : public RTCRTPStreamStats {
RTCStatsMember<std::map<std::string, double>> quality_limitation_durations; RTCStatsMember<std::map<std::string, double>> quality_limitation_durations;
// https://w3c.github.io/webrtc-stats/#dom-rtcoutboundrtpstreamstats-qualitylimitationresolutionchanges // https://w3c.github.io/webrtc-stats/#dom-rtcoutboundrtpstreamstats-qualitylimitationresolutionchanges
RTCStatsMember<uint32_t> quality_limitation_resolution_changes; RTCStatsMember<uint32_t> quality_limitation_resolution_changes;
// https://w3c.github.io/webrtc-provisional-stats/#dom-rtcoutboundrtpstreamstats-contenttype // https://henbos.github.io/webrtc-provisional-stats/#dom-rtcoutboundrtpstreamstats-contenttype
RTCStatsMember<std::string> content_type; RTCStatsMember<std::string> content_type;
// Only implemented for video. // TODO(hbos): This is only implemented for video; implement it for audio as
// TODO(https://crbug.com/webrtc/14178): Implement for audio as well. // well.
RTCStatsMember<std::string> encoder_implementation; RTCStatsMember<std::string> encoder_implementation;
// FIR and PLI counts are only defined for |kind == "video"|. // FIR and PLI counts are only defined for |kind == "video"|.
RTCStatsMember<uint32_t> fir_count; RTCStatsMember<uint32_t> fir_count;
@ -562,6 +620,11 @@ class RTC_EXPORT RTCRemoteInboundRtpStreamStats final
RTCRemoteInboundRtpStreamStats(const RTCRemoteInboundRtpStreamStats& other); RTCRemoteInboundRtpStreamStats(const RTCRemoteInboundRtpStreamStats& other);
~RTCRemoteInboundRtpStreamStats() override; ~RTCRemoteInboundRtpStreamStats() override;
// TODO(hbos): The following RTCReceivedRtpStreamStats metrics should also be
// implemented: packetsReceived, packetsRepaired,
// burstPacketsLost, burstPacketsDiscarded, burstLossCount, burstDiscardCount,
// burstLossRate, burstDiscardRate, gapLossRate and gapDiscardRate.
// RTCRemoteInboundRtpStreamStats
RTCStatsMember<std::string> local_id; RTCStatsMember<std::string> local_id;
RTCStatsMember<double> round_trip_time; RTCStatsMember<double> round_trip_time;
RTCStatsMember<double> fraction_lost; RTCStatsMember<double> fraction_lost;
@ -652,7 +715,7 @@ class RTC_EXPORT RTCTransportStats final : public RTCStats {
RTCStatsMember<uint64_t> bytes_received; RTCStatsMember<uint64_t> bytes_received;
RTCStatsMember<uint64_t> packets_received; RTCStatsMember<uint64_t> packets_received;
RTCStatsMember<std::string> rtcp_transport_stats_id; RTCStatsMember<std::string> rtcp_transport_stats_id;
// Enum type RTCDtlsTransportState. // TODO(hbos): Support enum types? "RTCStatsMember<RTCDtlsTransportState>"?
RTCStatsMember<std::string> dtls_state; RTCStatsMember<std::string> dtls_state;
RTCStatsMember<std::string> selected_candidate_pair_id; RTCStatsMember<std::string> selected_candidate_pair_id;
RTCStatsMember<std::string> local_certificate_id; RTCStatsMember<std::string> local_certificate_id;

View File

@ -486,6 +486,7 @@ class RTCStatsReportVerifier {
verifier.TestMemberIsNonNegative<uint64_t>(candidate_pair.priority); verifier.TestMemberIsNonNegative<uint64_t>(candidate_pair.priority);
verifier.TestMemberIsDefined(candidate_pair.nominated); verifier.TestMemberIsDefined(candidate_pair.nominated);
verifier.TestMemberIsDefined(candidate_pair.writable); verifier.TestMemberIsDefined(candidate_pair.writable);
verifier.TestMemberIsUndefined(candidate_pair.readable);
verifier.TestMemberIsNonNegative<uint64_t>(candidate_pair.packets_sent); verifier.TestMemberIsNonNegative<uint64_t>(candidate_pair.packets_sent);
verifier.TestMemberIsNonNegative<uint64_t>( verifier.TestMemberIsNonNegative<uint64_t>(
candidate_pair.packets_discarded_on_send); candidate_pair.packets_discarded_on_send);
@ -513,8 +514,13 @@ class RTCStatsReportVerifier {
verifier.TestMemberIsNonNegative<uint64_t>( verifier.TestMemberIsNonNegative<uint64_t>(
candidate_pair.responses_received); candidate_pair.responses_received);
verifier.TestMemberIsNonNegative<uint64_t>(candidate_pair.responses_sent); verifier.TestMemberIsNonNegative<uint64_t>(candidate_pair.responses_sent);
verifier.TestMemberIsUndefined(candidate_pair.retransmissions_received);
verifier.TestMemberIsUndefined(candidate_pair.retransmissions_sent);
verifier.TestMemberIsUndefined(candidate_pair.consent_requests_received);
verifier.TestMemberIsNonNegative<uint64_t>( verifier.TestMemberIsNonNegative<uint64_t>(
candidate_pair.consent_requests_sent); candidate_pair.consent_requests_sent);
verifier.TestMemberIsUndefined(candidate_pair.consent_responses_received);
verifier.TestMemberIsUndefined(candidate_pair.consent_responses_sent);
return verifier.ExpectAllMembersSuccessfullyTested(); return verifier.ExpectAllMembersSuccessfullyTested();
} }
@ -630,6 +636,10 @@ class RTCStatsReportVerifier {
media_stream_track.frame_width); media_stream_track.frame_width);
verifier.TestMemberIsNonNegative<uint32_t>( verifier.TestMemberIsNonNegative<uint32_t>(
media_stream_track.frame_height); media_stream_track.frame_height);
verifier.TestMemberIsUndefined(media_stream_track.frames_per_second);
verifier.TestMemberIsUndefined(media_stream_track.frames_corrupted);
verifier.TestMemberIsUndefined(media_stream_track.partial_frames_lost);
verifier.TestMemberIsUndefined(media_stream_track.full_frames_lost);
// Audio-only members should be undefined // Audio-only members should be undefined
verifier.TestMemberIsUndefined(media_stream_track.audio_level); verifier.TestMemberIsUndefined(media_stream_track.audio_level);
verifier.TestMemberIsUndefined(media_stream_track.echo_return_loss); verifier.TestMemberIsUndefined(media_stream_track.echo_return_loss);
@ -731,11 +741,15 @@ class RTCStatsReportVerifier {
// Video-only members should be undefined // Video-only members should be undefined
verifier.TestMemberIsUndefined(media_stream_track.frame_width); verifier.TestMemberIsUndefined(media_stream_track.frame_width);
verifier.TestMemberIsUndefined(media_stream_track.frame_height); verifier.TestMemberIsUndefined(media_stream_track.frame_height);
verifier.TestMemberIsUndefined(media_stream_track.frames_per_second);
verifier.TestMemberIsUndefined(media_stream_track.frames_sent); verifier.TestMemberIsUndefined(media_stream_track.frames_sent);
verifier.TestMemberIsUndefined(media_stream_track.huge_frames_sent); verifier.TestMemberIsUndefined(media_stream_track.huge_frames_sent);
verifier.TestMemberIsUndefined(media_stream_track.frames_received); verifier.TestMemberIsUndefined(media_stream_track.frames_received);
verifier.TestMemberIsUndefined(media_stream_track.frames_decoded); verifier.TestMemberIsUndefined(media_stream_track.frames_decoded);
verifier.TestMemberIsUndefined(media_stream_track.frames_dropped); verifier.TestMemberIsUndefined(media_stream_track.frames_dropped);
verifier.TestMemberIsUndefined(media_stream_track.frames_corrupted);
verifier.TestMemberIsUndefined(media_stream_track.partial_frames_lost);
verifier.TestMemberIsUndefined(media_stream_track.full_frames_lost);
verifier.TestMemberIsUndefined(media_stream_track.freeze_count); verifier.TestMemberIsUndefined(media_stream_track.freeze_count);
verifier.TestMemberIsUndefined(media_stream_track.pause_count); verifier.TestMemberIsUndefined(media_stream_track.pause_count);
verifier.TestMemberIsUndefined(media_stream_track.total_freezes_duration); verifier.TestMemberIsUndefined(media_stream_track.total_freezes_duration);
@ -836,6 +850,7 @@ class RTCStatsReportVerifier {
} else { } else {
verifier.TestMemberIsUndefined(inbound_stream.frames_per_second); verifier.TestMemberIsUndefined(inbound_stream.frames_per_second);
} }
verifier.TestMemberIsUndefined(inbound_stream.frame_bit_depth);
verifier.TestMemberIsNonNegative<double>( verifier.TestMemberIsNonNegative<double>(
inbound_stream.jitter_buffer_delay); inbound_stream.jitter_buffer_delay);
verifier.TestMemberIsNonNegative<uint64_t>( verifier.TestMemberIsNonNegative<uint64_t>(
@ -879,6 +894,16 @@ class RTCStatsReportVerifier {
inbound_stream.total_samples_duration); inbound_stream.total_samples_duration);
verifier.TestMemberIsUndefined(inbound_stream.frames_received); verifier.TestMemberIsUndefined(inbound_stream.frames_received);
} }
verifier.TestMemberIsUndefined(inbound_stream.round_trip_time);
verifier.TestMemberIsUndefined(inbound_stream.packets_repaired);
verifier.TestMemberIsUndefined(inbound_stream.burst_packets_lost);
verifier.TestMemberIsUndefined(inbound_stream.burst_packets_discarded);
verifier.TestMemberIsUndefined(inbound_stream.burst_loss_count);
verifier.TestMemberIsUndefined(inbound_stream.burst_discard_count);
verifier.TestMemberIsUndefined(inbound_stream.burst_loss_rate);
verifier.TestMemberIsUndefined(inbound_stream.burst_discard_rate);
verifier.TestMemberIsUndefined(inbound_stream.gap_loss_rate);
verifier.TestMemberIsUndefined(inbound_stream.gap_discard_rate);
// Test runtime too short to get an estimate (at least two RTCP sender // Test runtime too short to get an estimate (at least two RTCP sender
// reports need to be received). // reports need to be received).
verifier.MarkMemberTested(inbound_stream.estimated_playout_timestamp, true); verifier.MarkMemberTested(inbound_stream.estimated_playout_timestamp, true);

View File

@ -191,6 +191,7 @@ WEBRTC_RTCSTATS_IMPL(RTCIceCandidatePairStats, RTCStats, "candidate-pair",
&priority, &priority,
&nominated, &nominated,
&writable, &writable,
&readable,
&packets_sent, &packets_sent,
&packets_received, &packets_received,
&bytes_sent, &bytes_sent,
@ -203,7 +204,12 @@ WEBRTC_RTCSTATS_IMPL(RTCIceCandidatePairStats, RTCStats, "candidate-pair",
&requests_sent, &requests_sent,
&responses_received, &responses_received,
&responses_sent, &responses_sent,
&retransmissions_received,
&retransmissions_sent,
&consent_requests_received,
&consent_requests_sent, &consent_requests_sent,
&consent_responses_received,
&consent_responses_sent,
&packets_discarded_on_send, &packets_discarded_on_send,
&bytes_discarded_on_send) &bytes_discarded_on_send)
// clang-format on // clang-format on
@ -222,6 +228,7 @@ RTCIceCandidatePairStats::RTCIceCandidatePairStats(std::string&& id,
priority("priority"), priority("priority"),
nominated("nominated"), nominated("nominated"),
writable("writable"), writable("writable"),
readable("readable"),
packets_sent("packetsSent"), packets_sent("packetsSent"),
packets_received("packetsReceived"), packets_received("packetsReceived"),
bytes_sent("bytesSent"), bytes_sent("bytesSent"),
@ -234,7 +241,12 @@ RTCIceCandidatePairStats::RTCIceCandidatePairStats(std::string&& id,
requests_sent("requestsSent"), requests_sent("requestsSent"),
responses_received("responsesReceived"), responses_received("responsesReceived"),
responses_sent("responsesSent"), responses_sent("responsesSent"),
retransmissions_received("retransmissionsReceived"),
retransmissions_sent("retransmissionsSent"),
consent_requests_received("consentRequestsReceived"),
consent_requests_sent("consentRequestsSent"), consent_requests_sent("consentRequestsSent"),
consent_responses_received("consentResponsesReceived"),
consent_responses_sent("consentResponsesSent"),
packets_discarded_on_send("packetsDiscardedOnSend"), packets_discarded_on_send("packetsDiscardedOnSend"),
bytes_discarded_on_send("bytesDiscardedOnSend") {} bytes_discarded_on_send("bytesDiscardedOnSend") {}
@ -248,6 +260,7 @@ RTCIceCandidatePairStats::RTCIceCandidatePairStats(
priority(other.priority), priority(other.priority),
nominated(other.nominated), nominated(other.nominated),
writable(other.writable), writable(other.writable),
readable(other.readable),
packets_sent(other.packets_sent), packets_sent(other.packets_sent),
packets_received(other.packets_received), packets_received(other.packets_received),
bytes_sent(other.bytes_sent), bytes_sent(other.bytes_sent),
@ -260,7 +273,12 @@ RTCIceCandidatePairStats::RTCIceCandidatePairStats(
requests_sent(other.requests_sent), requests_sent(other.requests_sent),
responses_received(other.responses_received), responses_received(other.responses_received),
responses_sent(other.responses_sent), responses_sent(other.responses_sent),
retransmissions_received(other.retransmissions_received),
retransmissions_sent(other.retransmissions_sent),
consent_requests_received(other.consent_requests_received),
consent_requests_sent(other.consent_requests_sent), consent_requests_sent(other.consent_requests_sent),
consent_responses_received(other.consent_responses_received),
consent_responses_sent(other.consent_responses_sent),
packets_discarded_on_send(other.packets_discarded_on_send), packets_discarded_on_send(other.packets_discarded_on_send),
bytes_discarded_on_send(other.bytes_discarded_on_send) {} bytes_discarded_on_send(other.bytes_discarded_on_send) {}
@ -394,11 +412,15 @@ WEBRTC_RTCSTATS_IMPL(RTCMediaStreamTrackStats, RTCStats, "track",
&jitter_buffer_emitted_count, &jitter_buffer_emitted_count,
&frame_width, &frame_width,
&frame_height, &frame_height,
&frames_per_second,
&frames_sent, &frames_sent,
&huge_frames_sent, &huge_frames_sent,
&frames_received, &frames_received,
&frames_decoded, &frames_decoded,
&frames_dropped, &frames_dropped,
&frames_corrupted,
&partial_frames_lost,
&full_frames_lost,
&audio_level, &audio_level,
&total_audio_energy, &total_audio_energy,
&echo_return_loss, &echo_return_loss,
@ -443,11 +465,15 @@ RTCMediaStreamTrackStats::RTCMediaStreamTrackStats(std::string&& id,
jitter_buffer_emitted_count("jitterBufferEmittedCount"), jitter_buffer_emitted_count("jitterBufferEmittedCount"),
frame_width("frameWidth"), frame_width("frameWidth"),
frame_height("frameHeight"), frame_height("frameHeight"),
frames_per_second("framesPerSecond"),
frames_sent("framesSent"), frames_sent("framesSent"),
huge_frames_sent("hugeFramesSent"), huge_frames_sent("hugeFramesSent"),
frames_received("framesReceived"), frames_received("framesReceived"),
frames_decoded("framesDecoded"), frames_decoded("framesDecoded"),
frames_dropped("framesDropped"), frames_dropped("framesDropped"),
frames_corrupted("framesCorrupted"),
partial_frames_lost("partialFramesLost"),
full_frames_lost("fullFramesLost"),
audio_level("audioLevel"), audio_level("audioLevel"),
total_audio_energy("totalAudioEnergy"), total_audio_energy("totalAudioEnergy"),
echo_return_loss("echoReturnLoss"), echo_return_loss("echoReturnLoss"),
@ -495,11 +521,15 @@ RTCMediaStreamTrackStats::RTCMediaStreamTrackStats(
jitter_buffer_emitted_count(other.jitter_buffer_emitted_count), jitter_buffer_emitted_count(other.jitter_buffer_emitted_count),
frame_width(other.frame_width), frame_width(other.frame_width),
frame_height(other.frame_height), frame_height(other.frame_height),
frames_per_second(other.frames_per_second),
frames_sent(other.frames_sent), frames_sent(other.frames_sent),
huge_frames_sent(other.huge_frames_sent), huge_frames_sent(other.huge_frames_sent),
frames_received(other.frames_received), frames_received(other.frames_received),
frames_decoded(other.frames_decoded), frames_decoded(other.frames_decoded),
frames_dropped(other.frames_dropped), frames_dropped(other.frames_dropped),
frames_corrupted(other.frames_corrupted),
partial_frames_lost(other.partial_frames_lost),
full_frames_lost(other.full_frames_lost),
audio_level(other.audio_level), audio_level(other.audio_level),
total_audio_energy(other.total_audio_energy), total_audio_energy(other.total_audio_energy),
echo_return_loss(other.echo_return_loss), echo_return_loss(other.echo_return_loss),
@ -658,9 +688,20 @@ WEBRTC_RTCSTATS_IMPL(
&audio_level, &audio_level,
&total_audio_energy, &total_audio_energy,
&total_samples_duration, &total_samples_duration,
&round_trip_time,
&packets_repaired,
&burst_packets_lost,
&burst_packets_discarded,
&burst_loss_count,
&burst_discard_count,
&burst_loss_rate,
&burst_discard_rate,
&gap_loss_rate,
&gap_discard_rate,
&frames_received, &frames_received,
&frame_width, &frame_width,
&frame_height, &frame_height,
&frame_bit_depth,
&frames_per_second, &frames_per_second,
&frames_decoded, &frames_decoded,
&key_frames_decoded, &key_frames_decoded,
@ -706,9 +747,20 @@ RTCInboundRTPStreamStats::RTCInboundRTPStreamStats(std::string&& id,
audio_level("audioLevel"), audio_level("audioLevel"),
total_audio_energy("totalAudioEnergy"), total_audio_energy("totalAudioEnergy"),
total_samples_duration("totalSamplesDuration"), total_samples_duration("totalSamplesDuration"),
round_trip_time("roundTripTime"),
packets_repaired("packetsRepaired"),
burst_packets_lost("burstPacketsLost"),
burst_packets_discarded("burstPacketsDiscarded"),
burst_loss_count("burstLossCount"),
burst_discard_count("burstDiscardCount"),
burst_loss_rate("burstLossRate"),
burst_discard_rate("burstDiscardRate"),
gap_loss_rate("gapLossRate"),
gap_discard_rate("gapDiscardRate"),
frames_received("framesReceived"), frames_received("framesReceived"),
frame_width("frameWidth"), frame_width("frameWidth"),
frame_height("frameHeight"), frame_height("frameHeight"),
frame_bit_depth("frameBitDepth"),
frames_per_second("framesPerSecond"), frames_per_second("framesPerSecond"),
frames_decoded("framesDecoded"), frames_decoded("framesDecoded"),
key_frames_decoded("keyFramesDecoded"), key_frames_decoded("keyFramesDecoded"),
@ -751,9 +803,20 @@ RTCInboundRTPStreamStats::RTCInboundRTPStreamStats(
audio_level(other.audio_level), audio_level(other.audio_level),
total_audio_energy(other.total_audio_energy), total_audio_energy(other.total_audio_energy),
total_samples_duration(other.total_samples_duration), total_samples_duration(other.total_samples_duration),
round_trip_time(other.round_trip_time),
packets_repaired(other.packets_repaired),
burst_packets_lost(other.burst_packets_lost),
burst_packets_discarded(other.burst_packets_discarded),
burst_loss_count(other.burst_loss_count),
burst_discard_count(other.burst_discard_count),
burst_loss_rate(other.burst_loss_rate),
burst_discard_rate(other.burst_discard_rate),
gap_loss_rate(other.gap_loss_rate),
gap_discard_rate(other.gap_discard_rate),
frames_received(other.frames_received), frames_received(other.frames_received),
frame_width(other.frame_width), frame_width(other.frame_width),
frame_height(other.frame_height), frame_height(other.frame_height),
frame_bit_depth(other.frame_bit_depth),
frames_per_second(other.frames_per_second), frames_per_second(other.frames_per_second),
frames_decoded(other.frames_decoded), frames_decoded(other.frames_decoded),
key_frames_decoded(other.key_frames_decoded), key_frames_decoded(other.key_frames_decoded),