From 02ba211a9f29c8ab605e9924f2a5f098a9052dbc Mon Sep 17 00:00:00 2001 From: hbos Date: Fri, 28 Oct 2016 05:14:53 -0700 Subject: [PATCH] Move RTCStatsCollector helper functions to anonymous namespace. Simple refactoring. Moved ProduceCertificateStatsFromSSLCertificateStats_s and ProduceIceCandidateStats_s from member section of RTCStatsCollector to the anonymous namespace of rtcstatscollector.cc. The thread check is removed as a result, which makes sense because the helper function does not know about which thread its input parameter lives on, that is up to the calling place (which has a thread check already). This makes rtcstatscollector.h cleaner, and all ProduceBlahStats functions are starting points of collecting various stats. (Call all of them and you get a complete set of stats.) (Not moving PrepareTransportCertificateStats_s because it is using a private struct of RTCStatsCollector.) BUG=627816 Review-Url: https://codereview.webrtc.org/2462573002 Cr-Commit-Position: refs/heads/master@{#14818} --- webrtc/api/rtcstatscollector.cc | 108 ++++++++++++++++---------------- webrtc/api/rtcstatscollector.h | 6 -- 2 files changed, 53 insertions(+), 61 deletions(-) diff --git a/webrtc/api/rtcstatscollector.cc b/webrtc/api/rtcstatscollector.cc index 1c87dacbb1..dc2b1896cc 100644 --- a/webrtc/api/rtcstatscollector.cc +++ b/webrtc/api/rtcstatscollector.cc @@ -71,6 +71,50 @@ const char* DataStateToRTCDataChannelState( } } +void ProduceCertificateStatsFromSSLCertificateStats( + int64_t timestamp_us, const rtc::SSLCertificateStats& certificate_stats, + RTCStatsReport* report) { + RTCCertificateStats* prev_certificate_stats = nullptr; + for (const rtc::SSLCertificateStats* s = &certificate_stats; s; + s = s->issuer.get()) { + RTCCertificateStats* certificate_stats = new RTCCertificateStats( + RTCCertificateIDFromFingerprint(s->fingerprint), timestamp_us); + certificate_stats->fingerprint = s->fingerprint; + certificate_stats->fingerprint_algorithm = s->fingerprint_algorithm; + certificate_stats->base64_certificate = s->base64_certificate; + if (prev_certificate_stats) + prev_certificate_stats->issuer_certificate_id = certificate_stats->id(); + report->AddStats(std::unique_ptr(certificate_stats)); + prev_certificate_stats = certificate_stats; + } +} + +const std::string& ProduceIceCandidateStats( + int64_t timestamp_us, const cricket::Candidate& candidate, bool is_local, + RTCStatsReport* report) { + const std::string& id = "RTCIceCandidate_" + candidate.id(); + const RTCStats* stats = report->Get(id); + if (!stats) { + std::unique_ptr candidate_stats; + if (is_local) + candidate_stats.reset(new RTCLocalIceCandidateStats(id, timestamp_us)); + else + candidate_stats.reset(new RTCRemoteIceCandidateStats(id, timestamp_us)); + candidate_stats->ip = candidate.address().ipaddr().ToString(); + candidate_stats->port = static_cast(candidate.address().port()); + candidate_stats->protocol = candidate.protocol(); + candidate_stats->candidate_type = CandidateTypeToRTCIceCandidateType( + candidate.type()); + candidate_stats->priority = static_cast(candidate.priority()); + + stats = candidate_stats.get(); + report->AddStats(std::move(candidate_stats)); + } + RTC_DCHECK_EQ(stats->type(), is_local ? RTCLocalIceCandidateStats::kType + : RTCRemoteIceCandidateStats::kType); + return stats->id(); +} + } // namespace rtc::scoped_refptr RTCStatsCollector::Create( @@ -225,37 +269,18 @@ void RTCStatsCollector::ProduceCertificateStats_s( const std::map& transport_cert_stats, RTCStatsReport* report) const { RTC_DCHECK(signaling_thread_->IsCurrent()); - for (const auto& kvp : transport_cert_stats) { - if (kvp.second.local) { - ProduceCertificateStatsFromSSLCertificateStats_s( - timestamp_us, *kvp.second.local.get(), report); + for (const auto& transport_cert_stats_pair : transport_cert_stats) { + if (transport_cert_stats_pair.second.local) { + ProduceCertificateStatsFromSSLCertificateStats( + timestamp_us, *transport_cert_stats_pair.second.local.get(), report); } - if (kvp.second.remote) { - ProduceCertificateStatsFromSSLCertificateStats_s( - timestamp_us, *kvp.second.remote.get(), report); + if (transport_cert_stats_pair.second.remote) { + ProduceCertificateStatsFromSSLCertificateStats( + timestamp_us, *transport_cert_stats_pair.second.remote.get(), report); } } } -void RTCStatsCollector::ProduceCertificateStatsFromSSLCertificateStats_s( - int64_t timestamp_us, const rtc::SSLCertificateStats& certificate_stats, - RTCStatsReport* report) const { - RTC_DCHECK(signaling_thread_->IsCurrent()); - RTCCertificateStats* prev_certificate_stats = nullptr; - for (const rtc::SSLCertificateStats* s = &certificate_stats; s; - s = s->issuer.get()) { - RTCCertificateStats* certificate_stats = new RTCCertificateStats( - RTCCertificateIDFromFingerprint(s->fingerprint), timestamp_us); - certificate_stats->fingerprint = s->fingerprint; - certificate_stats->fingerprint_algorithm = s->fingerprint_algorithm; - certificate_stats->base64_certificate = s->base64_certificate; - if (prev_certificate_stats) - prev_certificate_stats->issuer_certificate_id = certificate_stats->id(); - report->AddStats(std::unique_ptr(certificate_stats)); - prev_certificate_stats = certificate_stats; - } -} - void RTCStatsCollector::ProduceDataChannelStats_s( int64_t timestamp_us, RTCStatsReport* report) const { RTC_DCHECK(signaling_thread_->IsCurrent()); @@ -295,9 +320,9 @@ void RTCStatsCollector::ProduceIceCandidateAndPairStats_s( // anything. We don't have a complete list. Local candidates come from // Port objects, and prflx candidates (both local and remote) are only // stored in candidate pairs. crbug.com/632723 - candidate_pair_stats->local_candidate_id = ProduceIceCandidateStats_s( + candidate_pair_stats->local_candidate_id = ProduceIceCandidateStats( timestamp_us, info.local_candidate, true, report); - candidate_pair_stats->remote_candidate_id = ProduceIceCandidateStats_s( + candidate_pair_stats->remote_candidate_id = ProduceIceCandidateStats( timestamp_us, info.remote_candidate, false, report); // TODO(hbos): This writable is different than the spec. It goes to @@ -326,33 +351,6 @@ void RTCStatsCollector::ProduceIceCandidateAndPairStats_s( } } -const std::string& RTCStatsCollector::ProduceIceCandidateStats_s( - int64_t timestamp_us, const cricket::Candidate& candidate, bool is_local, - RTCStatsReport* report) const { - RTC_DCHECK(signaling_thread_->IsCurrent()); - const std::string& id = "RTCIceCandidate_" + candidate.id(); - const RTCStats* stats = report->Get(id); - if (!stats) { - std::unique_ptr candidate_stats; - if (is_local) - candidate_stats.reset(new RTCLocalIceCandidateStats(id, timestamp_us)); - else - candidate_stats.reset(new RTCRemoteIceCandidateStats(id, timestamp_us)); - candidate_stats->ip = candidate.address().ipaddr().ToString(); - candidate_stats->port = static_cast(candidate.address().port()); - candidate_stats->protocol = candidate.protocol(); - candidate_stats->candidate_type = CandidateTypeToRTCIceCandidateType( - candidate.type()); - candidate_stats->priority = static_cast(candidate.priority()); - - stats = candidate_stats.get(); - report->AddStats(std::move(candidate_stats)); - } - RTC_DCHECK_EQ(stats->type(), is_local ? RTCLocalIceCandidateStats::kType - : RTCRemoteIceCandidateStats::kType); - return stats->id(); -} - void RTCStatsCollector::ProducePeerConnectionStats_s( int64_t timestamp_us, RTCStatsReport* report) const { RTC_DCHECK(signaling_thread_->IsCurrent()); diff --git a/webrtc/api/rtcstatscollector.h b/webrtc/api/rtcstatscollector.h index de374fc9a3..51d2705c2c 100644 --- a/webrtc/api/rtcstatscollector.h +++ b/webrtc/api/rtcstatscollector.h @@ -91,9 +91,6 @@ class RTCStatsCollector : public virtual rtc::RefCountInterface { int64_t timestamp_us, const std::map& transport_cert_stats, RTCStatsReport* report) const; - void ProduceCertificateStatsFromSSLCertificateStats_s( - int64_t timestamp_us, const rtc::SSLCertificateStats& certificate_stats, - RTCStatsReport* report) const; // Produces |RTCDataChannelStats|. void ProduceDataChannelStats_s( int64_t timestamp_us, RTCStatsReport* report) const; @@ -101,9 +98,6 @@ class RTCStatsCollector : public virtual rtc::RefCountInterface { void ProduceIceCandidateAndPairStats_s( int64_t timestamp_us, const SessionStats& session_stats, RTCStatsReport* report) const; - const std::string& ProduceIceCandidateStats_s( - int64_t timestamp_us, const cricket::Candidate& candidate, bool is_local, - RTCStatsReport* report) const; // Produces |RTCPeerConnectionStats|. void ProducePeerConnectionStats_s( int64_t timestamp_us, RTCStatsReport* report) const;