statstypes.cc revision 04ac81f2fd8ef6680522438fac1894db5415a0ec
15c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org/* 25c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * libjingle 35f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * Copyright 2014 Google Inc. 45c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * 55c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * Redistribution and use in source and binary forms, with or without 65c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * modification, are permitted provided that the following conditions are met: 75c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * 85c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 95c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * this list of conditions and the following disclaimer. 105c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 115c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * this list of conditions and the following disclaimer in the documentation 125c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * and/or other materials provided with the distribution. 135c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * 3. The name of the author may not be used to endorse or promote products 145c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * derived from this software without specific prior written permission. 155c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * 165c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 175c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 185c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 195c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 205c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 215c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 225c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 235c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 245c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 255c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 265c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org */ 275c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org 285c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org#include "talk/app/webrtc/statstypes.h" 295c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org 30d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org#include <string.h> 31d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 32d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org#include "webrtc/base/checks.h" 33d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 34d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org// TODO(tommi): Could we have a static map of value name -> expected type 3591d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg// and use this to RTC_DCHECK on correct usage (somewhat strongly typed values)? 36d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org// Alternatively, we could define the names+type in a separate document and 37d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org// generate strongly typed inline C++ code that forces the correct type to be 38d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org// used for a given name at compile time. 39d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 404b89aa03bb9c817cf2274f2035d613a70c5298ebtommi@webrtc.orgusing rtc::RefCountedObject; 418e327c45d0940fd5bc46c3fe8d24363be07706actommi@webrtc.org 425c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.orgnamespace webrtc { 434fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgnamespace { 444fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 454fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org// The id of StatsReport of type kStatsReportTypeBwe. 464fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgconst char kStatsReportVideoBweId[] = "bweforvideo"; 474fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 484fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org// NOTE: These names need to be consistent with an external 494fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org// specification (W3C Stats Identifiers). 504fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgconst char* InternalTypeToString(StatsReport::StatsType type) { 514fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org switch (type) { 524fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org case StatsReport::kStatsReportTypeSession: 534fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return "googLibjingleSession"; 544fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org case StatsReport::kStatsReportTypeBwe: 554fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return "VideoBwe"; 564fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org case StatsReport::kStatsReportTypeRemoteSsrc: 574fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return "remoteSsrc"; 584fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org case StatsReport::kStatsReportTypeSsrc: 594fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return "ssrc"; 604fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org case StatsReport::kStatsReportTypeTrack: 614fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return "googTrack"; 624fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org case StatsReport::kStatsReportTypeIceLocalCandidate: 634fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return "localcandidate"; 644fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org case StatsReport::kStatsReportTypeIceRemoteCandidate: 654fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return "remotecandidate"; 664fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org case StatsReport::kStatsReportTypeTransport: 677bea1ffe772e837d96f8faa5c9dd06e531b95379pthatcher@webrtc.org return "transport"; 684fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org case StatsReport::kStatsReportTypeComponent: 694fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return "googComponent"; 704fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org case StatsReport::kStatsReportTypeCandidatePair: 714fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return "googCandidatePair"; 724fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org case StatsReport::kStatsReportTypeCertificate: 734fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return "googCertificate"; 744fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org case StatsReport::kStatsReportTypeDataChannel: 754fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return "datachannel"; 764fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org } 7791d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(false); 784fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return nullptr; 79c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 80c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 81d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgclass BandwidthEstimationId : public StatsReport::IdBase { 824fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org public: 83d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org BandwidthEstimationId() 84d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org : StatsReport::IdBase(StatsReport::kStatsReportTypeBwe) {} 854fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org std::string ToString() const override { return kStatsReportVideoBweId; } 864fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org}; 874fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 88d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgclass TypedId : public StatsReport::IdBase { 894fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org public: 904fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org TypedId(StatsReport::StatsType type, const std::string& id) 91d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org : StatsReport::IdBase(type), id_(id) {} 924fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 93d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org bool Equals(const IdBase& other) const override { 94d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return IdBase::Equals(other) && 954fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org static_cast<const TypedId&>(other).id_ == id_; 964fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org } 978e327c45d0940fd5bc46c3fe8d24363be07706actommi@webrtc.org 984fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org std::string ToString() const override { 994fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return std::string(InternalTypeToString(type_)) + kSeparator + id_; 1004fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org } 1018e327c45d0940fd5bc46c3fe8d24363be07706actommi@webrtc.org 1024fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org protected: 1034fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org const std::string id_; 1044fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org}; 105c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 106d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgclass TypedIntId : public StatsReport::IdBase { 107322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org public: 108322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org TypedIntId(StatsReport::StatsType type, int id) 109d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org : StatsReport::IdBase(type), id_(id) {} 110322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org 111d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org bool Equals(const IdBase& other) const override { 112d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return IdBase::Equals(other) && 113322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org static_cast<const TypedIntId&>(other).id_ == id_; 114322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org } 115322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org 116322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org std::string ToString() const override { 117322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org return std::string(InternalTypeToString(type_)) + 118322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org kSeparator + 119322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org rtc::ToString<int>(id_); 120322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org } 121322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org 122322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org protected: 123322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org const int id_; 124322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org}; 125322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org 1264fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgclass IdWithDirection : public TypedId { 1274fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org public: 1284fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org IdWithDirection(StatsReport::StatsType type, const std::string& id, 1294fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org StatsReport::Direction direction) 1304fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org : TypedId(type, id), direction_(direction) {} 131c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 132d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org bool Equals(const IdBase& other) const override { 1334fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return TypedId::Equals(other) && 1344fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org static_cast<const IdWithDirection&>(other).direction_ == direction_; 1354fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org } 136c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 1374fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org std::string ToString() const override { 1384fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org std::string ret(TypedId::ToString()); 139322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org ret += kSeparator; 1404fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org ret += direction_ == StatsReport::kSend ? "send" : "recv"; 1414fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return ret; 1424fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org } 143c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 1444fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org private: 1454fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org const StatsReport::Direction direction_; 1464fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org}; 1474fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 1484fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgclass CandidateId : public TypedId { 1494fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org public: 1504fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org CandidateId(bool local, const std::string& id) 1514fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org : TypedId(local ? 1524fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org StatsReport::kStatsReportTypeIceLocalCandidate : 1534fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org StatsReport::kStatsReportTypeIceRemoteCandidate, 1544fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org id) { 1554fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org } 156c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 1574fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org std::string ToString() const override { 1584fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return "Cand-" + id_; 1594fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org } 1604fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org}; 1614fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 162d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgclass ComponentId : public StatsReport::IdBase { 1634fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org public: 1644fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org ComponentId(const std::string& content_name, int component) 1654fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org : ComponentId(StatsReport::kStatsReportTypeComponent, content_name, 1664fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org component) {} 1674fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 168d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org bool Equals(const IdBase& other) const override { 169d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return IdBase::Equals(other) && 1704fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org static_cast<const ComponentId&>(other).component_ == component_ && 1714fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org static_cast<const ComponentId&>(other).content_name_ == content_name_; 1724fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org } 1734fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 1744fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org std::string ToString() const override { 1754fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return ToString("Channel-"); 1764fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org } 1774fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 1784fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org protected: 1794fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org ComponentId(StatsReport::StatsType type, const std::string& content_name, 1804fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org int component) 181d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org : IdBase(type), 1824fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org content_name_(content_name), 1834fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org component_(component) {} 1844fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 1854fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org std::string ToString(const char* prefix) const { 1864fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org std::string ret(prefix); 1874fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org ret += content_name_; 1884fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org ret += '-'; 1894fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org ret += rtc::ToString<>(component_); 1904fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return ret; 1914fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org } 1924fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 1934fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org private: 1944fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org const std::string content_name_; 1954fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org const int component_; 1964fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org}; 1974fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 1984fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgclass CandidatePairId : public ComponentId { 1994fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org public: 2004fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org CandidatePairId(const std::string& content_name, int component, int index) 2014fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org : ComponentId(StatsReport::kStatsReportTypeCandidatePair, content_name, 2024fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org component), 2034fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org index_(index) {} 2044fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 205d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org bool Equals(const IdBase& other) const override { 2064fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return ComponentId::Equals(other) && 2074fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org static_cast<const CandidatePairId&>(other).index_ == index_; 2084fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org } 2094fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 2104fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org std::string ToString() const override { 2114fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org std::string ret(ComponentId::ToString("Conn-")); 2124fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org ret += '-'; 2134fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org ret += rtc::ToString<>(index_); 2144fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return ret; 2154fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org } 2164fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 2174fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org private: 2184fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org const int index_; 2194fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org}; 2204fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 2214fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} // namespace 2224fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 223d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::IdBase::IdBase(StatsType type) : type_(type) {} 224d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::IdBase::~IdBase() {} 2254fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 226d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::StatsType StatsReport::IdBase::type() const { return type_; } 227c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 228d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgbool StatsReport::IdBase::Equals(const IdBase& other) const { 2294fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return other.type_ == type_; 230c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 231c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 232d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::Value::Value(StatsValueName name, int64 value, Type int_type) 233d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org : name(name), type_(int_type) { 23491d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(type_ == kInt || type_ == kInt64); 235d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org type_ == kInt ? value_.int_ = static_cast<int>(value) : value_.int64_ = value; 236d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 237d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 238d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::Value::Value(StatsValueName name, float f) 239d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org : name(name), type_(kFloat) { 240d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org value_.float_ = f; 241d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 242d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 243c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.orgStatsReport::Value::Value(StatsValueName name, const std::string& value) 244d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org : name(name), type_(kString) { 245d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org value_.string_ = new std::string(value); 246d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 247d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 248d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::Value::Value(StatsValueName name, const char* value) 249d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org : name(name), type_(kStaticString) { 250d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org value_.static_string_ = value; 251d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 252d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 253d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::Value::Value(StatsValueName name, bool b) 254d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org : name(name), type_(kBool) { 255d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org value_.bool_ = b; 256d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 257d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 258d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::Value::Value(StatsValueName name, const Id& value) 259d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org : name(name), type_(kId) { 260d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org value_.id_ = new Id(value); 261d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 262d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 263d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::Value::~Value() { 264d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org switch (type_) { 265d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kInt: 266d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kInt64: 267d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kFloat: 268d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kBool: 269d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kStaticString: 270d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org break; 271d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kString: 272d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org delete value_.string_; 273d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org break; 274d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kId: 275d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org delete value_.id_; 276d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org break; 277d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org } 278d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 279d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 280d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgbool StatsReport::Value::Equals(const Value& other) const { 281d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (name != other.name) 282d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return false; 283d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 284d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org // There's a 1:1 relation between a name and a type, so we don't have to 285d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org // check that. 28691d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK_EQ(type_, other.type_); 287d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 288d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org switch (type_) { 289d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kInt: 290d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value_.int_ == other.value_.int_; 291d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kInt64: 292d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value_.int64_ == other.value_.int64_; 293d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kFloat: 294d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value_.float_ == other.value_.float_; 295d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kStaticString: { 296d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org#if (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)) 297d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (value_.static_string_ != other.value_.static_string_) { 29891d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(strcmp(value_.static_string_, other.value_.static_string_) != 29991d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg 0) 300d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org << "Duplicate global?"; 301d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org } 302d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org#endif 303d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value_.static_string_ == other.value_.static_string_; 304d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org } 305d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kString: 306d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return *value_.string_ == *other.value_.string_; 307d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kBool: 308d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value_.bool_ == other.value_.bool_; 309d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kId: 310d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return (*value_.id_)->Equals(*other.value_.id_); 311d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org } 312d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org RTC_NOTREACHED(); 313d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return false; 314d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 315d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 316d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgbool StatsReport::Value::operator==(const std::string& value) const { 317d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return (type_ == kString && value_.string_->compare(value) == 0) || 318d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org (type_ == kStaticString && value.compare(value_.static_string_) == 0); 319d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 320d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 321d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgbool StatsReport::Value::operator==(const char* value) const { 322d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (type_ == kString) 323d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value_.string_->compare(value) == 0; 324d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (type_ != kStaticString) 325d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return false; 326d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org#if (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)) 327d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (value_.static_string_ != value) 32891d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(strcmp(value_.static_string_, value) != 0) 32991d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg << "Duplicate global?"; 330d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org#endif 331d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value == value_.static_string_; 332d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 333d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 334d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgbool StatsReport::Value::operator==(int64 value) const { 335d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return type_ == kInt ? value_.int_ == static_cast<int>(value) : 336d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org (type_ == kInt64 ? value_.int64_ == value : false); 337d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 338d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 339d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgbool StatsReport::Value::operator==(bool value) const { 340d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return type_ == kBool && value_.bool_ == value; 341d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 342d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 343d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgbool StatsReport::Value::operator==(float value) const { 344d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return type_ == kFloat && value_.float_ == value; 345d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 346d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 347d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgbool StatsReport::Value::operator==(const Id& value) const { 348d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return type_ == kId && (*value_.id_)->Equals(value); 349d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 350d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 351d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgint StatsReport::Value::int_val() const { 35291d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(type_ == kInt); 353d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value_.int_; 354d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 355d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 356d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgint64 StatsReport::Value::int64_val() const { 35791d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(type_ == kInt64); 358d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value_.int64_; 359d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 360d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 361d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgfloat StatsReport::Value::float_val() const { 36291d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(type_ == kFloat); 363d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value_.float_; 364d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 365d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 366d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgconst char* StatsReport::Value::static_string_val() const { 36791d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(type_ == kStaticString); 368d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value_.static_string_; 369d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 370d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 371d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgconst std::string& StatsReport::Value::string_val() const { 37291d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(type_ == kString); 373d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return *value_.string_; 374d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 375d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 376d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgbool StatsReport::Value::bool_val() const { 37791d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(type_ == kBool); 378d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value_.bool_; 379c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 380c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 381c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.orgconst char* StatsReport::Value::display_name() const { 382c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org switch (name) { 383c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameAudioOutputLevel: 384c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "audioOutputLevel"; 385c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameAudioInputLevel: 386c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "audioInputLevel"; 387c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameBytesSent: 388c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "bytesSent"; 389c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNamePacketsSent: 390c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "packetsSent"; 391c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameBytesReceived: 392c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "bytesReceived"; 393487a4442152e2c70146aa2d2c6ccb370233c056cdecurtis@webrtc.org case kStatsValueNameLabel: 394487a4442152e2c70146aa2d2c6ccb370233c056cdecurtis@webrtc.org return "label"; 395c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNamePacketsReceived: 396c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "packetsReceived"; 397c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNamePacketsLost: 398c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "packetsLost"; 399487a4442152e2c70146aa2d2c6ccb370233c056cdecurtis@webrtc.org case kStatsValueNameProtocol: 400487a4442152e2c70146aa2d2c6ccb370233c056cdecurtis@webrtc.org return "protocol"; 401c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameTransportId: 402c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "transportId"; 4037bea1ffe772e837d96f8faa5c9dd06e531b95379pthatcher@webrtc.org case kStatsValueNameSelectedCandidatePairId: 4047bea1ffe772e837d96f8faa5c9dd06e531b95379pthatcher@webrtc.org return "selectedCandidatePairId"; 405c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameSsrc: 406c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "ssrc"; 407487a4442152e2c70146aa2d2c6ccb370233c056cdecurtis@webrtc.org case kStatsValueNameState: 408487a4442152e2c70146aa2d2c6ccb370233c056cdecurtis@webrtc.org return "state"; 409487a4442152e2c70146aa2d2c6ccb370233c056cdecurtis@webrtc.org case kStatsValueNameDataChannelId: 410487a4442152e2c70146aa2d2c6ccb370233c056cdecurtis@webrtc.org return "datachannelid"; 411c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org 412c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org // 'goog' prefixed constants. 4138e6fd46cc324f8946e68396edcb252ffaf2d4579Henrik Lundin case kStatsValueNameAccelerateRate: 4148e6fd46cc324f8946e68396edcb252ffaf2d4579Henrik Lundin return "googAccelerateRate"; 415c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameActiveConnection: 416c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googActiveConnection"; 417c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameActualEncBitrate: 418c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googActualEncBitrate"; 419c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameAvailableReceiveBandwidth: 420c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googAvailableReceiveBandwidth"; 421c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameAvailableSendBandwidth: 422c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googAvailableSendBandwidth"; 423c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameAvgEncodeMs: 424c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googAvgEncodeMs"; 425c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameBucketDelay: 426c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googBucketDelay"; 427c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameBandwidthLimitedResolution: 428c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googBandwidthLimitedResolution"; 429950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org 430950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org // Candidate related attributes. Values are taken from 431950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org // http://w3c.github.io/webrtc-stats/#rtcstatstype-enum*. 432950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org case kStatsValueNameCandidateIPAddress: 433950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org return "ipAddress"; 434950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org case kStatsValueNameCandidateNetworkType: 435950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org return "networkType"; 436950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org case kStatsValueNameCandidatePortNumber: 437950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org return "portNumber"; 438950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org case kStatsValueNameCandidatePriority: 439950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org return "priority"; 440950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org case kStatsValueNameCandidateTransportType: 441950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org return "transport"; 442950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org case kStatsValueNameCandidateType: 443950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org return "candidateType"; 444950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org 445c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameChannelId: 446c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googChannelId"; 447c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameCodecName: 448c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googCodecName"; 449c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameComponent: 450c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googComponent"; 451c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameContentName: 452c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googContentName"; 453c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameCpuLimitedResolution: 454c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googCpuLimitedResolution"; 455c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameDecodingCTSG: 456c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googDecodingCTSG"; 457c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameDecodingCTN: 458c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googDecodingCTN"; 459c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameDecodingNormal: 460c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googDecodingNormal"; 461c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameDecodingPLC: 462c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googDecodingPLC"; 463c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameDecodingCNG: 464c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googDecodingCNG"; 465c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameDecodingPLCCNG: 466c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googDecodingPLCCNG"; 467c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameDer: 468c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googDerBase64"; 4697bea1ffe772e837d96f8faa5c9dd06e531b95379pthatcher@webrtc.org case kStatsValueNameDtlsCipher: 4707bea1ffe772e837d96f8faa5c9dd06e531b95379pthatcher@webrtc.org return "dtlsCipher"; 471c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameEchoCancellationQualityMin: 472c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googEchoCancellationQualityMin"; 473c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameEchoDelayMedian: 474c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googEchoCancellationEchoDelayMedian"; 475c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameEchoDelayStdDev: 476c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googEchoCancellationEchoDelayStdDev"; 477c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameEchoReturnLoss: 478c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googEchoCancellationReturnLoss"; 479c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameEchoReturnLossEnhancement: 480c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googEchoCancellationReturnLossEnhancement"; 481c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameEncodeUsagePercent: 482c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googEncodeUsagePercent"; 483c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameExpandRate: 484c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googExpandRate"; 485c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameFingerprint: 486c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googFingerprint"; 487c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameFingerprintAlgorithm: 488c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googFingerprintAlgorithm"; 489c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameFirsReceived: 490c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googFirsReceived"; 491c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameFirsSent: 492c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googFirsSent"; 493c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameFrameHeightInput: 494c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googFrameHeightInput"; 495c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameFrameHeightReceived: 496c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googFrameHeightReceived"; 497c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameFrameHeightSent: 498c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googFrameHeightSent"; 499c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameFrameRateReceived: 500c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googFrameRateReceived"; 501c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameFrameRateDecoded: 502c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googFrameRateDecoded"; 503c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameFrameRateOutput: 504c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googFrameRateOutput"; 505c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameDecodeMs: 506c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googDecodeMs"; 507c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameMaxDecodeMs: 508c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googMaxDecodeMs"; 509c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameCurrentDelayMs: 510c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googCurrentDelayMs"; 511c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameTargetDelayMs: 512c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googTargetDelayMs"; 513c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameJitterBufferMs: 514c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googJitterBufferMs"; 515c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameMinPlayoutDelayMs: 516c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googMinPlayoutDelayMs"; 517c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameRenderDelayMs: 518c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googRenderDelayMs"; 519c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameCaptureStartNtpTimeMs: 520c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googCaptureStartNtpTimeMs"; 521c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameFrameRateInput: 522c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googFrameRateInput"; 523c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameFrameRateSent: 524c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googFrameRateSent"; 525c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameFrameWidthInput: 526c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googFrameWidthInput"; 527c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameFrameWidthReceived: 528c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googFrameWidthReceived"; 529c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameFrameWidthSent: 530c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googFrameWidthSent"; 531c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameInitiator: 532c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googInitiator"; 533c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameIssuerId: 534c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googIssuerId"; 535c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameJitterReceived: 536c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googJitterReceived"; 537c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameLocalAddress: 538c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googLocalAddress"; 539950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org case kStatsValueNameLocalCandidateId: 540950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org return "localCandidateId"; 541c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameLocalCandidateType: 542c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googLocalCandidateType"; 543c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameLocalCertificateId: 5447bea1ffe772e837d96f8faa5c9dd06e531b95379pthatcher@webrtc.org return "localCertificateId"; 545c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameAdaptationChanges: 546c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googAdaptationChanges"; 547c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameNacksReceived: 548c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googNacksReceived"; 549c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameNacksSent: 550c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googNacksSent"; 5518e6fd46cc324f8946e68396edcb252ffaf2d4579Henrik Lundin case kStatsValueNamePreemptiveExpandRate: 5528e6fd46cc324f8946e68396edcb252ffaf2d4579Henrik Lundin return "googPreemptiveExpandRate"; 553c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNamePlisReceived: 554c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googPlisReceived"; 555c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNamePlisSent: 556c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googPlisSent"; 557c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNamePreferredJitterBufferMs: 558c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googPreferredJitterBufferMs"; 55904ac81f2fd8ef6680522438fac1894db5415a0ecPeter Thatcher case kStatsValueNameReceiving: 560c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googReadable"; 561c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameRemoteAddress: 562c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googRemoteAddress"; 563950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org case kStatsValueNameRemoteCandidateId: 564950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org return "remoteCandidateId"; 565c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameRemoteCandidateType: 566c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googRemoteCandidateType"; 567c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameRemoteCertificateId: 5687bea1ffe772e837d96f8faa5c9dd06e531b95379pthatcher@webrtc.org return "remoteCertificateId"; 569c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameRetransmitBitrate: 570c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googRetransmitBitrate"; 571c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameRtt: 572c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googRtt"; 573652bc37a07f5ab2559fd217c22be391b45af5b53minyue@webrtc.org case kStatsValueNameSecondaryDecodedRate: 574652bc37a07f5ab2559fd217c22be391b45af5b53minyue@webrtc.org return "googSecondaryDecodedRate"; 575c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameSendPacketsDiscarded: 576c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "packetsDiscardedOnSend"; 577652bc37a07f5ab2559fd217c22be391b45af5b53minyue@webrtc.org case kStatsValueNameSpeechExpandRate: 578652bc37a07f5ab2559fd217c22be391b45af5b53minyue@webrtc.org return "googSpeechExpandRate"; 5797bea1ffe772e837d96f8faa5c9dd06e531b95379pthatcher@webrtc.org case kStatsValueNameSrtpCipher: 5807bea1ffe772e837d96f8faa5c9dd06e531b95379pthatcher@webrtc.org return "srtpCipher"; 581c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameTargetEncBitrate: 582c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googTargetEncBitrate"; 583c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameTransmitBitrate: 584c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googTransmitBitrate"; 585c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameTransportType: 586c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googTransportType"; 587c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameTrackId: 588c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googTrackId"; 589c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameTypingNoiseState: 590c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googTypingNoiseState"; 591c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameViewLimitedResolution: 592c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googViewLimitedResolution"; 593c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameWritable: 594c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googWritable"; 595c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org default: 59691d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(false); 597c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org break; 598c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org } 599c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org 600c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return nullptr; 601c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 602c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 603d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgstd::string StatsReport::Value::ToString() const { 604d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org switch (type_) { 605d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kInt: 606d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return rtc::ToString(value_.int_); 607d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kInt64: 608d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return rtc::ToString(value_.int64_); 609d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kFloat: 610d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return rtc::ToString(value_.float_); 611d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kStaticString: 612d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return std::string(value_.static_string_); 613d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kString: 614d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return *value_.string_; 615d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kBool: 616d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value_.bool_ ? "true" : "false"; 617d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kId: 618d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return (*value_.id_)->ToString(); 619d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org } 620d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org RTC_NOTREACHED(); 621d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return std::string(); 622afa6d16a05301c462ff65aa4f1537a1aa12a0a7atommi@webrtc.org} 623afa6d16a05301c462ff65aa4f1537a1aa12a0a7atommi@webrtc.org 624d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::StatsReport(const Id& id) : id_(id), timestamp_(0.0) { 62591d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(id_.get()); 6264fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 6274fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 6284fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org// static 629d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::Id StatsReport::NewBandwidthEstimationId() { 630d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return Id(new RefCountedObject<BandwidthEstimationId>()); 6314fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 6324fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 6334fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org// static 634d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::Id StatsReport::NewTypedId(StatsType type, const std::string& id) { 635d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return Id(new RefCountedObject<TypedId>(type, id)); 6364fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 6374fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 6384fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org// static 639d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::Id StatsReport::NewTypedIntId(StatsType type, int id) { 640d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return Id(new RefCountedObject<TypedIntId>(type, id)); 641322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org} 642322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org 643322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org// static 644d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::Id StatsReport::NewIdWithDirection( 6454fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org StatsType type, const std::string& id, StatsReport::Direction direction) { 646d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return Id(new RefCountedObject<IdWithDirection>(type, id, direction)); 6474fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 6484fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 6494fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org// static 650d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::Id StatsReport::NewCandidateId(bool local, const std::string& id) { 651d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return Id(new RefCountedObject<CandidateId>(local, id)); 6524fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 6534fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 6544fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org// static 655d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::Id StatsReport::NewComponentId( 6564fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org const std::string& content_name, int component) { 657d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return Id(new RefCountedObject<ComponentId>(content_name, component)); 6584fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 6594fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 6604fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org// static 661d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::Id StatsReport::NewCandidatePairId( 6624fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org const std::string& content_name, int component, int index) { 663d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return Id(new RefCountedObject<CandidatePairId>( 664d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org content_name, component, index)); 6654fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 6664fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 6674fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgconst char* StatsReport::TypeToString() const { 6684fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return InternalTypeToString(id_->type()); 6694fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 6704fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 67192f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.orgvoid StatsReport::AddString(StatsReport::StatsValueName name, 67292f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.org const std::string& value) { 673d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const Value* found = FindValue(name); 674d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (!found || !(*found == value)) 675d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org values_[name] = ValuePtr(new Value(name, value)); 676d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 677d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 678d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgvoid StatsReport::AddString(StatsReport::StatsValueName name, 679d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const char* value) { 680d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const Value* found = FindValue(name); 681d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (!found || !(*found == value)) 682d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org values_[name] = ValuePtr(new Value(name, value)); 683c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 684c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 68592f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.orgvoid StatsReport::AddInt64(StatsReport::StatsValueName name, int64 value) { 686d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const Value* found = FindValue(name); 687d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (!found || !(*found == value)) 688d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org values_[name] = ValuePtr(new Value(name, value, Value::kInt64)); 689c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 690c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 69192f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.orgvoid StatsReport::AddInt(StatsReport::StatsValueName name, int value) { 692d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const Value* found = FindValue(name); 693d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (!found || !(*found == static_cast<int64>(value))) 694d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org values_[name] = ValuePtr(new Value(name, value, Value::kInt)); 695c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 696c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 69792f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.orgvoid StatsReport::AddFloat(StatsReport::StatsValueName name, float value) { 698d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const Value* found = FindValue(name); 699d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (!found || !(*found == value)) 700d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org values_[name] = ValuePtr(new Value(name, value)); 70192f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.org} 702c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 703c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.orgvoid StatsReport::AddBoolean(StatsReport::StatsValueName name, bool value) { 704d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const Value* found = FindValue(name); 705d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (!found || !(*found == value)) 706d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org values_[name] = ValuePtr(new Value(name, value)); 7078e327c45d0940fd5bc46c3fe8d24363be07706actommi@webrtc.org} 7088e327c45d0940fd5bc46c3fe8d24363be07706actommi@webrtc.org 709d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgvoid StatsReport::AddId(StatsReport::StatsValueName name, 710d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const Id& value) { 711d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const Value* found = FindValue(name); 712d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (!found || !(*found == value)) 713d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org values_[name] = ValuePtr(new Value(name, value)); 714c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 715c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 7164fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgconst StatsReport::Value* StatsReport::FindValue(StatsValueName name) const { 71792f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.org Values::const_iterator it = values_.find(name); 71892f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.org return it == values_.end() ? nullptr : it->second.get(); 7194fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 7204fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 7214fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgStatsCollection::StatsCollection() { 722c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 723c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 7244fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgStatsCollection::~StatsCollection() { 72591d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(thread_checker_.CalledOnValidThread()); 7264fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org for (auto* r : list_) 7274fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org delete r; 728c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 729c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 7304fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgStatsCollection::const_iterator StatsCollection::begin() const { 73191d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(thread_checker_.CalledOnValidThread()); 732c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org return list_.begin(); 733c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 734c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 7354fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgStatsCollection::const_iterator StatsCollection::end() const { 73691d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(thread_checker_.CalledOnValidThread()); 737c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org return list_.end(); 738c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 739c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 7404fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgsize_t StatsCollection::size() const { 74191d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(thread_checker_.CalledOnValidThread()); 7424fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return list_.size(); 7434fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 7444fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 745d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport* StatsCollection::InsertNew(const StatsReport::Id& id) { 74691d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(thread_checker_.CalledOnValidThread()); 74791d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(Find(id) == nullptr); 748d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org StatsReport* report = new StatsReport(id); 7494fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org list_.push_back(report); 7504fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return report; 751c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 752c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 753d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport* StatsCollection::FindOrAddNew(const StatsReport::Id& id) { 75491d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(thread_checker_.CalledOnValidThread()); 755d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org StatsReport* ret = Find(id); 756d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return ret ? ret : InsertNew(id); 757c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 758c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 759d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport* StatsCollection::ReplaceOrAddNew(const StatsReport::Id& id) { 76091d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(thread_checker_.CalledOnValidThread()); 76191d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(id.get()); 7624fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org Container::iterator it = std::find_if(list_.begin(), list_.end(), 763d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org [&id](const StatsReport* r)->bool { return r->id()->Equals(id); }); 7644fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org if (it != end()) { 765d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org StatsReport* report = new StatsReport((*it)->id()); 7664fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org delete *it; 7674fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org *it = report; 7684fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return report; 7694fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org } 770d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return InsertNew(id); 771c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 772c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 773c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org// Looks for a report with the given |id|. If one is not found, NULL 774c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org// will be returned. 7754fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgStatsReport* StatsCollection::Find(const StatsReport::Id& id) { 77691d6edef35e7275879c30ce16ecb8b6dc73c6e4ahenrikg RTC_DCHECK(thread_checker_.CalledOnValidThread()); 7774fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org Container::iterator it = std::find_if(list_.begin(), list_.end(), 778d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org [&id](const StatsReport* r)->bool { return r->id()->Equals(id); }); 7794fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return it == list_.end() ? nullptr : *it; 7804fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 7814fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 7825c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org} // namespace webrtc 783