statstypes.cc revision 8e6fd46cc324f8946e68396edcb252ffaf2d4579
15ec2e7ccb08b2a1598f12b2c6f59c6f31d035b5bAnders Carlsson/* 25ec2e7ccb08b2a1598f12b2c6f59c6f31d035b5bAnders Carlsson * libjingle 35ec2e7ccb08b2a1598f12b2c6f59c6f31d035b5bAnders Carlsson * Copyright 2014 Google Inc. 45ec2e7ccb08b2a1598f12b2c6f59c6f31d035b5bAnders Carlsson * 55ec2e7ccb08b2a1598f12b2c6f59c6f31d035b5bAnders Carlsson * Redistribution and use in source and binary forms, with or without 65ec2e7ccb08b2a1598f12b2c6f59c6f31d035b5bAnders Carlsson * modification, are permitted provided that the following conditions are met: 75ec2e7ccb08b2a1598f12b2c6f59c6f31d035b5bAnders Carlsson * 85ec2e7ccb08b2a1598f12b2c6f59c6f31d035b5bAnders Carlsson * 1. Redistributions of source code must retain the above copyright notice, 95ec2e7ccb08b2a1598f12b2c6f59c6f31d035b5bAnders Carlsson * this list of conditions and the following disclaimer. 105ec2e7ccb08b2a1598f12b2c6f59c6f31d035b5bAnders Carlsson * 2. Redistributions in binary form must reproduce the above copyright notice, 115ec2e7ccb08b2a1598f12b2c6f59c6f31d035b5bAnders Carlsson * this list of conditions and the following disclaimer in the documentation 125ec2e7ccb08b2a1598f12b2c6f59c6f31d035b5bAnders Carlsson * and/or other materials provided with the distribution. 135ec2e7ccb08b2a1598f12b2c6f59c6f31d035b5bAnders Carlsson * 3. The name of the author may not be used to endorse or promote products 145ec2e7ccb08b2a1598f12b2c6f59c6f31d035b5bAnders Carlsson * derived from this software without specific prior written permission. 154c40d98ab7acf5f27fa89b17bd8fc0ef7683df37John McCall * 1655fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 17176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1806057cef0bcd7804e80f3ce2bbe352178396c715Chandler Carruth * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 194179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 203b844ba7d5be205a9b4f5f0b0d1b7978977f4b8cChandler Carruth * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 2286a3a03667bdb0dcab7e6a2877dfd234b07a6d43Douglas Gregor * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 235ec2e7ccb08b2a1598f12b2c6f59c6f31d035b5bAnders Carlsson * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 245ec2e7ccb08b2a1598f12b2c6f59c6f31d035b5bAnders Carlsson * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 255ec2e7ccb08b2a1598f12b2c6f59c6f31d035b5bAnders Carlsson * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26fcbfdc1a93325471a262f0d94461273ae67ad3b6Anders Carlsson */ 2787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 28fcbfdc1a93325471a262f0d94461273ae67ad3b6Anders Carlsson#include "talk/app/webrtc/statstypes.h" 29fcbfdc1a93325471a262f0d94461273ae67ad3b6Anders Carlsson 30fcbfdc1a93325471a262f0d94461273ae67ad3b6Anders Carlsson#include <string.h> 31fcbfdc1a93325471a262f0d94461273ae67ad3b6Anders Carlsson 32a07398ed98ea2b55ad7a505a3aab18aed93b149fJohn McCall#include "webrtc/base/checks.h" 3387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 34a07398ed98ea2b55ad7a505a3aab18aed93b149fJohn McCall// TODO(tommi): Could we have a static map of value name -> expected type 35a07398ed98ea2b55ad7a505a3aab18aed93b149fJohn McCall// and use this to DCHECK on correct usage (somewhat strongly typed values)? 369d232c884ea9872d6555df0fd7359699819bc1f1John McCall// Alternatively, we could define the names+type in a separate document and 379d232c884ea9872d6555df0fd7359699819bc1f1John McCall// generate strongly typed inline C++ code that forces the correct type to be 38ec8051276e5ba5eb3f8dcb0ebb96e17495cbc2bfFariborz Jahanian// used for a given name at compile time. 39a07398ed98ea2b55ad7a505a3aab18aed93b149fJohn McCall 40f85e193739c953358c865005855253af4f68a497John McCallusing rtc::RefCountedObject; 4138afbc7361d861968232defaeaf8e302af75b5eeRichard Smith 42a07398ed98ea2b55ad7a505a3aab18aed93b149fJohn McCallnamespace webrtc { 43a07398ed98ea2b55ad7a505a3aab18aed93b149fJohn McCallnamespace { 44a07398ed98ea2b55ad7a505a3aab18aed93b149fJohn McCall 45ec8051276e5ba5eb3f8dcb0ebb96e17495cbc2bfFariborz Jahanian// The id of StatsReport of type kStatsReportTypeBwe. 46a07398ed98ea2b55ad7a505a3aab18aed93b149fJohn McCallconst char kStatsReportVideoBweId[] = "bweforvideo"; 479d232c884ea9872d6555df0fd7359699819bc1f1John McCall 489d232c884ea9872d6555df0fd7359699819bc1f1John McCall// NOTE: These names need to be consistent with an external 499d232c884ea9872d6555df0fd7359699819bc1f1John McCall// specification (W3C Stats Identifiers). 509d232c884ea9872d6555df0fd7359699819bc1f1John McCallconst char* InternalTypeToString(StatsReport::StatsType type) { 519d232c884ea9872d6555df0fd7359699819bc1f1John McCall switch (type) { 529d232c884ea9872d6555df0fd7359699819bc1f1John McCall case StatsReport::kStatsReportTypeSession: 53649b4a1a9b5e6f768ca0cb84bd97b00f51083e15Chad Rosier return "googLibjingleSession"; 54649b4a1a9b5e6f768ca0cb84bd97b00f51083e15Chad Rosier case StatsReport::kStatsReportTypeBwe: 55649b4a1a9b5e6f768ca0cb84bd97b00f51083e15Chad Rosier return "VideoBwe"; 569d232c884ea9872d6555df0fd7359699819bc1f1John McCall case StatsReport::kStatsReportTypeRemoteSsrc: 575ec2e7ccb08b2a1598f12b2c6f59c6f31d035b5bAnders Carlsson return "remoteSsrc"; 589d232c884ea9872d6555df0fd7359699819bc1f1John McCall case StatsReport::kStatsReportTypeSsrc: 595ec2e7ccb08b2a1598f12b2c6f59c6f31d035b5bAnders Carlsson return "ssrc"; 605ec2e7ccb08b2a1598f12b2c6f59c6f31d035b5bAnders Carlsson case StatsReport::kStatsReportTypeTrack: 615cd91b513455fd7753e8815b54f0a49bbca6602dJohn McCall return "googTrack"; 625cd91b513455fd7753e8815b54f0a49bbca6602dJohn McCall case StatsReport::kStatsReportTypeIceLocalCandidate: 63cc6a44b8bdecd9fc70211146e8ba3853b1fac784Douglas Gregor return "localcandidate"; 6487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar case StatsReport::kStatsReportTypeIceRemoteCandidate: 65cc6a44b8bdecd9fc70211146e8ba3853b1fac784Douglas Gregor return "remotecandidate"; 66a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall case StatsReport::kStatsReportTypeTransport: 67a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall return "transport"; 68cc6a44b8bdecd9fc70211146e8ba3853b1fac784Douglas Gregor case StatsReport::kStatsReportTypeComponent: 69a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall return "googComponent"; 70a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall case StatsReport::kStatsReportTypeCandidatePair: 71a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall return "googCandidatePair"; 72a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall case StatsReport::kStatsReportTypeCertificate: 73a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall return "googCertificate"; 74cc6a44b8bdecd9fc70211146e8ba3853b1fac784Douglas Gregor case StatsReport::kStatsReportTypeDataChannel: 75a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall return "datachannel"; 76a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall } 77a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall DCHECK(false); 78a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall return nullptr; 79a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall} 80a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall 81a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCallclass BandwidthEstimationId : public StatsReport::IdBase { 8204e517650569598e847c2ab609672e6df93effe5Richard Smith public: 83cc6a44b8bdecd9fc70211146e8ba3853b1fac784Douglas Gregor BandwidthEstimationId() 84a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall : StatsReport::IdBase(StatsReport::kStatsReportTypeBwe) {} 85a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall std::string ToString() const override { return kStatsReportVideoBweId; } 86a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall}; 87a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall 88a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCallclass TypedId : public StatsReport::IdBase { 894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar public: 904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar TypedId(StatsReport::StatsType type, const std::string& id) 914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar : StatsReport::IdBase(type), id_(id) {} 924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar bool Equals(const IdBase& other) const override { 944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar return IdBase::Equals(other) && 954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar static_cast<const TypedId&>(other).id_ == id_; 964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string ToString() const override { 994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar return std::string(InternalTypeToString(type_)) + kSeparator + id_; 1004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 1014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar protected: 1034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar const std::string id_; 104a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall}; 105176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1069a3be4cfdf7858b2467f57448ab99f72a2926b35Timur Iskhodzhanovclass TypedIntId : public StatsReport::IdBase { 10787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar public: 108a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall TypedIntId(StatsReport::StatsType type, int id) 109a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall : StatsReport::IdBase(type), id_(id) {} 110a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall 111c7971a9efdf9880448a69aabb5182c3c27eecf6dDavid Blaikie bool Equals(const IdBase& other) const override { 112c7971a9efdf9880448a69aabb5182c3c27eecf6dDavid Blaikie return IdBase::Equals(other) && 113c7971a9efdf9880448a69aabb5182c3c27eecf6dDavid Blaikie static_cast<const TypedIntId&>(other).id_ == id_; 114a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall } 115a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall 116a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall std::string ToString() const override { 11704e517650569598e847c2ab609672e6df93effe5Richard Smith return std::string(InternalTypeToString(type_)) + 118cc6a44b8bdecd9fc70211146e8ba3853b1fac784Douglas Gregor kSeparator + 119cc6a44b8bdecd9fc70211146e8ba3853b1fac784Douglas Gregor rtc::ToString<int>(id_); 120abb943284cabd9131586c2758a4f02baba668aceRichard Smith } 121abb943284cabd9131586c2758a4f02baba668aceRichard Smith 122ef7844666b36226521e459d18f2834dacaa039e3Nick Lewycky protected: 123ef7844666b36226521e459d18f2834dacaa039e3Nick Lewycky const int id_; 12400a8c3f6c979a11b15b2a4a4ce08c7888634d6cdRichard Smith}; 12500a8c3f6c979a11b15b2a4a4ce08c7888634d6cdRichard Smith 12600a8c3f6c979a11b15b2a4a4ce08c7888634d6cdRichard Smithclass IdWithDirection : public TypedId { 12700a8c3f6c979a11b15b2a4a4ce08c7888634d6cdRichard Smith public: 128abb943284cabd9131586c2758a4f02baba668aceRichard Smith IdWithDirection(StatsReport::StatsType type, const std::string& id, 129abb943284cabd9131586c2758a4f02baba668aceRichard Smith StatsReport::Direction direction) 130abb943284cabd9131586c2758a4f02baba668aceRichard Smith : TypedId(type, id), direction_(direction) {} 131abb943284cabd9131586c2758a4f02baba668aceRichard Smith 132ef7844666b36226521e459d18f2834dacaa039e3Nick Lewycky bool Equals(const IdBase& other) const override { 133ef7844666b36226521e459d18f2834dacaa039e3Nick Lewycky return TypedId::Equals(other) && 134ef7844666b36226521e459d18f2834dacaa039e3Nick Lewycky static_cast<const IdWithDirection&>(other).direction_ == direction_; 135ef7844666b36226521e459d18f2834dacaa039e3Nick Lewycky } 136abb943284cabd9131586c2758a4f02baba668aceRichard Smith 137abb943284cabd9131586c2758a4f02baba668aceRichard Smith std::string ToString() const override { 138abb943284cabd9131586c2758a4f02baba668aceRichard Smith std::string ret(TypedId::ToString()); 139abb943284cabd9131586c2758a4f02baba668aceRichard Smith ret += kSeparator; 140fcbfdc1a93325471a262f0d94461273ae67ad3b6Anders Carlsson ret += direction_ == StatsReport::kSend ? "send" : "recv"; 1417ca4850a3e3530fa6c93b64b740446e32c97f992Richard Smith return ret; 1427ca4850a3e3530fa6c93b64b740446e32c97f992Richard Smith } 143fcbfdc1a93325471a262f0d94461273ae67ad3b6Anders Carlsson 144fcbfdc1a93325471a262f0d94461273ae67ad3b6Anders Carlsson private: 145fcbfdc1a93325471a262f0d94461273ae67ad3b6Anders Carlsson const StatsReport::Direction direction_; 146fcbfdc1a93325471a262f0d94461273ae67ad3b6Anders Carlsson}; 1473ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar 1483ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainarclass CandidateId : public TypedId { 1493ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar public: 1503ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar CandidateId(bool local, const std::string& id) 1513ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar : TypedId(local ? 1523ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar StatsReport::kStatsReportTypeIceLocalCandidate : 1533ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar StatsReport::kStatsReportTypeIceRemoteCandidate, 1543ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar id) { 1553ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar } 1563ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar 1573ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar std::string ToString() const override { 1583ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar return "Cand-" + id_; 1593ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar } 1603ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar}; 1613ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar 1623ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainarclass ComponentId : public StatsReport::IdBase { 1633ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar public: 1643ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar ComponentId(const std::string& content_name, int component) 1653ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar : ComponentId(StatsReport::kStatsReportTypeComponent, content_name, 1663ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar component) {} 1673ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar 1683ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar bool Equals(const IdBase& other) const override { 1693ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar return IdBase::Equals(other) && 17087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar static_cast<const ComponentId&>(other).component_ == component_ && 17187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar static_cast<const ComponentId&>(other).content_name_ == content_name_; 172fcbfdc1a93325471a262f0d94461273ae67ad3b6Anders Carlsson } 173176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 1740e2c34f92f00628d48968dfea096d36381f494cbStephen Hines std::string ToString() const override { 17587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar return ToString("Channel-"); 176176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 1777ca4850a3e3530fa6c93b64b740446e32c97f992Richard Smith 17887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar protected: 179abb943284cabd9131586c2758a4f02baba668aceRichard Smith ComponentId(StatsReport::StatsType type, const std::string& content_name, 180ef7844666b36226521e459d18f2834dacaa039e3Nick Lewycky int component) 181abb943284cabd9131586c2758a4f02baba668aceRichard Smith : IdBase(type), 18287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar content_name_(content_name), 183fcbfdc1a93325471a262f0d94461273ae67ad3b6Anders Carlsson component_(component) {} 184fcbfdc1a93325471a262f0d94461273ae67ad3b6Anders Carlsson 185045a6d84a0fa672eb5d914be1bb8f3baa226beb3Anders Carlsson std::string ToString(const char* prefix) const { 1867ca4850a3e3530fa6c93b64b740446e32c97f992Richard Smith std::string ret(prefix); 1877ca4850a3e3530fa6c93b64b740446e32c97f992Richard Smith ret += content_name_; 188d4ec562b3aaf50ea9015f82c96ebfd05a35fc7efRichard Smith ret += '-'; 18987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar ret += rtc::ToString<>(component_); 190fcbfdc1a93325471a262f0d94461273ae67ad3b6Anders Carlsson return ret; 191eb4072ed06c884f1053047ad88846cbffd5ac62eAnders Carlsson } 19230fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCall 19330fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCall private: 194176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines const std::string content_name_; 195176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines const int component_; 196176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines}; 19730fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCall 19830fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCallclass CandidatePairId : public ComponentId { 199942f9fe11d3a9583eef6bc4ca2549b1f0d1694daReid Kleckner public: 200942f9fe11d3a9583eef6bc4ca2549b1f0d1694daReid Kleckner CandidatePairId(const std::string& content_name, int component, int index) 201942f9fe11d3a9583eef6bc4ca2549b1f0d1694daReid Kleckner : ComponentId(StatsReport::kStatsReportTypeCandidatePair, content_name, 202942f9fe11d3a9583eef6bc4ca2549b1f0d1694daReid Kleckner component), 203942f9fe11d3a9583eef6bc4ca2549b1f0d1694daReid Kleckner index_(index) {} 20487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 20587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar bool Equals(const IdBase& other) const override { 206176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return ComponentId::Equals(other) && 20787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar static_cast<const CandidatePairId&>(other).index_ == index_; 208176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 20930fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCall 21030fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCall std::string ToString() const override { 211efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar std::string ret(ComponentId::ToString("Conn-")); 21287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar ret += '-'; 213eb4072ed06c884f1053047ad88846cbffd5ac62eAnders Carlsson ret += rtc::ToString<>(index_); 21430fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCall return ret; 21530fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCall } 21630fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCall 21730fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCall private: 21830fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCall const int index_; 21930fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCall}; 220eb4072ed06c884f1053047ad88846cbffd5ac62eAnders Carlsson 22130fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCall} // namespace 222eb4072ed06c884f1053047ad88846cbffd5ac62eAnders Carlsson 22330fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCallStatsReport::IdBase::IdBase(StatsType type) : type_(type) {} 22430fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCallStatsReport::IdBase::~IdBase() {} 22530fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCall 22620bb175cb8ae5844034828db094fb948c0e3454aJohn McCallStatsReport::StatsType StatsReport::IdBase::type() const { return type_; } 227c7971a9efdf9880448a69aabb5182c3c27eecf6dDavid Blaikie 228c7971a9efdf9880448a69aabb5182c3c27eecf6dDavid Blaikiebool StatsReport::IdBase::Equals(const IdBase& other) const { 22920bb175cb8ae5844034828db094fb948c0e3454aJohn McCall return other.type_ == type_; 23030fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCall} 231176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 23230fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCallStatsReport::Value::Value(StatsValueName name, int64 value, Type int_type) 23330fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCall : name(name), type_(int_type) { 23430fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCall DCHECK(type_ == kInt || type_ == kInt64); 23520bb175cb8ae5844034828db094fb948c0e3454aJohn McCall type_ == kInt ? value_.int_ = static_cast<int>(value) : value_.int64_ = value; 23630fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCall} 23730fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCall 23820bb175cb8ae5844034828db094fb948c0e3454aJohn McCallStatsReport::Value::Value(StatsValueName name, float f) 23930fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCall : name(name), type_(kFloat) { 24030fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCall value_.float_ = f; 24130fa3707c440222f65fcbb78ee8677462ea0d9ceJohn McCall} 242bd7370a78604e9a20d698bfe328c1e43f12a0613John McCall 243eb4072ed06c884f1053047ad88846cbffd5ac62eAnders CarlssonStatsReport::Value::Value(StatsValueName name, const std::string& value) 244eb4072ed06c884f1053047ad88846cbffd5ac62eAnders Carlsson : name(name), type_(kString) { 2453030eb82593097502469a8b3fc26112c79c75605John McCall value_.string_ = new std::string(value); 2460f30a12ce7b3d4d86c9ca9072f587da77c8eef34Chandler Carruth} 2477ca4850a3e3530fa6c93b64b740446e32c97f992Richard Smith 24832096695c76033a6b0b1747c439f7378a11e8312John McCallStatsReport::Value::Value(StatsValueName name, const char* value) 24932096695c76033a6b0b1747c439f7378a11e8312John McCall : name(name), type_(kStaticString) { 25032096695c76033a6b0b1747c439f7378a11e8312John McCall value_.static_string_ = value; 25132096695c76033a6b0b1747c439f7378a11e8312John McCall} 25232096695c76033a6b0b1747c439f7378a11e8312John McCall 25332096695c76033a6b0b1747c439f7378a11e8312John McCallStatsReport::Value::Value(StatsValueName name, bool b) 25432096695c76033a6b0b1747c439f7378a11e8312John McCall : name(name), type_(kBool) { 25532096695c76033a6b0b1747c439f7378a11e8312John McCall value_.bool_ = b; 2560f30a12ce7b3d4d86c9ca9072f587da77c8eef34Chandler Carruth} 2575cd91b513455fd7753e8815b54f0a49bbca6602dJohn McCall 2585cd91b513455fd7753e8815b54f0a49bbca6602dJohn McCallStatsReport::Value::Value(StatsValueName name, const Id& value) 259176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines : name(name), type_(kId) { 26087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar value_.id_ = new Id(value); 26187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 2629dc046e70d189457968e4c3b986da75b5d98ce8eAnders Carlsson 2639dc046e70d189457968e4c3b986da75b5d98ce8eAnders CarlssonStatsReport::Value::~Value() { 264176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines switch (type_) { 265176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines case kInt: 266d6c9a0f06ce7e164024d8e4dbf2423a5c5035084Fariborz Jahanian case kInt64: 267176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines case kFloat: 268d6c9a0f06ce7e164024d8e4dbf2423a5c5035084Fariborz Jahanian case kBool: 269d6c9a0f06ce7e164024d8e4dbf2423a5c5035084Fariborz Jahanian case kStaticString: 27018af368c080b9d60e34e670cd01f7d2d3ad2ba48Anders Carlsson break; 27187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar case kString: 272b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar delete value_.string_; 273176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines break; 274bd7370a78604e9a20d698bfe328c1e43f12a0613John McCall case kId: 275176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines delete value_.id_; 276044cc54a7d83c90857187c4cd4a0fd33664a7f7fJohn McCall break; 277044cc54a7d83c90857187c4cd4a0fd33664a7f7fJohn McCall } 278176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 27987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 28087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarbool StatsReport::Value::Equals(const Value& other) const { 281c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines if (name != other.name) 282176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return false; 283c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 284176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines // There's a 1:1 relation between a name and a type, so we don't have to 285c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines // check that. 286b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar DCHECK_EQ(type_, other.type_); 287b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar 288c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines switch (type_) { 289b9d2b3b8edf7a0dc56e55acb1cf87338d5648daaKostya Serebryany case kInt: 2909dc046e70d189457968e4c3b986da75b5d98ce8eAnders Carlsson return value_.int_ == other.value_.int_; 2919dc046e70d189457968e4c3b986da75b5d98ce8eAnders Carlsson case kInt64: 2929dc046e70d189457968e4c3b986da75b5d98ce8eAnders Carlsson return value_.int64_ == other.value_.int64_; 293176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines case kFloat: 294176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return value_.float_ == other.value_.float_; 295176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines case kStaticString: { 296176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#if (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)) 297176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines if (value_.static_string_ != other.value_.static_string_) { 298176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines DCHECK(strcmp(value_.static_string_, other.value_.static_string_) != 0) 299176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines << "Duplicate global?"; 300176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 301176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#endif 302176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return value_.static_string_ == other.value_.static_string_; 303176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 304176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines case kString: 305176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return *value_.string_ == *other.value_.string_; 306176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines case kBool: 3070e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return value_.bool_ == other.value_.bool_; 308176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines case kId: 309176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return (*value_.id_)->Equals(*other.value_.id_); 310176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 311efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar RTC_NOTREACHED(); 3123030eb82593097502469a8b3fc26112c79c75605John McCall return false; 3137ca4850a3e3530fa6c93b64b740446e32c97f992Richard Smith} 3147ca4850a3e3530fa6c93b64b740446e32c97f992Richard Smith 3154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarbool StatsReport::Value::operator==(const std::string& value) const { 3164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar return (type_ == kString && value_.string_->compare(value) == 0) || 3174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar (type_ == kStaticString && value.compare(value_.static_string_) == 0); 3184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 3194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 3204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarbool StatsReport::Value::operator==(const char* value) const { 3214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar if (type_ == kString) 3224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar return value_.string_->compare(value) == 0; 3234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar if (type_ != kStaticString) 3244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar return false; 3254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)) 32658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar if (value_.static_string_ != value) 32758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar DCHECK(strcmp(value_.static_string_, value) != 0) << "Duplicate global?"; 32858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#endif 32958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar return value == value_.static_string_; 33058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar} 3318b418685e9e4f02f4eb2a76e1ec063e07552b68dChris Lattner 332c5c6fa78fd0e6a15c5611e8a059359054cfbf9d5Reid Klecknerbool StatsReport::Value::operator==(int64 value) const { 333c5c6fa78fd0e6a15c5611e8a059359054cfbf9d5Reid Kleckner return type_ == kInt ? value_.int_ == static_cast<int>(value) : 334c5c6fa78fd0e6a15c5611e8a059359054cfbf9d5Reid Kleckner (type_ == kInt64 ? value_.int64_ == value : false); 335c5c6fa78fd0e6a15c5611e8a059359054cfbf9d5Reid Kleckner} 336c5c6fa78fd0e6a15c5611e8a059359054cfbf9d5Reid Kleckner 3376c6bda3b0b1d8adaac2ba3f4da7056e9f1eef52eEli Friedmanbool StatsReport::Value::operator==(bool value) const { 3386c6bda3b0b1d8adaac2ba3f4da7056e9f1eef52eEli Friedman return type_ == kBool && value_.bool_ == value; 3396c6bda3b0b1d8adaac2ba3f4da7056e9f1eef52eEli Friedman} 34087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 34187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarbool StatsReport::Value::operator==(float value) const { 34287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar return type_ == kFloat && value_.float_ == value; 3436c6bda3b0b1d8adaac2ba3f4da7056e9f1eef52eEli Friedman} 344176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 3457ca4850a3e3530fa6c93b64b740446e32c97f992Richard Smithbool StatsReport::Value::operator==(const Id& value) const { 3467ca4850a3e3530fa6c93b64b740446e32c97f992Richard Smith return type_ == kId && (*value_.id_)->Equals(value); 3476c6bda3b0b1d8adaac2ba3f4da7056e9f1eef52eEli Friedman} 348176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 349176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesint StatsReport::Value::int_val() const { 350176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines DCHECK(type_ == kInt); 351b80a16eadd0dacabfc1c32412e243ccb99dd664dRichard Smith return value_.int_; 352b80a16eadd0dacabfc1c32412e243ccb99dd664dRichard Smith} 353b80a16eadd0dacabfc1c32412e243ccb99dd664dRichard Smith 354b80a16eadd0dacabfc1c32412e243ccb99dd664dRichard Smithint64 StatsReport::Value::int64_val() const { 355b80a16eadd0dacabfc1c32412e243ccb99dd664dRichard Smith DCHECK(type_ == kInt64); 356b80a16eadd0dacabfc1c32412e243ccb99dd664dRichard Smith return value_.int64_; 357b80a16eadd0dacabfc1c32412e243ccb99dd664dRichard Smith} 358b80a16eadd0dacabfc1c32412e243ccb99dd664dRichard Smith 35987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarfloat StatsReport::Value::float_val() const { 360176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines DCHECK(type_ == kFloat); 361176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return value_.float_; 362176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 363651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 364e0b691a25f801d8be552c9387863637b9526e639Fariborz Jahanianconst char* StatsReport::Value::static_string_val() const { 365176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines DCHECK(type_ == kStaticString); 366b969e84ec398fde1bb6255a05babdc23e2841101Reid Kleckner return value_.static_string_; 367c47063e1e647c3749b1851e42c78ac52938d2fbbReid Kleckner} 368c47063e1e647c3749b1851e42c78ac52938d2fbbReid Kleckner 369c47063e1e647c3749b1851e42c78ac52938d2fbbReid Klecknerconst std::string& StatsReport::Value::string_val() const { 370c47063e1e647c3749b1851e42c78ac52938d2fbbReid Kleckner DCHECK(type_ == kString); 371b969e84ec398fde1bb6255a05babdc23e2841101Reid Kleckner return *value_.string_; 372b969e84ec398fde1bb6255a05babdc23e2841101Reid Kleckner} 3736bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 374176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesbool StatsReport::Value::bool_val() const { 375176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines DCHECK(type_ == kBool); 376176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return value_.bool_; 377176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 378176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 379176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesconst char* StatsReport::Value::display_name() const { 3800e2c34f92f00628d48968dfea096d36381f494cbStephen Hines switch (name) { 3810e2c34f92f00628d48968dfea096d36381f494cbStephen Hines case kStatsValueNameAudioOutputLevel: 3820e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return "audioOutputLevel"; 383176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines case kStatsValueNameAudioInputLevel: 384b80a16eadd0dacabfc1c32412e243ccb99dd664dRichard Smith return "audioInputLevel"; 38558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar case kStatsValueNameBytesSent: 386bf40cb518312dde1c07e44fcae59bc4eec65589cJohn McCall return "bytesSent"; 387bf40cb518312dde1c07e44fcae59bc4eec65589cJohn McCall case kStatsValueNamePacketsSent: 38858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar return "packetsSent"; 38958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar case kStatsValueNameBytesReceived: 39058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar return "bytesReceived"; 391bf40cb518312dde1c07e44fcae59bc4eec65589cJohn McCall case kStatsValueNameLabel: 392bf40cb518312dde1c07e44fcae59bc4eec65589cJohn McCall return "label"; 3939f967c5e4bbeb48caf6d0e62056b3d3fee20bf7cFariborz Jahanian case kStatsValueNamePacketsReceived: 39458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar return "packetsReceived"; 39558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar case kStatsValueNamePacketsLost: 39658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar return "packetsLost"; 3976c6bda3b0b1d8adaac2ba3f4da7056e9f1eef52eEli Friedman case kStatsValueNameProtocol: 3986c6bda3b0b1d8adaac2ba3f4da7056e9f1eef52eEli Friedman return "protocol"; 399b80a16eadd0dacabfc1c32412e243ccb99dd664dRichard Smith case kStatsValueNameTransportId: 400176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return "transportId"; 401176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines case kStatsValueNameSelectedCandidatePairId: 402b80a16eadd0dacabfc1c32412e243ccb99dd664dRichard Smith return "selectedCandidatePairId"; 403b80a16eadd0dacabfc1c32412e243ccb99dd664dRichard Smith case kStatsValueNameSsrc: 404176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return "ssrc"; 405b80a16eadd0dacabfc1c32412e243ccb99dd664dRichard Smith case kStatsValueNameState: 406b80a16eadd0dacabfc1c32412e243ccb99dd664dRichard Smith return "state"; 407b80a16eadd0dacabfc1c32412e243ccb99dd664dRichard Smith case kStatsValueNameDataChannelId: 408efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar return "datachannelid"; 409efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar 410bf40cb518312dde1c07e44fcae59bc4eec65589cJohn McCall // 'goog' prefixed constants. 411bf40cb518312dde1c07e44fcae59bc4eec65589cJohn McCall case kStatsValueNameAccelerateRate: 412bf40cb518312dde1c07e44fcae59bc4eec65589cJohn McCall return "googAccelerateRate"; 4139f967c5e4bbeb48caf6d0e62056b3d3fee20bf7cFariborz Jahanian case kStatsValueNameActiveConnection: 414eb4072ed06c884f1053047ad88846cbffd5ac62eAnders Carlsson return "googActiveConnection"; 415eb4072ed06c884f1053047ad88846cbffd5ac62eAnders Carlsson case kStatsValueNameActualEncBitrate: 4168b418685e9e4f02f4eb2a76e1ec063e07552b68dChris Lattner return "googActualEncBitrate"; 41787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar case kStatsValueNameAvailableReceiveBandwidth: 418efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar return "googAvailableReceiveBandwidth"; 4194179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov case kStatsValueNameAvailableSendBandwidth: 4209f967c5e4bbeb48caf6d0e62056b3d3fee20bf7cFariborz Jahanian return "googAvailableSendBandwidth"; 421176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines case kStatsValueNameAvgEncodeMs: 422027d7ed9d616d93ae7f02de79d17863725b14866Fariborz Jahanian return "googAvgEncodeMs"; 4234179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov case kStatsValueNameBucketDelay: 4244179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov return "googBucketDelay"; 4254179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov case kStatsValueNameBandwidthLimitedResolution: 4264179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov return "googBandwidthLimitedResolution"; 4274179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov 4284179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov // Candidate related attributes. Values are taken from 4294179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov // http://w3c.github.io/webrtc-stats/#rtcstatstype-enum*. 4304179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov case kStatsValueNameCandidateIPAddress: 4314179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov return "ipAddress"; 4324179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov case kStatsValueNameCandidateNetworkType: 4334179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov return "networkType"; 4344179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov case kStatsValueNameCandidatePortNumber: 4354179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov return "portNumber"; 4364179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov case kStatsValueNameCandidatePriority: 4374179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov return "priority"; 4386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameCandidateTransportType: 4394179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov return "transport"; 440176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines case kStatsValueNameCandidateType: 44187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar return "candidateType"; 442176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 4434179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov case kStatsValueNameChannelId: 4444179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov return "googChannelId"; 4454179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov case kStatsValueNameCodecName: 446c7b5f381ed41a238aa4c243f99170909f64a3414Benjamin Kramer return "googCodecName"; 4474179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov case kStatsValueNameComponent: 4484179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov return "googComponent"; 44987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar case kStatsValueNameContentName: 4509f967c5e4bbeb48caf6d0e62056b3d3fee20bf7cFariborz Jahanian return "googContentName"; 451176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines case kStatsValueNameCpuLimitedResolution: 452176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return "googCpuLimitedResolution"; 4536bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameDecodingCTSG: 454176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return "googDecodingCTSG"; 455176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines case kStatsValueNameDecodingCTN: 456176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return "googDecodingCTN"; 457176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines case kStatsValueNameDecodingNormal: 458176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return "googDecodingNormal"; 459176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines case kStatsValueNameDecodingPLC: 460b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar return "googDecodingPLC"; 461176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines case kStatsValueNameDecodingCNG: 462176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return "googDecodingCNG"; 4636bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameDecodingPLCCNG: 4646bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googDecodingPLCCNG"; 4656bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameDer: 4666bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googDerBase64"; 4676bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameDtlsCipher: 4686bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "dtlsCipher"; 469176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines case kStatsValueNameEchoCancellationQualityMin: 4706bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googEchoCancellationQualityMin"; 47187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar case kStatsValueNameEchoDelayMedian: 4724179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov return "googEchoCancellationEchoDelayMedian"; 473c7b5f381ed41a238aa4c243f99170909f64a3414Benjamin Kramer case kStatsValueNameEchoDelayStdDev: 474efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar return "googEchoCancellationEchoDelayStdDev"; 4754179ddd5752ec5a252ca1e1eb77a5c34b5835d3bAnton Korobeynikov case kStatsValueNameEchoReturnLoss: 47654ec6c59d8b2e529fc3f07ae97415721f394ad92Axel Naumann return "googEchoCancellationReturnLoss"; 477efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar case kStatsValueNameEchoReturnLossEnhancement: 478efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar return "googEchoCancellationReturnLossEnhancement"; 479efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar case kStatsValueNameEncodeUsagePercent: 480efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar return "googEncodeUsagePercent"; 481efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar case kStatsValueNameExpandRate: 482efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar return "googExpandRate"; 4838b418685e9e4f02f4eb2a76e1ec063e07552b68dChris Lattner case kStatsValueNameFingerprint: 484eb4072ed06c884f1053047ad88846cbffd5ac62eAnders Carlsson return "googFingerprint"; 485efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar case kStatsValueNameFingerprintAlgorithm: 48687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar return "googFingerprintAlgorithm"; 48787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar case kStatsValueNameFirsReceived: 48887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar return "googFirsReceived"; 489efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar case kStatsValueNameFirsSent: 4903f88f686e32949ffe02ccb551f482f9cf810358bJohn McCall return "googFirsSent"; 491efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar case kStatsValueNameFrameHeightInput: 492efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar return "googFrameHeightInput"; 493efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar case kStatsValueNameFrameHeightReceived: 4943030eb82593097502469a8b3fc26112c79c75605John McCall return "googFrameHeightReceived"; 495efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar case kStatsValueNameFrameHeightSent: 4963030eb82593097502469a8b3fc26112c79c75605John McCall return "googFrameHeightSent"; 4977ca4850a3e3530fa6c93b64b740446e32c97f992Richard Smith case kStatsValueNameFrameRateReceived: 4987ca4850a3e3530fa6c93b64b740446e32c97f992Richard Smith return "googFrameRateReceived"; 499a240df2ec1b374b3e9e7f760875ffb17cd64506fAlexey Samsonov case kStatsValueNameFrameRateDecoded: 500c3030bc285d90a139fb74629daadef5617283203David Blaikie return "googFrameRateDecoded"; 5016bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameFrameRateOutput: 50278d1a10e13a1abfd4830bccf2a97b2993da1ed5cNick Lewycky return "googFrameRateOutput"; 5030e2c34f92f00628d48968dfea096d36381f494cbStephen Hines case kStatsValueNameDecodeMs: 5040e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return "googDecodeMs"; 50578d1a10e13a1abfd4830bccf2a97b2993da1ed5cNick Lewycky case kStatsValueNameMaxDecodeMs: 506de5d3c717684f3821b8db58037bc7140acf134aaJohn McCall return "googMaxDecodeMs"; 5076bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameCurrentDelayMs: 5086bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googCurrentDelayMs"; 5096c6bda3b0b1d8adaac2ba3f4da7056e9f1eef52eEli Friedman case kStatsValueNameTargetDelayMs: 510e67d1512f299e7f32182553f9941d61dae4f433eDouglas Gregor return "googTargetDelayMs"; 511e67d1512f299e7f32182553f9941d61dae4f433eDouglas Gregor case kStatsValueNameJitterBufferMs: 512e67d1512f299e7f32182553f9941d61dae4f433eDouglas Gregor return "googJitterBufferMs"; 5136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameMinPlayoutDelayMs: 5147ca4850a3e3530fa6c93b64b740446e32c97f992Richard Smith return "googMinPlayoutDelayMs"; 5153030eb82593097502469a8b3fc26112c79c75605John McCall case kStatsValueNameRenderDelayMs: 5167ca4850a3e3530fa6c93b64b740446e32c97f992Richard Smith return "googRenderDelayMs"; 51792d835a86ac334768d0b75936201e4fea3941c1fFariborz Jahanian case kStatsValueNameCaptureStartNtpTimeMs: 5186c6bda3b0b1d8adaac2ba3f4da7056e9f1eef52eEli Friedman return "googCaptureStartNtpTimeMs"; 5196c6bda3b0b1d8adaac2ba3f4da7056e9f1eef52eEli Friedman case kStatsValueNameFrameRateInput: 520efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar return "googFrameRateInput"; 521eb4072ed06c884f1053047ad88846cbffd5ac62eAnders Carlsson case kStatsValueNameFrameRateSent: 522c7b5f381ed41a238aa4c243f99170909f64a3414Benjamin Kramer return "googFrameRateSent"; 523c7b5f381ed41a238aa4c243f99170909f64a3414Benjamin Kramer case kStatsValueNameFrameWidthInput: 524176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return "googFrameWidthInput"; 52587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar case kStatsValueNameFrameWidthReceived: 5266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googFrameWidthReceived"; 5270e2c34f92f00628d48968dfea096d36381f494cbStephen Hines case kStatsValueNameFrameWidthSent: 5286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googFrameWidthSent"; 5296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameInitiator: 5306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googInitiator"; 5310e2c34f92f00628d48968dfea096d36381f494cbStephen Hines case kStatsValueNameIssuerId: 5326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googIssuerId"; 5336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameJitterReceived: 53487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar return "googJitterReceived"; 5356bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameLocalAddress: 5366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googLocalAddress"; 5376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameLocalCandidateId: 5386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "localCandidateId"; 5396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameLocalCandidateType: 5406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googLocalCandidateType"; 5416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameLocalCertificateId: 5426bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "localCertificateId"; 5436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameAdaptationChanges: 54487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar return "googAdaptationChanges"; 54587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar case kStatsValueNameNacksReceived: 54687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar return "googNacksReceived"; 54787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar case kStatsValueNameNacksSent: 5486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googNacksSent"; 549b80a16eadd0dacabfc1c32412e243ccb99dd664dRichard Smith case kStatsValueNamePreemptiveExpandRate: 5506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googPreemptiveExpandRate"; 551f85e193739c953358c865005855253af4f68a497John McCall case kStatsValueNamePlisReceived: 5526bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googPlisReceived"; 5536bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNamePlisSent: 5546bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googPlisSent"; 5556bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNamePreferredJitterBufferMs: 5566bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googPreferredJitterBufferMs"; 5576bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameReadable: 558c7b5f381ed41a238aa4c243f99170909f64a3414Benjamin Kramer return "googReadable"; 5596bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameRemoteAddress: 5606bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googRemoteAddress"; 5616bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameRemoteCandidateId: 562efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar return "remoteCandidateId"; 5636bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameRemoteCandidateType: 564b80a16eadd0dacabfc1c32412e243ccb99dd664dRichard Smith return "googRemoteCandidateType"; 5656bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameRemoteCertificateId: 5666bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "remoteCertificateId"; 5676bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameRetransmitBitrate: 5686bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googRetransmitBitrate"; 569b80a16eadd0dacabfc1c32412e243ccb99dd664dRichard Smith case kStatsValueNameRtt: 570b80a16eadd0dacabfc1c32412e243ccb99dd664dRichard Smith return "googRtt"; 571efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar case kStatsValueNameSecondaryDecodedRate: 572efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar return "googSecondaryDecodedRate"; 573efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar case kStatsValueNameSendPacketsDiscarded: 5743f88f686e32949ffe02ccb551f482f9cf810358bJohn McCall return "packetsDiscardedOnSend"; 575810112e28dc839715d17b0a786f23aaa19600ac0Chris Lattner case kStatsValueNameSpeechExpandRate: 576efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar return "googSpeechExpandRate"; 5776bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameSrtpCipher: 5780e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return "srtpCipher"; 5796bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameTargetEncBitrate: 5806bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googTargetEncBitrate"; 5816bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameTransmitBitrate: 5820e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return "googTransmitBitrate"; 5836bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameTransportType: 5846bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googTransportType"; 5856bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameTrackId: 5866bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googTrackId"; 5876bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameTypingNoiseState: 5886bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googTypingNoiseState"; 5896bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameViewLimitedResolution: 5906bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googViewLimitedResolution"; 5916bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kStatsValueNameWritable: 5926bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return "googWritable"; 593c9a85f9b4cc8ed95ed7feeff554a74bf52bdc1f7Chris Lattner default: 594efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar DCHECK(false); 595efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar break; 596eb4072ed06c884f1053047ad88846cbffd5ac62eAnders Carlsson } 597eb4072ed06c884f1053047ad88846cbffd5ac62eAnders Carlsson 598a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall return nullptr; 59987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 60087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 601c7971a9efdf9880448a69aabb5182c3c27eecf6dDavid Blaikiestd::string StatsReport::Value::ToString() const { 60287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar switch (type_) { 603c7971a9efdf9880448a69aabb5182c3c27eecf6dDavid Blaikie case kInt: 604d26bc76c98006609002d9930f8840490e88ac5b5John McCall return rtc::ToString(value_.int_); 6056bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case kInt64: 6066bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return rtc::ToString(value_.int64_); 607d26bc76c98006609002d9930f8840490e88ac5b5John McCall case kFloat: 608651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return rtc::ToString(value_.float_); 6094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar case kStaticString: 6104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar return std::string(value_.static_string_); 611de5d3c717684f3821b8db58037bc7140acf134aaJohn McCall case kString: 612176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return *value_.string_; 61387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar case kBool: 614772913659894551b02f342e3577e7219e4f9a701Anders Carlsson return value_.bool_ ? "true" : "false"; 6150e2c34f92f00628d48968dfea096d36381f494cbStephen Hines case kId: 6160e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return (*value_.id_)->ToString(); 6176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines } 618772913659894551b02f342e3577e7219e4f9a701Anders Carlsson RTC_NOTREACHED(); 619a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall return std::string(); 620772913659894551b02f342e3577e7219e4f9a701Anders Carlsson} 621772913659894551b02f342e3577e7219e4f9a701Anders Carlsson 622772913659894551b02f342e3577e7219e4f9a701Anders CarlssonStatsReport::StatsReport(const Id& id) : id_(id), timestamp_(0.0) { 623a91f6661c4685fecee6dc09bdaef73254c1aaa06John McCall DCHECK(id_.get()); 624772913659894551b02f342e3577e7219e4f9a701Anders Carlsson} 625 626// static 627StatsReport::Id StatsReport::NewBandwidthEstimationId() { 628 return Id(new RefCountedObject<BandwidthEstimationId>()); 629} 630 631// static 632StatsReport::Id StatsReport::NewTypedId(StatsType type, const std::string& id) { 633 return Id(new RefCountedObject<TypedId>(type, id)); 634} 635 636// static 637StatsReport::Id StatsReport::NewTypedIntId(StatsType type, int id) { 638 return Id(new RefCountedObject<TypedIntId>(type, id)); 639} 640 641// static 642StatsReport::Id StatsReport::NewIdWithDirection( 643 StatsType type, const std::string& id, StatsReport::Direction direction) { 644 return Id(new RefCountedObject<IdWithDirection>(type, id, direction)); 645} 646 647// static 648StatsReport::Id StatsReport::NewCandidateId(bool local, const std::string& id) { 649 return Id(new RefCountedObject<CandidateId>(local, id)); 650} 651 652// static 653StatsReport::Id StatsReport::NewComponentId( 654 const std::string& content_name, int component) { 655 return Id(new RefCountedObject<ComponentId>(content_name, component)); 656} 657 658// static 659StatsReport::Id StatsReport::NewCandidatePairId( 660 const std::string& content_name, int component, int index) { 661 return Id(new RefCountedObject<CandidatePairId>( 662 content_name, component, index)); 663} 664 665const char* StatsReport::TypeToString() const { 666 return InternalTypeToString(id_->type()); 667} 668 669void StatsReport::AddString(StatsReport::StatsValueName name, 670 const std::string& value) { 671 const Value* found = FindValue(name); 672 if (!found || !(*found == value)) 673 values_[name] = ValuePtr(new Value(name, value)); 674} 675 676void StatsReport::AddString(StatsReport::StatsValueName name, 677 const char* value) { 678 const Value* found = FindValue(name); 679 if (!found || !(*found == value)) 680 values_[name] = ValuePtr(new Value(name, value)); 681} 682 683void StatsReport::AddInt64(StatsReport::StatsValueName name, int64 value) { 684 const Value* found = FindValue(name); 685 if (!found || !(*found == value)) 686 values_[name] = ValuePtr(new Value(name, value, Value::kInt64)); 687} 688 689void StatsReport::AddInt(StatsReport::StatsValueName name, int value) { 690 const Value* found = FindValue(name); 691 if (!found || !(*found == static_cast<int64>(value))) 692 values_[name] = ValuePtr(new Value(name, value, Value::kInt)); 693} 694 695void StatsReport::AddFloat(StatsReport::StatsValueName name, float value) { 696 const Value* found = FindValue(name); 697 if (!found || !(*found == value)) 698 values_[name] = ValuePtr(new Value(name, value)); 699} 700 701void StatsReport::AddBoolean(StatsReport::StatsValueName name, bool value) { 702 const Value* found = FindValue(name); 703 if (!found || !(*found == value)) 704 values_[name] = ValuePtr(new Value(name, value)); 705} 706 707void StatsReport::AddId(StatsReport::StatsValueName name, 708 const Id& value) { 709 const Value* found = FindValue(name); 710 if (!found || !(*found == value)) 711 values_[name] = ValuePtr(new Value(name, value)); 712} 713 714const StatsReport::Value* StatsReport::FindValue(StatsValueName name) const { 715 Values::const_iterator it = values_.find(name); 716 return it == values_.end() ? nullptr : it->second.get(); 717} 718 719StatsCollection::StatsCollection() { 720} 721 722StatsCollection::~StatsCollection() { 723 for (auto* r : list_) 724 delete r; 725} 726 727StatsCollection::const_iterator StatsCollection::begin() const { 728 return list_.begin(); 729} 730 731StatsCollection::const_iterator StatsCollection::end() const { 732 return list_.end(); 733} 734 735size_t StatsCollection::size() const { 736 return list_.size(); 737} 738 739StatsReport* StatsCollection::InsertNew(const StatsReport::Id& id) { 740 DCHECK(Find(id) == nullptr); 741 StatsReport* report = new StatsReport(id); 742 list_.push_back(report); 743 return report; 744} 745 746StatsReport* StatsCollection::FindOrAddNew(const StatsReport::Id& id) { 747 StatsReport* ret = Find(id); 748 return ret ? ret : InsertNew(id); 749} 750 751StatsReport* StatsCollection::ReplaceOrAddNew(const StatsReport::Id& id) { 752 DCHECK(id.get()); 753 Container::iterator it = std::find_if(list_.begin(), list_.end(), 754 [&id](const StatsReport* r)->bool { return r->id()->Equals(id); }); 755 if (it != end()) { 756 StatsReport* report = new StatsReport((*it)->id()); 757 delete *it; 758 *it = report; 759 return report; 760 } 761 return InsertNew(id); 762} 763 764// Looks for a report with the given |id|. If one is not found, NULL 765// will be returned. 766StatsReport* StatsCollection::Find(const StatsReport::Id& id) { 767 Container::iterator it = std::find_if(list_.begin(), list_.end(), 768 [&id](const StatsReport* r)->bool { return r->id()->Equals(id); }); 769 return it == list_.end() ? nullptr : *it; 770} 771 772} // namespace webrtc 773