128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org/* 228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * libjingle 35f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * Copyright 2012 Google Inc. 428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * Redistribution and use in source and binary forms, with or without 628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * modification, are permitted provided that the following conditions are met: 728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * this list of conditions and the following disclaimer. 1028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 1128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * this list of conditions and the following disclaimer in the documentation 1228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * and/or other materials provided with the distribution. 1328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 3. The name of the author may not be used to endorse or promote products 1428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * derived from this software without specific prior written permission. 1528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 1628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 1728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 1928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 2128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 2228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 2428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 2528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org */ 2728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 2828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// This file contains structures used for retrieving statistics from an ongoing 2928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// libjingle session. 3028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 3128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#ifndef TALK_APP_WEBRTC_STATSTYPES_H_ 3228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#define TALK_APP_WEBRTC_STATSTYPES_H_ 3328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 345c3ee4bce6c61bb4095eb3746ba39d3eeab2ee93tommi@webrtc.org#include <algorithm> 354fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org#include <list> 3692f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.org#include <map> 3728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#include <string> 3828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 39d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org#include "webrtc/base/basictypes.h" 406ae5a6d7fefff6759d338b5a3e3613e050ebaa62andrew@webrtc.org#include "webrtc/base/common.h" 41d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org#include "webrtc/base/refcount.h" 428e327c45d0940fd5bc46c3fe8d24363be07706actommi@webrtc.org#include "webrtc/base/scoped_ptr.h" 43d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org#include "webrtc/base/linked_ptr.h" 44d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org#include "webrtc/base/scoped_ref_ptr.h" 45d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org#include "webrtc/base/stringencode.h" 4625c96d02cdd2460b378ab89e4b90b17a81bf0d4ajbauch#include "webrtc/base/thread_checker.h" 4728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 4828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgnamespace webrtc { 4928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 5028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgclass StatsReport { 5128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org public: 524fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // Indicates whether a track is for sending or receiving. 534fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // Used in reports for audio/video tracks. 544fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org enum Direction { 554fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org kSend = 0, 564fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org kReceive, 574fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org }; 5828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 594fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org enum StatsType { 604fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // StatsReport types. 614fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // A StatsReport of |type| = "googSession" contains overall information 624fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // about the thing libjingle calls a session (which may contain one 634fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // or more RTP sessions. 644fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org kStatsReportTypeSession, 654fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 664fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // A StatsReport of |type| = "googTransport" contains information 674fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // about a libjingle "transport". 684fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org kStatsReportTypeTransport, 694fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 704fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // A StatsReport of |type| = "googComponent" contains information 714fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // about a libjingle "channel" (typically, RTP or RTCP for a transport). 724fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // This is intended to be the same thing as an ICE "Component". 734fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org kStatsReportTypeComponent, 744fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 754fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // A StatsReport of |type| = "googCandidatePair" contains information 764fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // about a libjingle "connection" - a single source/destination port pair. 774fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // This is intended to be the same thing as an ICE "candidate pair". 784fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org kStatsReportTypeCandidatePair, 794fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 804fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // A StatsReport of |type| = "VideoBWE" is statistics for video Bandwidth 814fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // Estimation, which is global per-session. The |id| field is "bweforvideo" 824fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // (will probably change in the future). 834fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org kStatsReportTypeBwe, 844fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 854fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // A StatsReport of |type| = "ssrc" is statistics for a specific rtp stream. 864fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // The |id| field is the SSRC in decimal form of the rtp stream. 874fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org kStatsReportTypeSsrc, 884fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 894fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // A StatsReport of |type| = "remoteSsrc" is statistics for a specific 904fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // rtp stream, generated by the remote end of the connection. 914fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org kStatsReportTypeRemoteSsrc, 924fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 934fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // A StatsReport of |type| = "googTrack" is statistics for a specific media 944fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // track. The |id| field is the track id. 954fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org kStatsReportTypeTrack, 964fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 974fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // A StatsReport of |type| = "localcandidate" or "remotecandidate" is 984fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // attributes on a specific ICE Candidate. It links to its connection pair 994fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // by candidate id. The string value is taken from 1004fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // http://w3c.github.io/webrtc-stats/#rtcstatstype-enum*. 1014fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org kStatsReportTypeIceLocalCandidate, 1024fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org kStatsReportTypeIceRemoteCandidate, 1034fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 1044fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // A StatsReport of |type| = "googCertificate" contains an SSL certificate 1054fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // transmitted by one of the endpoints of this connection. The |id| is 1064fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // controlled by the fingerprint, and is used to identify the certificate in 1074fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // the Channel stats (as "googLocalCertificateId" or 1084fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // "googRemoteCertificateId") and in any child certificates (as 1094fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // "googIssuerId"). 1104fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org kStatsReportTypeCertificate, 1114fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 1124fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // A StatsReport of |type| = "datachannel" with statistics for a 1134fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // particular DataChannel. 1144fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org kStatsReportTypeDataChannel, 1154fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org }; 11628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 117c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org enum StatsValueName { 118c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameActiveConnection, 119c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameAudioInputLevel, 120c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameAudioOutputLevel, 121c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameBytesReceived, 122c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameBytesSent, 123b7d9a97ce41022e984348efb5f28bf6dd6c6b779Peter Boström kStatsValueNameCodecImplementationName, 124487a4442152e2c70146aa2d2c6ccb370233c056cdecurtis@webrtc.org kStatsValueNameDataChannelId, 125c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNamePacketsLost, 126c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNamePacketsReceived, 127c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNamePacketsSent, 128487a4442152e2c70146aa2d2c6ccb370233c056cdecurtis@webrtc.org kStatsValueNameProtocol, 12904ac81f2fd8ef6680522438fac1894db5415a0ecPeter Thatcher kStatsValueNameReceiving, 1307bea1ffe772e837d96f8faa5c9dd06e531b95379pthatcher@webrtc.org kStatsValueNameSelectedCandidatePairId, 131c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameSsrc, 132487a4442152e2c70146aa2d2c6ccb370233c056cdecurtis@webrtc.org kStatsValueNameState, 133c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameTransportId, 134c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org 135c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org // Internal StatsValue names. 1368e6fd46cc324f8946e68396edcb252ffaf2d4579Henrik Lundin kStatsValueNameAccelerateRate, 137c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameActualEncBitrate, 138c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameAdaptationChanges, 139c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameAvailableReceiveBandwidth, 140c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameAvailableSendBandwidth, 141c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameAvgEncodeMs, 142c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameBandwidthLimitedResolution, 143c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameBucketDelay, 144c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameCaptureStartNtpTimeMs, 145950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org kStatsValueNameCandidateIPAddress, 146950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org kStatsValueNameCandidateNetworkType, 147950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org kStatsValueNameCandidatePortNumber, 148950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org kStatsValueNameCandidatePriority, 149950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org kStatsValueNameCandidateTransportType, 150950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org kStatsValueNameCandidateType, 151c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameChannelId, 152c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameCodecName, 153c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameComponent, 154c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameContentName, 155c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameCpuLimitedResolution, 156c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameCurrentDelayMs, 157c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameDecodeMs, 158c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameDecodingCNG, 159c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameDecodingCTN, 160c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameDecodingCTSG, 161c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameDecodingNormal, 162c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameDecodingPLC, 163c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameDecodingPLCCNG, 164c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameDer, 1657bea1ffe772e837d96f8faa5c9dd06e531b95379pthatcher@webrtc.org kStatsValueNameDtlsCipher, 166c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameEchoCancellationQualityMin, 167c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameEchoDelayMedian, 168c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameEchoDelayStdDev, 169c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameEchoReturnLoss, 170c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameEchoReturnLossEnhancement, 171c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameEncodeUsagePercent, 172c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameExpandRate, 173c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameFingerprint, 174c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameFingerprintAlgorithm, 175c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameFirsReceived, 176c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameFirsSent, 177c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameFrameHeightInput, 178c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameFrameHeightReceived, 179c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameFrameHeightSent, 180c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameFrameRateDecoded, 181c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameFrameRateInput, 182c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameFrameRateOutput, 183c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameFrameRateReceived, 184c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameFrameRateSent, 185c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameFrameWidthInput, 186c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameFrameWidthReceived, 187c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameFrameWidthSent, 188c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameInitiator, 189c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameIssuerId, 190c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameJitterBufferMs, 191c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameJitterReceived, 192487a4442152e2c70146aa2d2c6ccb370233c056cdecurtis@webrtc.org kStatsValueNameLabel, 193c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameLocalAddress, 194950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org kStatsValueNameLocalCandidateId, 195c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameLocalCandidateType, 196c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameLocalCertificateId, 197c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameMaxDecodeMs, 198c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameMinPlayoutDelayMs, 199c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameNacksReceived, 200c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameNacksSent, 201c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNamePlisReceived, 202c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNamePlisSent, 2038e6fd46cc324f8946e68396edcb252ffaf2d4579Henrik Lundin kStatsValueNamePreemptiveExpandRate, 204c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNamePreferredJitterBufferMs, 205c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameRemoteAddress, 206950c51825109c2ca352317edef0a33777d0e6678guoweis@webrtc.org kStatsValueNameRemoteCandidateId, 207c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameRemoteCandidateType, 208c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameRemoteCertificateId, 209c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameRenderDelayMs, 210c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameRetransmitBitrate, 211c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameRtt, 212652bc37a07f5ab2559fd217c22be391b45af5b53minyue@webrtc.org kStatsValueNameSecondaryDecodedRate, 213c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameSendPacketsDiscarded, 214652bc37a07f5ab2559fd217c22be391b45af5b53minyue@webrtc.org kStatsValueNameSpeechExpandRate, 2157bea1ffe772e837d96f8faa5c9dd06e531b95379pthatcher@webrtc.org kStatsValueNameSrtpCipher, 216c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameTargetDelayMs, 217c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameTargetEncBitrate, 218c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameTrackId, 219c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameTransmitBitrate, 220c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameTransportType, 221c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameTypingNoiseState, 222c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameViewLimitedResolution, 223c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org kStatsValueNameWritable, 224c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org }; 225c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org 226d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org class IdBase : public rtc::RefCountInterface { 2278e327c45d0940fd5bc46c3fe8d24363be07706actommi@webrtc.org public: 228d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org ~IdBase() override; 2294fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org StatsType type() const; 2304fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 231d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org // Users of IdBase will be using the Id typedef, which is compatible with 232d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org // this Equals() function. It simply calls the protected (and overridden) 233d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org // Equals() method. 234d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org bool Equals(const rtc::scoped_refptr<IdBase>& other) const { 235d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org return Equals(*other.get()); 236d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org } 237d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 238d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org virtual std::string ToString() const = 0; 23975b7f17c29565ac8ddba38c14239113ac471ca5atommi@webrtc.org 2404fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org protected: 241d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org // Protected since users of the IdBase type will be using the Id typedef. 242d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org virtual bool Equals(const IdBase& other) const; 243d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 244d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org IdBase(StatsType type); // Only meant for derived classes. 2454fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org const StatsType type_; 246322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org 247322a564f49d9c995cfffbaabd3d8c5d5aa326e86decurtis@webrtc.org static const char kSeparator = '_'; 2488e327c45d0940fd5bc46c3fe8d24363be07706actommi@webrtc.org }; 2498e327c45d0940fd5bc46c3fe8d24363be07706actommi@webrtc.org 250d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org typedef rtc::scoped_refptr<IdBase> Id; 251d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 25228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org struct Value { 253d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org enum Type { 2540c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström kInt, // int. 2550c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström kInt64, // int64_t. 2560c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström kFloat, // float. 2570c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström kString, // std::string 258d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org kStaticString, // const char*. 2590c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström kBool, // bool. 2600c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström kId, // Id. 261d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org }; 262d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 2630c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström Value(StatsValueName name, int64_t value, Type int_type); 264d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org Value(StatsValueName name, float f); 265c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org Value(StatsValueName name, const std::string& value); 266d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org Value(StatsValueName name, const char* value); 267d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org Value(StatsValueName name, bool b); 268d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org Value(StatsValueName name, const Id& value); 269d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 270d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org ~Value(); 271d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 272d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org // TODO(tommi): This compares name as well as value... 273d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org // I think we should only need to compare the value part and 274d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org // move the name part into a hash map. 275d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org bool Equals(const Value& other) const; 276d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 277d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org // Comparison operators. Return true iff the current instance is of the 278d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org // correct type and holds the same value. No conversion is performed so 279d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org // a string value of "123" is not equal to an int value of 123 and an int 280d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org // value of 123 is not equal to a float value of 123.0f. 281d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org // One exception to this is that types kInt and kInt64 can be compared and 282d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org // kString and kStaticString too. 283d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org bool operator==(const std::string& value) const; 284d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org bool operator==(const char* value) const; 2850c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström bool operator==(int64_t value) const; 286d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org bool operator==(bool value) const; 287d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org bool operator==(float value) const; 288d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org bool operator==(const Id& value) const; 289d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 290d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org // Getters that allow getting the native value directly. 291d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org // The caller must know the type beforehand or else hit a check. 292d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org int int_val() const; 2930c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström int64_t int64_val() const; 294d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org float float_val() const; 295d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const char* static_string_val() const; 296d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const std::string& string_val() const; 297d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org bool bool_val() const; 298d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const Id& id_val() const; 299242068d58cc01640aa9f733fa67f078fc65c4ae5tommi@webrtc.org 300c57310b982cdce138723de91d7b722f8199834abtommi@webrtc.org // Returns the string representation of |name|. 301c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org const char* display_name() const; 302d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 303d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org // Converts the native value to a string representation of the value. 304d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org std::string ToString() const; 305d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 306d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org Type type() const { return type_; } 307d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 30892f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.org // TODO(tommi): Move |name| and |display_name| out of the Value struct. 309242068d58cc01640aa9f733fa67f078fc65c4ae5tommi@webrtc.org const StatsValueName name; 310d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org 311d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org private: 312d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const Type type_; 313d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org // TODO(tommi): Use C++ 11 union and make value_ const. 314d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org union InternalType { 315d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org int int_; 3160c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström int64_t int64_; 317d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org float float_; 318d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org bool bool_; 319d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org std::string* string_; 320d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const char* static_string_; 321d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org Id* id_; 322d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org } value_; 323242068d58cc01640aa9f733fa67f078fc65c4ae5tommi@webrtc.org 3244fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org private: 3253c089d751ede283e21e186885eaf705c3257ccd2henrikg RTC_DISALLOW_COPY_AND_ASSIGN(Value); 32628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org }; 32728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 328d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org // TODO(tommi): Consider using a similar approach to how we store Ids using 329d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org // scoped_refptr for values. 3308e327c45d0940fd5bc46c3fe8d24363be07706actommi@webrtc.org typedef rtc::linked_ptr<Value> ValuePtr; 33192f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.org typedef std::map<StatsValueName, ValuePtr> Values; 3328e327c45d0940fd5bc46c3fe8d24363be07706actommi@webrtc.org 3338e327c45d0940fd5bc46c3fe8d24363be07706actommi@webrtc.org // Ownership of |id| is passed to |this|. 334d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org explicit StatsReport(const Id& id); 3358e327c45d0940fd5bc46c3fe8d24363be07706actommi@webrtc.org 3364fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // Factory functions for various types of stats IDs. 337d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org static Id NewBandwidthEstimationId(); 338d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org static Id NewTypedId(StatsType type, const std::string& id); 339d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org static Id NewTypedIntId(StatsType type, int id); 340d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org static Id NewIdWithDirection( 3414fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org StatsType type, const std::string& id, Direction direction); 342d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org static Id NewCandidateId(bool local, const std::string& id); 343d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org static Id NewComponentId( 3444fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org const std::string& content_name, int component); 345d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org static Id NewCandidatePairId( 3464fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org const std::string& content_name, int component, int index); 3474fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 348d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const Id& id() const { return id_; } 3494fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org StatsType type() const { return id_->type(); } 3504fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org double timestamp() const { return timestamp_; } 3514fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org void set_timestamp(double t) { timestamp_ = t; } 35292f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.org bool empty() const { return values_.empty(); } 3534fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org const Values& values() const { return values_; } 3544fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org 3554fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org const char* TypeToString() const; 3568e327c45d0940fd5bc46c3fe8d24363be07706actommi@webrtc.org 35792f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.org void AddString(StatsValueName name, const std::string& value); 358d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org void AddString(StatsValueName name, const char* value); 3590c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström void AddInt64(StatsValueName name, int64_t value); 36092f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.org void AddInt(StatsValueName name, int value); 36192f4018d80ec8b092b7c1a35528e57e926f75111tommi@webrtc.org void AddFloat(StatsValueName name, float value); 362242068d58cc01640aa9f733fa67f078fc65c4ae5tommi@webrtc.org void AddBoolean(StatsValueName name, bool value); 363d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org void AddId(StatsValueName name, const Id& value); 3648e327c45d0940fd5bc46c3fe8d24363be07706actommi@webrtc.org 3654fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org const Value* FindValue(StatsValueName name) const; 3668e327c45d0940fd5bc46c3fe8d24363be07706actommi@webrtc.org 3674fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org private: 3684fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // The unique identifier for this object. 3694fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // This is used as a key for this report in ordered containers, 3704fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org // so it must never be changed. 371d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org const Id id_; 3728e327c45d0940fd5bc46c3fe8d24363be07706actommi@webrtc.org double timestamp_; // Time since 1970-01-01T00:00:00Z in milliseconds. 3738e327c45d0940fd5bc46c3fe8d24363be07706actommi@webrtc.org Values values_; 37428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 3753c089d751ede283e21e186885eaf705c3257ccd2henrikg RTC_DISALLOW_COPY_AND_ASSIGN(StatsReport); 3765b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org}; 3775b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org 3785b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org// Typedef for an array of const StatsReport pointers. 3795b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org// Ownership of the pointers held by this implementation is assumed to lie 3805b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org// elsewhere and lifetime guarantees are made by the implementation that uses 3814fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org// this type. In the StatsCollector, object ownership lies with the 3824fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org// StatsCollection class. 3835b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.orgtypedef std::vector<const StatsReport*> StatsReports; 3845b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org 3855b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org// A map from the report id to the report. 3865b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org// This class wraps an STL container and provides a limited set of 3875b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org// functionality in order to keep things simple. 3884fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.orgclass StatsCollection { 3895b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org public: 3904fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org StatsCollection(); 3914fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org ~StatsCollection(); 3925b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org 3934fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org typedef std::list<StatsReport*> Container; 3945b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org typedef Container::iterator iterator; 3955b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org typedef Container::const_iterator const_iterator; 3965b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org 397c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org const_iterator begin() const; 398c9d155faebd5556c9ea86306dc15aa9dac0e13f7tommi@webrtc.org const_iterator end() const; 3994fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org size_t size() const; 4005b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org 4015b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org // Creates a new report object with |id| that does not already 4025b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org // exist in the list of reports. 403d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org StatsReport* InsertNew(const StatsReport::Id& id); 404d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org StatsReport* FindOrAddNew(const StatsReport::Id& id); 405d3900296ae4416de2ea21be4548ea4adba8f3280tommi@webrtc.org StatsReport* ReplaceOrAddNew(const StatsReport::Id& id); 4065b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org 4075b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org // Looks for a report with the given |id|. If one is not found, NULL 4085b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org // will be returned. 4094fb7e2584326050a707aef544028fa9cb616ec89tommi@webrtc.org StatsReport* Find(const StatsReport::Id& id); 4105b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org 4115b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org private: 4125b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org Container list_; 41325c96d02cdd2460b378ab89e4b90b17a81bf0d4ajbauch rtc::ThreadChecker thread_checker_; 4145b06b06cc0ef5a051fa5b1ed687218a21639d93etommi@webrtc.org}; 41528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 41628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org} // namespace webrtc 41728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 41828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#endif // TALK_APP_WEBRTC_STATSTYPES_H_ 419