statstypes.cc revision 4b89aa03bb9c817cf2274f2035d613a70c5298eb
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 35d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org// and use this to 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 } 77d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 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) { 234d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 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. 286d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 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_) { 298d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org DCHECK(strcmp(value_.static_string_, other.value_.static_string_) != 0) 299d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org << "Duplicate global?"; 300d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org } 301d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org#endif 302d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value_.static_string_ == other.value_.static_string_; 303d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org } 304d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kString: 305d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return *value_.string_ == *other.value_.string_; 306d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kBool: 307d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value_.bool_ == other.value_.bool_; 308d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kId: 309d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return (*value_.id_)->Equals(*other.value_.id_); 310d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org } 311d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org RTC_NOTREACHED(); 312d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return false; 313d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 314d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 315d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgbool StatsReport::Value::operator==(const std::string& value) const { 316d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return (type_ == kString && value_.string_->compare(value) == 0) || 317d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org (type_ == kStaticString && value.compare(value_.static_string_) == 0); 318d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 319d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 320d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgbool StatsReport::Value::operator==(const char* value) const { 321d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (type_ == kString) 322d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value_.string_->compare(value) == 0; 323d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (type_ != kStaticString) 324d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return false; 325d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org#if (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)) 326d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (value_.static_string_ != value) 327d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org DCHECK(strcmp(value_.static_string_, value) != 0) << "Duplicate global?"; 328d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org#endif 329d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value == value_.static_string_; 330d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 331d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 332d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgbool StatsReport::Value::operator==(int64 value) const { 333d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return type_ == kInt ? value_.int_ == static_cast<int>(value) : 334d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org (type_ == kInt64 ? value_.int64_ == value : false); 335d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 336d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 337d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgbool StatsReport::Value::operator==(bool value) const { 338d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return type_ == kBool && value_.bool_ == value; 339d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 340d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 341d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgbool StatsReport::Value::operator==(float value) const { 342d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return type_ == kFloat && value_.float_ == value; 343d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 344d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 345d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgbool StatsReport::Value::operator==(const Id& value) const { 346d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return type_ == kId && (*value_.id_)->Equals(value); 347d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 348d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 349d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgint StatsReport::Value::int_val() const { 350d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org DCHECK(type_ == kInt); 351d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value_.int_; 352d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 353d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 354d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgint64 StatsReport::Value::int64_val() const { 355d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org DCHECK(type_ == kInt64); 356d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value_.int64_; 357d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 358d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 359d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgfloat StatsReport::Value::float_val() const { 360d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org DCHECK(type_ == kFloat); 361d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value_.float_; 362d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 363d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 364d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgconst char* StatsReport::Value::static_string_val() const { 365d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org DCHECK(type_ == kStaticString); 366d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value_.static_string_; 367d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 368d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 369d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgconst std::string& StatsReport::Value::string_val() const { 370d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org DCHECK(type_ == kString); 371d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return *value_.string_; 372d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 373d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 374d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgbool StatsReport::Value::bool_val() const { 375d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org DCHECK(type_ == kBool); 376d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value_.bool_; 377c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 378c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 379c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.orgconst char* StatsReport::Value::display_name() const { 380c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org switch (name) { 381c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameAudioOutputLevel: 382c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "audioOutputLevel"; 383c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameAudioInputLevel: 384c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "audioInputLevel"; 385c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameBytesSent: 386c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "bytesSent"; 387c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNamePacketsSent: 388c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "packetsSent"; 389c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameBytesReceived: 390c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "bytesReceived"; 391487a4442152e2c70146aa2d2c6ccb370233c056cdecurtis@webrtc.org case kStatsValueNameLabel: 392487a4442152e2c70146aa2d2c6ccb370233c056cdecurtis@webrtc.org return "label"; 393c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNamePacketsReceived: 394c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "packetsReceived"; 395c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNamePacketsLost: 396c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "packetsLost"; 397487a4442152e2c70146aa2d2c6ccb370233c056cdecurtis@webrtc.org case kStatsValueNameProtocol: 398487a4442152e2c70146aa2d2c6ccb370233c056cdecurtis@webrtc.org return "protocol"; 399c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameTransportId: 400c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "transportId"; 4017bea1ffe772e837d96f8faa5c9dd06e531b95379pthatcher@webrtc.org case kStatsValueNameSelectedCandidatePairId: 4027bea1ffe772e837d96f8faa5c9dd06e531b95379pthatcher@webrtc.org return "selectedCandidatePairId"; 403c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameSsrc: 404c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "ssrc"; 405487a4442152e2c70146aa2d2c6ccb370233c056cdecurtis@webrtc.org case kStatsValueNameState: 406487a4442152e2c70146aa2d2c6ccb370233c056cdecurtis@webrtc.org return "state"; 407487a4442152e2c70146aa2d2c6ccb370233c056cdecurtis@webrtc.org case kStatsValueNameDataChannelId: 408487a4442152e2c70146aa2d2c6ccb370233c056cdecurtis@webrtc.org return "datachannelid"; 409c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org 410c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org // 'goog' prefixed constants. 411c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameActiveConnection: 412c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googActiveConnection"; 413c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameActualEncBitrate: 414c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googActualEncBitrate"; 415c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameAvailableReceiveBandwidth: 416c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googAvailableReceiveBandwidth"; 417c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameAvailableSendBandwidth: 418c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googAvailableSendBandwidth"; 419c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameAvgEncodeMs: 420c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googAvgEncodeMs"; 421c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameBucketDelay: 422c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googBucketDelay"; 423c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameBandwidthLimitedResolution: 424c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googBandwidthLimitedResolution"; 425c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameCaptureJitterMs: 426c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googCaptureJitterMs"; 427c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameCaptureQueueDelayMsPerS: 428c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googCaptureQueueDelayMsPerS"; 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"; 551c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNamePlisReceived: 552c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googPlisReceived"; 553c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNamePlisSent: 554c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googPlisSent"; 555c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNamePreferredJitterBufferMs: 556c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googPreferredJitterBufferMs"; 557c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameReadable: 558c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googReadable"; 559c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameRemoteAddress: 560c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googRemoteAddress"; 561950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org case kStatsValueNameRemoteCandidateId: 562950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org return "remoteCandidateId"; 563c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameRemoteCandidateType: 564c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googRemoteCandidateType"; 565c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameRemoteCertificateId: 5667bea1ffe772e837d96f8faa5c9dd06e531b95379pthatcher@webrtc.org return "remoteCertificateId"; 567c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameRetransmitBitrate: 568c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googRetransmitBitrate"; 569c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameRtt: 570c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googRtt"; 571652bc37a07f5ab2559fd217c22be391b45af5b53minyue@webrtc.org case kStatsValueNameSecondaryDecodedRate: 572652bc37a07f5ab2559fd217c22be391b45af5b53minyue@webrtc.org return "googSecondaryDecodedRate"; 573c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameSendPacketsDiscarded: 574c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "packetsDiscardedOnSend"; 575652bc37a07f5ab2559fd217c22be391b45af5b53minyue@webrtc.org case kStatsValueNameSpeechExpandRate: 576652bc37a07f5ab2559fd217c22be391b45af5b53minyue@webrtc.org return "googSpeechExpandRate"; 5777bea1ffe772e837d96f8faa5c9dd06e531b95379pthatcher@webrtc.org case kStatsValueNameSrtpCipher: 5787bea1ffe772e837d96f8faa5c9dd06e531b95379pthatcher@webrtc.org return "srtpCipher"; 579c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameTargetEncBitrate: 580c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googTargetEncBitrate"; 581c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameTransmitBitrate: 582c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googTransmitBitrate"; 583c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameTransportType: 584c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googTransportType"; 585c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameTrackId: 586c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googTrackId"; 587c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameTypingNoiseState: 588c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googTypingNoiseState"; 589c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameViewLimitedResolution: 590c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googViewLimitedResolution"; 591c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org case kStatsValueNameWritable: 592c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return "googWritable"; 593c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org default: 594d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org DCHECK(false); 595c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org break; 596c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org } 597c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org 598c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org return nullptr; 599c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 600c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 601d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgstd::string StatsReport::Value::ToString() const { 602d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org switch (type_) { 603d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kInt: 604d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return rtc::ToString(value_.int_); 605d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kInt64: 606d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return rtc::ToString(value_.int64_); 607d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kFloat: 608d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return rtc::ToString(value_.float_); 609d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kStaticString: 610d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return std::string(value_.static_string_); 611d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kString: 612d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return *value_.string_; 613d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kBool: 614d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return value_.bool_ ? "true" : "false"; 615d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org case kId: 616d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return (*value_.id_)->ToString(); 617d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org } 618d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org RTC_NOTREACHED(); 619d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return std::string(); 620afa6d16a05301c462ff65aa4f1537a1aa12a0a7atommi@webrtc.org} 621afa6d16a05301c462ff65aa4f1537a1aa12a0a7atommi@webrtc.org 622d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::StatsReport(const Id& id) : id_(id), timestamp_(0.0) { 623d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org DCHECK(id_.get()); 6244fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 6254fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 6264fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org// static 627d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::Id StatsReport::NewBandwidthEstimationId() { 628d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return Id(new RefCountedObject<BandwidthEstimationId>()); 6294fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 6304fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 6314fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org// static 632d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::Id StatsReport::NewTypedId(StatsType type, const std::string& id) { 633d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return Id(new RefCountedObject<TypedId>(type, id)); 6344fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 6354fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 6364fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org// static 637d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::Id StatsReport::NewTypedIntId(StatsType type, int id) { 638d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return Id(new RefCountedObject<TypedIntId>(type, id)); 639322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org} 640322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org 641322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org// static 642d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::Id StatsReport::NewIdWithDirection( 6434fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org StatsType type, const std::string& id, StatsReport::Direction direction) { 644d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return Id(new RefCountedObject<IdWithDirection>(type, id, direction)); 6454fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 6464fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 6474fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org// static 648d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::Id StatsReport::NewCandidateId(bool local, const std::string& id) { 649d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return Id(new RefCountedObject<CandidateId>(local, id)); 6504fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 6514fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 6524fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org// static 653d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::Id StatsReport::NewComponentId( 6544fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org const std::string& content_name, int component) { 655d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return Id(new RefCountedObject<ComponentId>(content_name, component)); 6564fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 6574fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 6584fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org// static 659d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport::Id StatsReport::NewCandidatePairId( 6604fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org const std::string& content_name, int component, int index) { 661d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return Id(new RefCountedObject<CandidatePairId>( 662d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org content_name, component, index)); 6634fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 6644fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 6654fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgconst char* StatsReport::TypeToString() const { 6664fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return InternalTypeToString(id_->type()); 6674fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 6684fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 66992f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.orgvoid StatsReport::AddString(StatsReport::StatsValueName name, 67092f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.org const std::string& value) { 671d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const Value* found = FindValue(name); 672d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (!found || !(*found == value)) 673d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org values_[name] = ValuePtr(new Value(name, value)); 674d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org} 675d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 676d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgvoid StatsReport::AddString(StatsReport::StatsValueName name, 677d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const char* value) { 678d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const Value* found = FindValue(name); 679d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (!found || !(*found == value)) 680d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org values_[name] = ValuePtr(new Value(name, value)); 681c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 682c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 68392f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.orgvoid StatsReport::AddInt64(StatsReport::StatsValueName name, int64 value) { 684d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const Value* found = FindValue(name); 685d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (!found || !(*found == value)) 686d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org values_[name] = ValuePtr(new Value(name, value, Value::kInt64)); 687c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 688c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 68992f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.orgvoid StatsReport::AddInt(StatsReport::StatsValueName name, int value) { 690d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const Value* found = FindValue(name); 691d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (!found || !(*found == static_cast<int64>(value))) 692d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org values_[name] = ValuePtr(new Value(name, value, Value::kInt)); 693c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 694c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 69592f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.orgvoid StatsReport::AddFloat(StatsReport::StatsValueName name, float value) { 696d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const Value* found = FindValue(name); 697d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (!found || !(*found == value)) 698d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org values_[name] = ValuePtr(new Value(name, value)); 69992f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.org} 700c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 701c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.orgvoid StatsReport::AddBoolean(StatsReport::StatsValueName name, bool value) { 702d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const Value* found = FindValue(name); 703d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (!found || !(*found == value)) 704d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org values_[name] = ValuePtr(new Value(name, value)); 7058e327c45d0940fd5bc46c3fe8d24363be07706actommi@webrtc.org} 7068e327c45d0940fd5bc46c3fe8d24363be07706actommi@webrtc.org 707d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgvoid StatsReport::AddId(StatsReport::StatsValueName name, 708d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const Id& value) { 709d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const Value* found = FindValue(name); 710d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org if (!found || !(*found == value)) 711d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org values_[name] = ValuePtr(new Value(name, value)); 712c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 713c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 7144fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgconst StatsReport::Value* StatsReport::FindValue(StatsValueName name) const { 71592f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.org Values::const_iterator it = values_.find(name); 71692f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.org return it == values_.end() ? nullptr : it->second.get(); 7174fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 7184fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 7194fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgStatsCollection::StatsCollection() { 720c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 721c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 7224fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgStatsCollection::~StatsCollection() { 7234fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org for (auto* r : list_) 7244fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org delete r; 725c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 726c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 7274fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgStatsCollection::const_iterator StatsCollection::begin() const { 728c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org return list_.begin(); 729c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 730c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 7314fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgStatsCollection::const_iterator StatsCollection::end() const { 732c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org return list_.end(); 733c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 734c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 7354fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgsize_t StatsCollection::size() const { 7364fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return list_.size(); 7374fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 7384fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 739d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport* StatsCollection::InsertNew(const StatsReport::Id& id) { 740d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org DCHECK(Find(id) == nullptr); 741d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org StatsReport* report = new StatsReport(id); 7424fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org list_.push_back(report); 7434fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return report; 744c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 745c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 746d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport* StatsCollection::FindOrAddNew(const StatsReport::Id& id) { 747d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org StatsReport* ret = Find(id); 748d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return ret ? ret : InsertNew(id); 749c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 750c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 751d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.orgStatsReport* StatsCollection::ReplaceOrAddNew(const StatsReport::Id& id) { 752d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org DCHECK(id.get()); 7534fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org Container::iterator it = std::find_if(list_.begin(), list_.end(), 754d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org [&id](const StatsReport* r)->bool { return r->id()->Equals(id); }); 7554fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org if (it != end()) { 756d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org StatsReport* report = new StatsReport((*it)->id()); 7574fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org delete *it; 7584fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org *it = report; 7594fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return report; 7604fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org } 761d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return InsertNew(id); 762c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org} 763c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org 764c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org// Looks for a report with the given |id|. If one is not found, NULL 765c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org// will be returned. 7664fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgStatsReport* StatsCollection::Find(const StatsReport::Id& id) { 7674fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org Container::iterator it = std::find_if(list_.begin(), list_.end(), 768d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org [&id](const StatsReport* r)->bool { return r->id()->Equals(id); }); 7694fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org return it == list_.end() ? nullptr : *it; 7704fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org} 7714fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 7725c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org} // namespace webrtc 773