From ac58a334f7950983f324efa2b4025d2bbff4a67c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Bostr=C3=B6m?= Date: Mon, 22 Jan 2024 13:51:36 +0100 Subject: [PATCH] [Stats] Migrate from the RTCStatsMember type alias to absl::optional. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit With this CL, the only usage of RTCStatsMember within WebRTC is the actual type alias declaration. It's not referenced anywhere anymore. This allows us to deleting the type alias, but let's do that in a standalone CL in case it gets reverted. Bug: webrtc:15164 Change-Id: I766d07abb62b5ddd524859b8ed749394fc439e52 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/335621 Reviewed-by: Harald Alvestrand Reviewed-by: Evan Shrubsole Commit-Queue: Henrik Boström Cr-Commit-Position: refs/heads/main@{#41612} --- api/stats/rtc_stats.h | 15 +- api/stats/rtcstats_objects.h | 415 +++++++++++++++-------------- pc/BUILD.gn | 1 + pc/rtc_stats_collector_unittest.cc | 3 +- pc/rtc_stats_integrationtest.cc | 17 +- pc/rtc_stats_traversal.cc | 3 +- stats/BUILD.gn | 3 + stats/rtc_stats_report_unittest.cc | 7 +- stats/rtc_stats_unittest.cc | 5 +- stats/test/rtc_test_stats.h | 33 +-- 10 files changed, 257 insertions(+), 245 deletions(-) diff --git a/api/stats/rtc_stats.h b/api/stats/rtc_stats.h index 678108109a..74e7fc4d8e 100644 --- a/api/stats/rtc_stats.h +++ b/api/stats/rtc_stats.h @@ -20,6 +20,7 @@ #include #include +#include "absl/types/optional.h" #include "api/stats/attribute.h" #include "api/units/timestamp.h" #include "rtc_base/checks.h" @@ -38,8 +39,8 @@ namespace webrtc { // Use the `WEBRTC_RTCSTATS_IMPL` macro when implementing subclasses, see macro // for details. // -// Derived classes list their dictionary attributes (RTCStatsMember to soon -// be replaced by absl::optional) as public fields, allowing the following: +// Derived classes list their dictionary attributes, absl::optional, as +// public fields, allowing the following: // // RTCFooStats foo("fooId", Timestamp::Micros(GetCurrentTime())); // foo.bar = 42; @@ -51,7 +52,7 @@ namespace webrtc { // iteration: // // for (const auto& attribute : foo.Attributes()) { -// printf("%s = %s\n", attribute.name(), attribute.ValueToString().c_str()); +// printf("%s = %s\n", attribute.name(), attribute.ToString().c_str()); // } class RTC_EXPORT RTCStats { public: @@ -72,12 +73,12 @@ class RTC_EXPORT RTCStats { // metrics as viewed via the Attribute wrapper. std::vector Attributes() const; template - Attribute GetAttribute(const RTCStatsMember& stat) const { + Attribute GetAttribute(const absl::optional& stat) const { for (const auto& attribute : Attributes()) { if (!attribute.holds_alternative()) { continue; } - if (absl::get*>(attribute.as_variant()) == + if (absl::get*>(attribute.as_variant()) == &stat) { return attribute; } @@ -135,8 +136,8 @@ class RTC_EXPORT RTCStats { // // RTCFooStats(const std::string& id, Timestamp timestamp); // -// RTCStatsMember foo; -// RTCStatsMember bar; +// absl::optional foo; +// absl::optional bar; // }; // // rtcfoostats.cc: diff --git a/api/stats/rtcstats_objects.h b/api/stats/rtcstats_objects.h index 351c2cbefe..9f51f56cc5 100644 --- a/api/stats/rtcstats_objects.h +++ b/api/stats/rtcstats_objects.h @@ -18,6 +18,7 @@ #include #include +#include "absl/types/optional.h" #include "api/stats/rtc_stats.h" #include "rtc_base/system/rtc_export.h" @@ -30,10 +31,10 @@ class RTC_EXPORT RTCCertificateStats final : public RTCStats { RTCCertificateStats(std::string id, Timestamp timestamp); ~RTCCertificateStats() override; - RTCStatsMember fingerprint; - RTCStatsMember fingerprint_algorithm; - RTCStatsMember base64_certificate; - RTCStatsMember issuer_certificate_id; + absl::optional fingerprint; + absl::optional fingerprint_algorithm; + absl::optional base64_certificate; + absl::optional issuer_certificate_id; }; // https://w3c.github.io/webrtc-stats/#codec-dict* @@ -43,12 +44,12 @@ class RTC_EXPORT RTCCodecStats final : public RTCStats { RTCCodecStats(std::string id, Timestamp timestamp); ~RTCCodecStats() override; - RTCStatsMember transport_id; - RTCStatsMember payload_type; - RTCStatsMember mime_type; - RTCStatsMember clock_rate; - RTCStatsMember channels; - RTCStatsMember sdp_fmtp_line; + absl::optional transport_id; + absl::optional payload_type; + absl::optional mime_type; + absl::optional clock_rate; + absl::optional channels; + absl::optional sdp_fmtp_line; }; // https://w3c.github.io/webrtc-stats/#dcstats-dict* @@ -58,14 +59,14 @@ class RTC_EXPORT RTCDataChannelStats final : public RTCStats { RTCDataChannelStats(std::string id, Timestamp timestamp); ~RTCDataChannelStats() override; - RTCStatsMember label; - RTCStatsMember protocol; - RTCStatsMember data_channel_identifier; - RTCStatsMember state; - RTCStatsMember messages_sent; - RTCStatsMember bytes_sent; - RTCStatsMember messages_received; - RTCStatsMember bytes_received; + absl::optional label; + absl::optional protocol; + absl::optional data_channel_identifier; + absl::optional state; + absl::optional messages_sent; + absl::optional bytes_sent; + absl::optional messages_received; + absl::optional bytes_received; }; // https://w3c.github.io/webrtc-stats/#candidatepair-dict* @@ -75,35 +76,35 @@ class RTC_EXPORT RTCIceCandidatePairStats final : public RTCStats { RTCIceCandidatePairStats(std::string id, Timestamp timestamp); ~RTCIceCandidatePairStats() override; - RTCStatsMember transport_id; - RTCStatsMember local_candidate_id; - RTCStatsMember remote_candidate_id; - RTCStatsMember state; + absl::optional transport_id; + absl::optional local_candidate_id; + absl::optional remote_candidate_id; + absl::optional state; // Obsolete: priority - RTCStatsMember priority; - RTCStatsMember nominated; + absl::optional priority; + absl::optional nominated; // `writable` does not exist in the spec and old comments suggest it used to // exist but was incorrectly implemented. // TODO(https://crbug.com/webrtc/14171): Standardize and/or modify // implementation. - RTCStatsMember writable; - RTCStatsMember packets_sent; - RTCStatsMember packets_received; - RTCStatsMember bytes_sent; - RTCStatsMember bytes_received; - RTCStatsMember total_round_trip_time; - RTCStatsMember current_round_trip_time; - RTCStatsMember available_outgoing_bitrate; - RTCStatsMember available_incoming_bitrate; - RTCStatsMember requests_received; - RTCStatsMember requests_sent; - RTCStatsMember responses_received; - RTCStatsMember responses_sent; - RTCStatsMember consent_requests_sent; - RTCStatsMember packets_discarded_on_send; - RTCStatsMember bytes_discarded_on_send; - RTCStatsMember last_packet_received_timestamp; - RTCStatsMember last_packet_sent_timestamp; + absl::optional writable; + absl::optional packets_sent; + absl::optional packets_received; + absl::optional bytes_sent; + absl::optional bytes_received; + absl::optional total_round_trip_time; + absl::optional current_round_trip_time; + absl::optional available_outgoing_bitrate; + absl::optional available_incoming_bitrate; + absl::optional requests_received; + absl::optional requests_sent; + absl::optional responses_received; + absl::optional responses_sent; + absl::optional consent_requests_sent; + absl::optional packets_discarded_on_send; + absl::optional bytes_discarded_on_send; + absl::optional last_packet_received_timestamp; + absl::optional last_packet_sent_timestamp; }; // https://w3c.github.io/webrtc-stats/#icecandidate-dict* @@ -112,28 +113,28 @@ class RTC_EXPORT RTCIceCandidateStats : public RTCStats { WEBRTC_RTCSTATS_DECL(); ~RTCIceCandidateStats() override; - RTCStatsMember transport_id; + absl::optional transport_id; // Obsolete: is_remote - RTCStatsMember is_remote; - RTCStatsMember network_type; - RTCStatsMember ip; - RTCStatsMember address; - RTCStatsMember port; - RTCStatsMember protocol; - RTCStatsMember relay_protocol; - RTCStatsMember candidate_type; - RTCStatsMember priority; - RTCStatsMember url; - RTCStatsMember foundation; - RTCStatsMember related_address; - RTCStatsMember related_port; - RTCStatsMember username_fragment; - RTCStatsMember tcp_type; + absl::optional is_remote; + absl::optional network_type; + absl::optional ip; + absl::optional address; + absl::optional port; + absl::optional protocol; + absl::optional relay_protocol; + absl::optional candidate_type; + absl::optional priority; + absl::optional url; + absl::optional foundation; + absl::optional related_address; + absl::optional related_port; + absl::optional username_fragment; + absl::optional tcp_type; // The following metrics are NOT exposed to JavaScript. We should consider // standardizing or removing them. - RTCStatsMember vpn; - RTCStatsMember network_adapter_type; + absl::optional vpn; + absl::optional network_adapter_type; protected: RTCIceCandidateStats(std::string id, Timestamp timestamp, bool is_remote); @@ -168,8 +169,8 @@ class RTC_EXPORT RTCPeerConnectionStats final : public RTCStats { RTCPeerConnectionStats(std::string id, Timestamp timestamp); ~RTCPeerConnectionStats() override; - RTCStatsMember data_channels_opened; - RTCStatsMember data_channels_closed; + absl::optional data_channels_opened; + absl::optional data_channels_closed; }; // https://w3c.github.io/webrtc-stats/#streamstats-dict* @@ -178,10 +179,10 @@ class RTC_EXPORT RTCRtpStreamStats : public RTCStats { WEBRTC_RTCSTATS_DECL(); ~RTCRtpStreamStats() override; - RTCStatsMember ssrc; - RTCStatsMember kind; - RTCStatsMember transport_id; - RTCStatsMember codec_id; + absl::optional ssrc; + absl::optional kind; + absl::optional transport_id; + absl::optional codec_id; protected: RTCRtpStreamStats(std::string id, Timestamp timestamp); @@ -193,8 +194,8 @@ class RTC_EXPORT RTCReceivedRtpStreamStats : public RTCRtpStreamStats { WEBRTC_RTCSTATS_DECL(); ~RTCReceivedRtpStreamStats() override; - RTCStatsMember jitter; - RTCStatsMember packets_lost; // Signed per RFC 3550 + absl::optional jitter; + absl::optional packets_lost; // Signed per RFC 3550 protected: RTCReceivedRtpStreamStats(std::string id, Timestamp timestamp); @@ -206,8 +207,8 @@ class RTC_EXPORT RTCSentRtpStreamStats : public RTCRtpStreamStats { WEBRTC_RTCSTATS_DECL(); ~RTCSentRtpStreamStats() override; - RTCStatsMember packets_sent; - RTCStatsMember bytes_sent; + absl::optional packets_sent; + absl::optional bytes_sent; protected: RTCSentRtpStreamStats(std::string id, Timestamp timestamp); @@ -221,51 +222,51 @@ class RTC_EXPORT RTCInboundRtpStreamStats final RTCInboundRtpStreamStats(std::string id, Timestamp timestamp); ~RTCInboundRtpStreamStats() override; - RTCStatsMember playout_id; - RTCStatsMember track_identifier; - RTCStatsMember mid; - RTCStatsMember remote_id; - RTCStatsMember packets_received; - RTCStatsMember packets_discarded; - RTCStatsMember fec_packets_received; - RTCStatsMember fec_bytes_received; - RTCStatsMember fec_packets_discarded; + absl::optional playout_id; + absl::optional track_identifier; + absl::optional mid; + absl::optional remote_id; + absl::optional packets_received; + absl::optional packets_discarded; + absl::optional fec_packets_received; + absl::optional fec_bytes_received; + absl::optional fec_packets_discarded; // Inbound FEC SSRC. Only present if a mechanism like FlexFEC is negotiated. - RTCStatsMember fec_ssrc; - RTCStatsMember bytes_received; - RTCStatsMember header_bytes_received; + absl::optional fec_ssrc; + absl::optional bytes_received; + absl::optional header_bytes_received; // Inbound RTX stats. Only defined when RTX is used and it is therefore // possible to distinguish retransmissions. - RTCStatsMember retransmitted_packets_received; - RTCStatsMember retransmitted_bytes_received; - RTCStatsMember rtx_ssrc; + absl::optional retransmitted_packets_received; + absl::optional retransmitted_bytes_received; + absl::optional rtx_ssrc; - RTCStatsMember last_packet_received_timestamp; - RTCStatsMember jitter_buffer_delay; - RTCStatsMember jitter_buffer_target_delay; - RTCStatsMember jitter_buffer_minimum_delay; - RTCStatsMember jitter_buffer_emitted_count; - RTCStatsMember total_samples_received; - RTCStatsMember concealed_samples; - RTCStatsMember silent_concealed_samples; - RTCStatsMember concealment_events; - RTCStatsMember inserted_samples_for_deceleration; - RTCStatsMember removed_samples_for_acceleration; - RTCStatsMember audio_level; - RTCStatsMember total_audio_energy; - RTCStatsMember total_samples_duration; + absl::optional last_packet_received_timestamp; + absl::optional jitter_buffer_delay; + absl::optional jitter_buffer_target_delay; + absl::optional jitter_buffer_minimum_delay; + absl::optional jitter_buffer_emitted_count; + absl::optional total_samples_received; + absl::optional concealed_samples; + absl::optional silent_concealed_samples; + absl::optional concealment_events; + absl::optional inserted_samples_for_deceleration; + absl::optional removed_samples_for_acceleration; + absl::optional audio_level; + absl::optional total_audio_energy; + absl::optional total_samples_duration; // Stats below are only implemented or defined for video. - RTCStatsMember frames_received; - RTCStatsMember frame_width; - RTCStatsMember frame_height; - RTCStatsMember frames_per_second; - RTCStatsMember frames_decoded; - RTCStatsMember key_frames_decoded; - RTCStatsMember frames_dropped; - RTCStatsMember total_decode_time; - RTCStatsMember total_processing_delay; - RTCStatsMember total_assembly_time; - RTCStatsMember frames_assembled_from_multiple_packets; + absl::optional frames_received; + absl::optional frame_width; + absl::optional frame_height; + absl::optional frames_per_second; + absl::optional frames_decoded; + absl::optional key_frames_decoded; + absl::optional frames_dropped; + absl::optional total_decode_time; + absl::optional total_processing_delay; + absl::optional total_assembly_time; + absl::optional frames_assembled_from_multiple_packets; // TODO(https://crbug.com/webrtc/15600): Implement framesRendered, which is // incremented at the same time that totalInterFrameDelay and // totalSquaredInterFrameDelay is incremented. (Dividing inter-frame delay by @@ -277,43 +278,43 @@ class RTC_EXPORT RTCInboundRtpStreamStats final // at delivery to sink, not at actual render time. When we have an actual // frame rendered callback, move the calculating of these metrics to there in // order to make them more accurate. - RTCStatsMember total_inter_frame_delay; - RTCStatsMember total_squared_inter_frame_delay; - RTCStatsMember pause_count; - RTCStatsMember total_pauses_duration; - RTCStatsMember freeze_count; - RTCStatsMember total_freezes_duration; + absl::optional total_inter_frame_delay; + absl::optional total_squared_inter_frame_delay; + absl::optional pause_count; + absl::optional total_pauses_duration; + absl::optional freeze_count; + absl::optional total_freezes_duration; // https://w3c.github.io/webrtc-provisional-stats/#dom-rtcinboundrtpstreamstats-contenttype - RTCStatsMember content_type; + absl::optional content_type; // Only populated if audio/video sync is enabled. // TODO(https://crbug.com/webrtc/14177): Expose even if A/V sync is off? - RTCStatsMember estimated_playout_timestamp; + absl::optional estimated_playout_timestamp; // Only defined for video. // In JavaScript, this is only exposed if HW exposure is allowed. - RTCStatsMember decoder_implementation; + absl::optional decoder_implementation; // FIR and PLI counts are only defined for |kind == "video"|. - RTCStatsMember fir_count; - RTCStatsMember pli_count; - RTCStatsMember nack_count; - RTCStatsMember qp_sum; + absl::optional fir_count; + absl::optional pli_count; + absl::optional nack_count; + absl::optional qp_sum; // This is a remnant of the legacy getStats() API. When the "video-timing" // header extension is used, // https://webrtc.github.io/webrtc-org/experiments/rtp-hdrext/video-timing/, // `googTimingFrameInfo` is exposed with the value of // TimingFrameInfo::ToString(). // TODO(https://crbug.com/webrtc/14586): Unship or standardize this metric. - RTCStatsMember goog_timing_frame_info; + absl::optional goog_timing_frame_info; // In JavaScript, this is only exposed if HW exposure is allowed. - RTCStatsMember power_efficient_decoder; + absl::optional power_efficient_decoder; // The following metrics are NOT exposed to JavaScript. We should consider // standardizing or removing them. - RTCStatsMember jitter_buffer_flushes; - RTCStatsMember delayed_packet_outage_samples; - RTCStatsMember relative_packet_arrival_delay; - RTCStatsMember interruption_count; - RTCStatsMember total_interruption_duration; - RTCStatsMember min_playout_delay; + absl::optional jitter_buffer_flushes; + absl::optional delayed_packet_outage_samples; + absl::optional relative_packet_arrival_delay; + absl::optional interruption_count; + absl::optional total_interruption_duration; + absl::optional min_playout_delay; }; // https://w3c.github.io/webrtc-stats/#outboundrtpstats-dict* @@ -324,46 +325,46 @@ class RTC_EXPORT RTCOutboundRtpStreamStats final RTCOutboundRtpStreamStats(std::string id, Timestamp timestamp); ~RTCOutboundRtpStreamStats() override; - RTCStatsMember media_source_id; - RTCStatsMember remote_id; - RTCStatsMember mid; - RTCStatsMember rid; - RTCStatsMember retransmitted_packets_sent; - RTCStatsMember header_bytes_sent; - RTCStatsMember retransmitted_bytes_sent; - RTCStatsMember target_bitrate; - RTCStatsMember frames_encoded; - RTCStatsMember key_frames_encoded; - RTCStatsMember total_encode_time; - RTCStatsMember total_encoded_bytes_target; - RTCStatsMember frame_width; - RTCStatsMember frame_height; - RTCStatsMember frames_per_second; - RTCStatsMember frames_sent; - RTCStatsMember huge_frames_sent; - RTCStatsMember total_packet_send_delay; - RTCStatsMember quality_limitation_reason; - RTCStatsMember> quality_limitation_durations; + absl::optional media_source_id; + absl::optional remote_id; + absl::optional mid; + absl::optional rid; + absl::optional retransmitted_packets_sent; + absl::optional header_bytes_sent; + absl::optional retransmitted_bytes_sent; + absl::optional target_bitrate; + absl::optional frames_encoded; + absl::optional key_frames_encoded; + absl::optional total_encode_time; + absl::optional total_encoded_bytes_target; + absl::optional frame_width; + absl::optional frame_height; + absl::optional frames_per_second; + absl::optional frames_sent; + absl::optional huge_frames_sent; + absl::optional total_packet_send_delay; + absl::optional quality_limitation_reason; + absl::optional> quality_limitation_durations; // https://w3c.github.io/webrtc-stats/#dom-rtcoutboundrtpstreamstats-qualitylimitationresolutionchanges - RTCStatsMember quality_limitation_resolution_changes; + absl::optional quality_limitation_resolution_changes; // https://w3c.github.io/webrtc-provisional-stats/#dom-rtcoutboundrtpstreamstats-contenttype - RTCStatsMember content_type; + absl::optional content_type; // In JavaScript, this is only exposed if HW exposure is allowed. // Only implemented for video. // TODO(https://crbug.com/webrtc/14178): Implement for audio as well. - RTCStatsMember encoder_implementation; + absl::optional encoder_implementation; // FIR and PLI counts are only defined for |kind == "video"|. - RTCStatsMember fir_count; - RTCStatsMember pli_count; - RTCStatsMember nack_count; - RTCStatsMember qp_sum; - RTCStatsMember active; + absl::optional fir_count; + absl::optional pli_count; + absl::optional nack_count; + absl::optional qp_sum; + absl::optional active; // In JavaScript, this is only exposed if HW exposure is allowed. - RTCStatsMember power_efficient_encoder; - RTCStatsMember scalability_mode; + absl::optional power_efficient_encoder; + absl::optional scalability_mode; // RTX ssrc. Only present if RTX is negotiated. - RTCStatsMember rtx_ssrc; + absl::optional rtx_ssrc; }; // https://w3c.github.io/webrtc-stats/#remoteinboundrtpstats-dict* @@ -374,11 +375,11 @@ class RTC_EXPORT RTCRemoteInboundRtpStreamStats final RTCRemoteInboundRtpStreamStats(std::string id, Timestamp timestamp); ~RTCRemoteInboundRtpStreamStats() override; - RTCStatsMember local_id; - RTCStatsMember round_trip_time; - RTCStatsMember fraction_lost; - RTCStatsMember total_round_trip_time; - RTCStatsMember round_trip_time_measurements; + absl::optional local_id; + absl::optional round_trip_time; + absl::optional fraction_lost; + absl::optional total_round_trip_time; + absl::optional round_trip_time_measurements; }; // https://w3c.github.io/webrtc-stats/#remoteoutboundrtpstats-dict* @@ -389,12 +390,12 @@ class RTC_EXPORT RTCRemoteOutboundRtpStreamStats final RTCRemoteOutboundRtpStreamStats(std::string id, Timestamp timestamp); ~RTCRemoteOutboundRtpStreamStats() override; - RTCStatsMember local_id; - RTCStatsMember remote_timestamp; - RTCStatsMember reports_sent; - RTCStatsMember round_trip_time; - RTCStatsMember round_trip_time_measurements; - RTCStatsMember total_round_trip_time; + absl::optional local_id; + absl::optional remote_timestamp; + absl::optional reports_sent; + absl::optional round_trip_time; + absl::optional round_trip_time_measurements; + absl::optional total_round_trip_time; }; // https://w3c.github.io/webrtc-stats/#dom-rtcmediasourcestats @@ -403,8 +404,8 @@ class RTC_EXPORT RTCMediaSourceStats : public RTCStats { WEBRTC_RTCSTATS_DECL(); ~RTCMediaSourceStats() override; - RTCStatsMember track_identifier; - RTCStatsMember kind; + absl::optional track_identifier; + absl::optional kind; protected: RTCMediaSourceStats(std::string id, Timestamp timestamp); @@ -417,11 +418,11 @@ class RTC_EXPORT RTCAudioSourceStats final : public RTCMediaSourceStats { RTCAudioSourceStats(std::string id, Timestamp timestamp); ~RTCAudioSourceStats() override; - RTCStatsMember audio_level; - RTCStatsMember total_audio_energy; - RTCStatsMember total_samples_duration; - RTCStatsMember echo_return_loss; - RTCStatsMember echo_return_loss_enhancement; + absl::optional audio_level; + absl::optional total_audio_energy; + absl::optional total_samples_duration; + absl::optional echo_return_loss; + absl::optional echo_return_loss_enhancement; }; // https://w3c.github.io/webrtc-stats/#dom-rtcvideosourcestats @@ -431,10 +432,10 @@ class RTC_EXPORT RTCVideoSourceStats final : public RTCMediaSourceStats { RTCVideoSourceStats(std::string id, Timestamp timestamp); ~RTCVideoSourceStats() override; - RTCStatsMember width; - RTCStatsMember height; - RTCStatsMember frames; - RTCStatsMember frames_per_second; + absl::optional width; + absl::optional height; + absl::optional frames; + absl::optional frames_per_second; }; // https://w3c.github.io/webrtc-stats/#transportstats-dict* @@ -444,23 +445,23 @@ class RTC_EXPORT RTCTransportStats final : public RTCStats { RTCTransportStats(std::string id, Timestamp timestamp); ~RTCTransportStats() override; - RTCStatsMember bytes_sent; - RTCStatsMember packets_sent; - RTCStatsMember bytes_received; - RTCStatsMember packets_received; - RTCStatsMember rtcp_transport_stats_id; - RTCStatsMember dtls_state; - RTCStatsMember selected_candidate_pair_id; - RTCStatsMember local_certificate_id; - RTCStatsMember remote_certificate_id; - RTCStatsMember tls_version; - RTCStatsMember dtls_cipher; - RTCStatsMember dtls_role; - RTCStatsMember srtp_cipher; - RTCStatsMember selected_candidate_pair_changes; - RTCStatsMember ice_role; - RTCStatsMember ice_local_username_fragment; - RTCStatsMember ice_state; + absl::optional bytes_sent; + absl::optional packets_sent; + absl::optional bytes_received; + absl::optional packets_received; + absl::optional rtcp_transport_stats_id; + absl::optional dtls_state; + absl::optional selected_candidate_pair_id; + absl::optional local_certificate_id; + absl::optional remote_certificate_id; + absl::optional tls_version; + absl::optional dtls_cipher; + absl::optional dtls_role; + absl::optional srtp_cipher; + absl::optional selected_candidate_pair_changes; + absl::optional ice_role; + absl::optional ice_local_username_fragment; + absl::optional ice_state; }; // https://w3c.github.io/webrtc-stats/#playoutstats-dict* @@ -470,12 +471,12 @@ class RTC_EXPORT RTCAudioPlayoutStats final : public RTCStats { RTCAudioPlayoutStats(const std::string& id, Timestamp timestamp); ~RTCAudioPlayoutStats() override; - RTCStatsMember kind; - RTCStatsMember synthesized_samples_duration; - RTCStatsMember synthesized_samples_events; - RTCStatsMember total_samples_duration; - RTCStatsMember total_playout_delay; - RTCStatsMember total_samples_count; + absl::optional kind; + absl::optional synthesized_samples_duration; + absl::optional synthesized_samples_events; + absl::optional total_samples_duration; + absl::optional total_playout_delay; + absl::optional total_samples_count; }; } // namespace webrtc diff --git a/pc/BUILD.gn b/pc/BUILD.gn index 2edbf9d63a..1f814cb1aa 100644 --- a/pc/BUILD.gn +++ b/pc/BUILD.gn @@ -970,6 +970,7 @@ rtc_source_set("rtc_stats_traversal") { "../api:scoped_refptr", "../rtc_base:checks", ] + absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] } rtc_source_set("sdp_offer_answer") { diff --git a/pc/rtc_stats_collector_unittest.cc b/pc/rtc_stats_collector_unittest.cc index 61b3bca1db..03512bbcde 100644 --- a/pc/rtc_stats_collector_unittest.cc +++ b/pc/rtc_stats_collector_unittest.cc @@ -23,6 +23,7 @@ #include #include "absl/strings/str_replace.h" +#include "absl/types/optional.h" #include "api/candidate.h" #include "api/dtls_transport_interface.h" #include "api/media_stream_interface.h" @@ -3723,7 +3724,7 @@ class RTCTestStats : public RTCStats { RTCTestStats(const std::string& id, Timestamp timestamp) : RTCStats(id, timestamp) {} - RTCStatsMember dummy_stat; + absl::optional dummy_stat; }; WEBRTC_RTCSTATS_IMPL(RTCTestStats, diff --git a/pc/rtc_stats_integrationtest.cc b/pc/rtc_stats_integrationtest.cc index 002f9d34b5..de8e6e3f67 100644 --- a/pc/rtc_stats_integrationtest.cc +++ b/pc/rtc_stats_integrationtest.cc @@ -18,6 +18,7 @@ #include "absl/algorithm/container.h" #include "absl/strings/match.h" +#include "absl/types/optional.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/audio_codecs/builtin_audio_encoder_factory.h" #include "api/audio_options.h" @@ -212,14 +213,14 @@ class RTCStatsVerifier { } template - void MarkAttributeTested(const RTCStatsMember& field, + void MarkAttributeTested(const absl::optional& field, bool test_successful) { untested_attribute_names_.erase(stats_->GetAttribute(field).name()); all_tests_successful_ &= test_successful; } template - void TestAttributeIsDefined(const RTCStatsMember& field) { + void TestAttributeIsDefined(const absl::optional& field) { EXPECT_TRUE(field.has_value()) << stats_->type() << "." << stats_->GetAttribute(field).name() << "[" << stats_->id() << "] was undefined."; @@ -227,7 +228,7 @@ class RTCStatsVerifier { } template - void TestAttributeIsUndefined(const RTCStatsMember& field) { + void TestAttributeIsUndefined(const absl::optional& field) { Attribute attribute = stats_->GetAttribute(field); EXPECT_FALSE(field.has_value()) << stats_->type() << "." << attribute.name() << "[" << stats_->id() @@ -236,7 +237,7 @@ class RTCStatsVerifier { } template - void TestAttributeIsPositive(const RTCStatsMember& field) { + void TestAttributeIsPositive(const absl::optional& field) { Attribute attribute = stats_->GetAttribute(field); EXPECT_TRUE(field.has_value()) << stats_->type() << "." << attribute.name() << "[" << stats_->id() << "] was undefined."; @@ -252,7 +253,7 @@ class RTCStatsVerifier { } template - void TestAttributeIsNonNegative(const RTCStatsMember& field) { + void TestAttributeIsNonNegative(const absl::optional& field) { Attribute attribute = stats_->GetAttribute(field); EXPECT_TRUE(field.has_value()) << stats_->type() << "." << attribute.name() << "[" << stats_->id() << "] was undefined."; @@ -268,13 +269,13 @@ class RTCStatsVerifier { } template - void TestAttributeIsIDReference(const RTCStatsMember& field, + void TestAttributeIsIDReference(const absl::optional& field, const char* expected_type) { TestAttributeIsIDReference(field, expected_type, false); } template - void TestAttributeIsOptionalIDReference(const RTCStatsMember& field, + void TestAttributeIsOptionalIDReference(const absl::optional& field, const char* expected_type) { TestAttributeIsIDReference(field, expected_type, true); } @@ -291,7 +292,7 @@ class RTCStatsVerifier { private: template - void TestAttributeIsIDReference(const RTCStatsMember& field, + void TestAttributeIsIDReference(const absl::optional& field, const char* expected_type, bool optional) { if (optional && !field.has_value()) { diff --git a/pc/rtc_stats_traversal.cc b/pc/rtc_stats_traversal.cc index dfd0570b8f..e9d11b5ae5 100644 --- a/pc/rtc_stats_traversal.cc +++ b/pc/rtc_stats_traversal.cc @@ -15,6 +15,7 @@ #include #include +#include "absl/types/optional.h" #include "api/stats/rtcstats_objects.h" #include "rtc_base/checks.h" @@ -42,7 +43,7 @@ void TraverseAndTakeVisitedStats(RTCStatsReport* report, } } -void AddIdIfDefined(const RTCStatsMember& id, +void AddIdIfDefined(const absl::optional& id, std::vector* neighbor_ids) { if (id.has_value()) neighbor_ids->push_back(&(*id)); diff --git a/stats/BUILD.gn b/stats/BUILD.gn index 76edc441cb..1ca584d6a2 100644 --- a/stats/BUILD.gn +++ b/stats/BUILD.gn @@ -45,6 +45,7 @@ rtc_library("rtc_stats_test_utils") { "../rtc_base:checks", "../rtc_base/system:rtc_export", ] + absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] } if (rtc_include_tests && !build_with_chromium) { @@ -74,5 +75,7 @@ if (rtc_include_tests && !build_with_chromium) { "//testing/android/native_test:native_test_support", ] } + + absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] } } diff --git a/stats/rtc_stats_report_unittest.cc b/stats/rtc_stats_report_unittest.cc index b3ac0a2db4..f11ff52e53 100644 --- a/stats/rtc_stats_report_unittest.cc +++ b/stats/rtc_stats_report_unittest.cc @@ -10,6 +10,7 @@ #include "api/stats/rtc_stats_report.h" +#include "absl/types/optional.h" #include "api/stats/attribute.h" #include "api/stats/rtc_stats.h" #include "rtc_base/checks.h" @@ -24,7 +25,7 @@ class RTCTestStats1 : public RTCStats { RTCTestStats1(const std::string& id, Timestamp timestamp) : RTCStats(id, timestamp) {} - RTCStatsMember integer; + absl::optional integer; }; WEBRTC_RTCSTATS_IMPL(RTCTestStats1, @@ -39,7 +40,7 @@ class RTCTestStats2 : public RTCStats { RTCTestStats2(const std::string& id, Timestamp timestamp) : RTCStats(id, timestamp) {} - RTCStatsMember number; + absl::optional number; }; WEBRTC_RTCSTATS_IMPL(RTCTestStats2, @@ -54,7 +55,7 @@ class RTCTestStats3 : public RTCStats { RTCTestStats3(const std::string& id, Timestamp timestamp) : RTCStats(id, timestamp) {} - RTCStatsMember string; + absl::optional string; }; WEBRTC_RTCSTATS_IMPL(RTCTestStats3, diff --git a/stats/rtc_stats_unittest.cc b/stats/rtc_stats_unittest.cc index 1098f04b65..555360f07f 100644 --- a/stats/rtc_stats_unittest.cc +++ b/stats/rtc_stats_unittest.cc @@ -15,6 +15,7 @@ #include #include +#include "absl/types/optional.h" #include "rtc_base/checks.h" #include "rtc_base/strings/json.h" #include "stats/test/rtc_test_stats.h" @@ -46,7 +47,7 @@ class RTCChildStats : public RTCStats { RTCChildStats(const std::string& id, Timestamp timestamp) : RTCStats(id, timestamp) {} - RTCStatsMember child_int; + absl::optional child_int; }; WEBRTC_RTCSTATS_IMPL(RTCChildStats, @@ -61,7 +62,7 @@ class RTCGrandChildStats : public RTCChildStats { RTCGrandChildStats(const std::string& id, Timestamp timestamp) : RTCChildStats(id, timestamp) {} - RTCStatsMember grandchild_int; + absl::optional grandchild_int; }; WEBRTC_RTCSTATS_IMPL(RTCGrandChildStats, diff --git a/stats/test/rtc_test_stats.h b/stats/test/rtc_test_stats.h index 05c0904c02..ff1a06f97c 100644 --- a/stats/test/rtc_test_stats.h +++ b/stats/test/rtc_test_stats.h @@ -16,6 +16,7 @@ #include #include +#include "absl/types/optional.h" #include "api/stats/rtc_stats.h" #include "rtc_base/system/rtc_export.h" @@ -27,22 +28,22 @@ class RTC_EXPORT RTCTestStats : public RTCStats { RTCTestStats(const std::string& id, Timestamp timestamp); ~RTCTestStats() override; - RTCStatsMember m_bool; - RTCStatsMember m_int32; - RTCStatsMember m_uint32; - RTCStatsMember m_int64; - RTCStatsMember m_uint64; - RTCStatsMember m_double; - RTCStatsMember m_string; - RTCStatsMember> m_sequence_bool; - RTCStatsMember> m_sequence_int32; - RTCStatsMember> m_sequence_uint32; - RTCStatsMember> m_sequence_int64; - RTCStatsMember> m_sequence_uint64; - RTCStatsMember> m_sequence_double; - RTCStatsMember> m_sequence_string; - RTCStatsMember> m_map_string_uint64; - RTCStatsMember> m_map_string_double; + absl::optional m_bool; + absl::optional m_int32; + absl::optional m_uint32; + absl::optional m_int64; + absl::optional m_uint64; + absl::optional m_double; + absl::optional m_string; + absl::optional> m_sequence_bool; + absl::optional> m_sequence_int32; + absl::optional> m_sequence_uint32; + absl::optional> m_sequence_int64; + absl::optional> m_sequence_uint64; + absl::optional> m_sequence_double; + absl::optional> m_sequence_string; + absl::optional> m_map_string_uint64; + absl::optional> m_map_string_double; }; } // namespace webrtc