From a26196bc65bbc627ad4520070ebbb896b95708c8 Mon Sep 17 00:00:00 2001 From: ehmaldonado Date: Tue, 18 Jul 2017 03:30:29 -0700 Subject: [PATCH] Trace stats in RTCStatsCollector. BUG=chromium:653087 Review-Url: https://codereview.webrtc.org/2975793002 Cr-Commit-Position: refs/heads/master@{#19069} --- webrtc/pc/rtcstatscollector.cc | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/webrtc/pc/rtcstatscollector.cc b/webrtc/pc/rtcstatscollector.cc index 01764e909a..8fe03cc4b4 100644 --- a/webrtc/pc/rtcstatscollector.cc +++ b/webrtc/pc/rtcstatscollector.cc @@ -24,12 +24,26 @@ #include "webrtc/pc/peerconnection.h" #include "webrtc/pc/webrtcsession.h" #include "webrtc/rtc_base/checks.h" +#include "webrtc/rtc_base/stringutils.h" #include "webrtc/rtc_base/timeutils.h" +#include "webrtc/rtc_base/trace_event.h" namespace webrtc { namespace { +const int kStatTypeMemberNameAndIdMaxLen = 120; + +std::string GetStatTypeMemberNameAndId(const RTCStats& stats, + const RTCStatsMemberInterface* member) { + RTC_DCHECK(strlen(stats.type()) + strlen(member->name()) + + stats.id().size() + 3 < kStatTypeMemberNameAndIdMaxLen); + char buffer[kStatTypeMemberNameAndIdMaxLen]; + rtc::sprintfn(&buffer[0], sizeof(buffer), "%s.%s.%s", stats.type(), + member->name(), stats.id().c_str()); + return buffer; +} + std::string RTCCertificateIDFromFingerprint(const std::string& fingerprint) { return "RTCCertificate_" + fingerprint; } @@ -758,6 +772,19 @@ void RTCStatsCollector::AddPartialResults_s( channel_name_pairs_.reset(); track_media_info_map_.reset(); track_to_id_.clear(); + // Trace WebRTC Stats when getStats is called on Javascript. + // This allows access to WebRTC stats from trace logs. To enable them, + // select the "webrtc_stats" category when recording traces. + for (const RTCStats& stats : *cached_report_) { + for (const RTCStatsMemberInterface* member : stats.Members()) { + if (member->is_defined()) { + TRACE_EVENT_INSTANT2("webrtc_stats", "webrtc_stats", + "value", member->ValueToString(), + "type.name.id", GetStatTypeMemberNameAndId( + stats, member)); + } + } + } DeliverCachedReport(); } }