Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(308)

Unified Diff: webrtc/api/rtcstatscollector.cc

Issue 2384143002: RTCIceCandidateStats added. (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/api/rtcstatscollector.cc
diff --git a/webrtc/api/rtcstatscollector.cc b/webrtc/api/rtcstatscollector.cc
index 084eab177cc7e557df3c69579a9807463e481e2a..765a875c73ed203c47f0a134f27099b64243a788 100644
--- a/webrtc/api/rtcstatscollector.cc
+++ b/webrtc/api/rtcstatscollector.cc
@@ -18,9 +18,24 @@
#include "webrtc/api/webrtcsession.h"
#include "webrtc/base/checks.h"
#include "webrtc/base/sslidentity.h"
+#include "webrtc/p2p/base/candidate.h"
+#include "webrtc/p2p/base/port.h"
namespace webrtc {
+const char* CandidateTypeToRTCIceCandidateType(const std::string& type) {
+ if (type == cricket::LOCAL_PORT_TYPE)
+ return RTCIceCandidateType::kHost;
+ if (type == cricket::STUN_PORT_TYPE)
+ return RTCIceCandidateType::kSrflx;
+ if (type == cricket::PRFLX_PORT_TYPE)
+ return RTCIceCandidateType::kPrflx;
+ if (type == cricket::RELAY_PORT_TYPE)
+ return RTCIceCandidateType::kRelay;
+ RTC_NOTREACHED();
+ return nullptr;
+}
+
rtc::scoped_refptr<RTCStatsCollector> RTCStatsCollector::Create(
PeerConnection* pc, int64_t cache_lifetime_us) {
return rtc::scoped_refptr<RTCStatsCollector>(
@@ -93,6 +108,8 @@ void RTCStatsCollector::ProducePartialResultsOnSignalingThread(
SessionStats session_stats;
if (pc_->session()->GetTransportStats(&session_stats)) {
ProduceCertificateStats_s(timestamp_us, session_stats, report.get());
+ ProduceIceCandidateAndPairStats_s(timestamp_us, session_stats,
+ report.get());
}
ProducePeerConnectionStats_s(timestamp_us, report.get());
@@ -201,6 +218,53 @@ void RTCStatsCollector::ProduceCertificateStatsFromSSLCertificateAndChain_s(
}
}
+void RTCStatsCollector::ProduceIceCandidateAndPairStats_s(
+ int64_t timestamp_us, const SessionStats& session_stats,
+ RTCStatsReport* report) const {
+ RTC_DCHECK(signaling_thread_->IsCurrent());
+ for (const auto& transport : session_stats.transport_stats) {
+ for (const auto& channel : transport.second.channel_stats) {
+ for (const cricket::ConnectionInfo& info : channel.connection_infos) {
+ // TODO(hbos): RTCIceCandidatePairStats referencing the resulting pair.
hta-webrtc 2016/10/04 14:12:45 Complete sentence: "TODO(hbos): Produce RTCIceCand
hbos 2016/10/05 10:16:30 Done.
+ // crbug.com/633550
+ ProduceIceCandidateStats_s(
+ timestamp_us, info.local_candidate, true, report);
+ ProduceIceCandidateStats_s(
+ timestamp_us, info.remote_candidate, false, report);
+ }
+ }
+ }
+}
+
+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());
+ std::string id = "RTCIceCandidate_" + candidate.id();
hta-webrtc 2016/10/04 14:12:45 This uses the same namespace for local and remote
hbos 2016/10/05 10:16:30 Since the ID should be based on the object that pr
hta-webrtc 2016/10/05 11:17:14 DCHECK seems good. What I'm not sure about is wher
hbos 2016/10/06 08:07:27 +deadbeef
+ const RTCStats* s = report->Get(id);
hta-webrtc 2016/10/04 14:12:45 Bad variable name.
hbos 2016/10/05 10:16:30 Done.
+ if (!s) {
+ std::unique_ptr<RTCIceCandidateStats> candidate_stats;
+ if (is_local) {
+ candidate_stats.reset(
+ new RTCLocalIceCandidateStats(std::move(id), timestamp_us));
+ } else {
+ candidate_stats.reset(
+ new RTCRemoteIceCandidateStats(std::move(id), timestamp_us));
+ }
+ candidate_stats->ip = candidate.address().ipaddr().ToString();
+ candidate_stats->port = static_cast<int32_t>(candidate.address().port());
+ candidate_stats->protocol = candidate.protocol();
+ candidate_stats->candidate_type = CandidateTypeToRTCIceCandidateType(
+ candidate.type());
+ candidate_stats->priority = static_cast<int32_t>(candidate.priority());
+ // TODO(hbos): Define candidate_stats->url. crbug.com/632723
+
+ s = candidate_stats.get();
+ report->AddStats(std::move(candidate_stats));
+ }
hta-webrtc 2016/10/04 14:12:45 What's the "else"? Is it an error to have duplicat
hbos 2016/10/05 10:16:30 It means we encountered the same candidate twice,
hta-webrtc 2016/10/05 11:17:14 Adding a reviewer who knows the cricket::Candidate
hbos 2016/10/06 08:07:27 +deadbeef
Taylor Brandstetter 2016/10/06 19:09:07 The same candidate can't be both a local and remot
hbos 2016/10/07 08:37:52 Acknowledged. Changing stats ID back to "RTCIceCan
+ return s->id();
+}
+
void RTCStatsCollector::ProducePeerConnectionStats_s(
int64_t timestamp_us, RTCStatsReport* report) const {
RTC_DCHECK(signaling_thread_->IsCurrent());

Powered by Google App Engine
This is Rietveld 408576698