| Index: talk/app/webrtc/statstypes.h
|
| diff --git a/talk/app/webrtc/statstypes.h b/talk/app/webrtc/statstypes.h
|
| deleted file mode 100644
|
| index 60439b9bc8df6d050f252743fb5472559aa9b26a..0000000000000000000000000000000000000000
|
| --- a/talk/app/webrtc/statstypes.h
|
| +++ /dev/null
|
| @@ -1,418 +0,0 @@
|
| -/*
|
| - * libjingle
|
| - * Copyright 2012 Google Inc.
|
| - *
|
| - * Redistribution and use in source and binary forms, with or without
|
| - * modification, are permitted provided that the following conditions are met:
|
| - *
|
| - * 1. Redistributions of source code must retain the above copyright notice,
|
| - * this list of conditions and the following disclaimer.
|
| - * 2. Redistributions in binary form must reproduce the above copyright notice,
|
| - * this list of conditions and the following disclaimer in the documentation
|
| - * and/or other materials provided with the distribution.
|
| - * 3. The name of the author may not be used to endorse or promote products
|
| - * derived from this software without specific prior written permission.
|
| - *
|
| - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
| - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
| - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
| - * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
| - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
| - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
| - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
| - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
| - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| - */
|
| -
|
| -// This file contains structures used for retrieving statistics from an ongoing
|
| -// libjingle session.
|
| -
|
| -#ifndef TALK_APP_WEBRTC_STATSTYPES_H_
|
| -#define TALK_APP_WEBRTC_STATSTYPES_H_
|
| -
|
| -#include <algorithm>
|
| -#include <list>
|
| -#include <map>
|
| -#include <string>
|
| -
|
| -#include "webrtc/base/basictypes.h"
|
| -#include "webrtc/base/common.h"
|
| -#include "webrtc/base/refcount.h"
|
| -#include "webrtc/base/scoped_ptr.h"
|
| -#include "webrtc/base/linked_ptr.h"
|
| -#include "webrtc/base/scoped_ref_ptr.h"
|
| -#include "webrtc/base/stringencode.h"
|
| -#include "webrtc/base/thread_checker.h"
|
| -
|
| -namespace webrtc {
|
| -
|
| -class StatsReport {
|
| - public:
|
| - // Indicates whether a track is for sending or receiving.
|
| - // Used in reports for audio/video tracks.
|
| - enum Direction {
|
| - kSend = 0,
|
| - kReceive,
|
| - };
|
| -
|
| - enum StatsType {
|
| - // StatsReport types.
|
| - // A StatsReport of |type| = "googSession" contains overall information
|
| - // about the thing libjingle calls a session (which may contain one
|
| - // or more RTP sessions.
|
| - kStatsReportTypeSession,
|
| -
|
| - // A StatsReport of |type| = "googTransport" contains information
|
| - // about a libjingle "transport".
|
| - kStatsReportTypeTransport,
|
| -
|
| - // A StatsReport of |type| = "googComponent" contains information
|
| - // about a libjingle "channel" (typically, RTP or RTCP for a transport).
|
| - // This is intended to be the same thing as an ICE "Component".
|
| - kStatsReportTypeComponent,
|
| -
|
| - // A StatsReport of |type| = "googCandidatePair" contains information
|
| - // about a libjingle "connection" - a single source/destination port pair.
|
| - // This is intended to be the same thing as an ICE "candidate pair".
|
| - kStatsReportTypeCandidatePair,
|
| -
|
| - // A StatsReport of |type| = "VideoBWE" is statistics for video Bandwidth
|
| - // Estimation, which is global per-session. The |id| field is "bweforvideo"
|
| - // (will probably change in the future).
|
| - kStatsReportTypeBwe,
|
| -
|
| - // A StatsReport of |type| = "ssrc" is statistics for a specific rtp stream.
|
| - // The |id| field is the SSRC in decimal form of the rtp stream.
|
| - kStatsReportTypeSsrc,
|
| -
|
| - // A StatsReport of |type| = "remoteSsrc" is statistics for a specific
|
| - // rtp stream, generated by the remote end of the connection.
|
| - kStatsReportTypeRemoteSsrc,
|
| -
|
| - // A StatsReport of |type| = "googTrack" is statistics for a specific media
|
| - // track. The |id| field is the track id.
|
| - kStatsReportTypeTrack,
|
| -
|
| - // A StatsReport of |type| = "localcandidate" or "remotecandidate" is
|
| - // attributes on a specific ICE Candidate. It links to its connection pair
|
| - // by candidate id. The string value is taken from
|
| - // http://w3c.github.io/webrtc-stats/#rtcstatstype-enum*.
|
| - kStatsReportTypeIceLocalCandidate,
|
| - kStatsReportTypeIceRemoteCandidate,
|
| -
|
| - // A StatsReport of |type| = "googCertificate" contains an SSL certificate
|
| - // transmitted by one of the endpoints of this connection. The |id| is
|
| - // controlled by the fingerprint, and is used to identify the certificate in
|
| - // the Channel stats (as "googLocalCertificateId" or
|
| - // "googRemoteCertificateId") and in any child certificates (as
|
| - // "googIssuerId").
|
| - kStatsReportTypeCertificate,
|
| -
|
| - // A StatsReport of |type| = "datachannel" with statistics for a
|
| - // particular DataChannel.
|
| - kStatsReportTypeDataChannel,
|
| - };
|
| -
|
| - enum StatsValueName {
|
| - kStatsValueNameActiveConnection,
|
| - kStatsValueNameAudioInputLevel,
|
| - kStatsValueNameAudioOutputLevel,
|
| - kStatsValueNameBytesReceived,
|
| - kStatsValueNameBytesSent,
|
| - kStatsValueNameCodecImplementationName,
|
| - kStatsValueNameDataChannelId,
|
| - kStatsValueNamePacketsLost,
|
| - kStatsValueNamePacketsReceived,
|
| - kStatsValueNamePacketsSent,
|
| - kStatsValueNameProtocol,
|
| - kStatsValueNameReceiving,
|
| - kStatsValueNameSelectedCandidatePairId,
|
| - kStatsValueNameSsrc,
|
| - kStatsValueNameState,
|
| - kStatsValueNameTransportId,
|
| -
|
| - // Internal StatsValue names.
|
| - kStatsValueNameAccelerateRate,
|
| - kStatsValueNameActualEncBitrate,
|
| - kStatsValueNameAdaptationChanges,
|
| - kStatsValueNameAvailableReceiveBandwidth,
|
| - kStatsValueNameAvailableSendBandwidth,
|
| - kStatsValueNameAvgEncodeMs,
|
| - kStatsValueNameBandwidthLimitedResolution,
|
| - kStatsValueNameBucketDelay,
|
| - kStatsValueNameCaptureStartNtpTimeMs,
|
| - kStatsValueNameCandidateIPAddress,
|
| - kStatsValueNameCandidateNetworkType,
|
| - kStatsValueNameCandidatePortNumber,
|
| - kStatsValueNameCandidatePriority,
|
| - kStatsValueNameCandidateTransportType,
|
| - kStatsValueNameCandidateType,
|
| - kStatsValueNameChannelId,
|
| - kStatsValueNameCodecName,
|
| - kStatsValueNameComponent,
|
| - kStatsValueNameContentName,
|
| - kStatsValueNameCpuLimitedResolution,
|
| - kStatsValueNameCurrentDelayMs,
|
| - kStatsValueNameDecodeMs,
|
| - kStatsValueNameDecodingCNG,
|
| - kStatsValueNameDecodingCTN,
|
| - kStatsValueNameDecodingCTSG,
|
| - kStatsValueNameDecodingNormal,
|
| - kStatsValueNameDecodingPLC,
|
| - kStatsValueNameDecodingPLCCNG,
|
| - kStatsValueNameDer,
|
| - kStatsValueNameDtlsCipher,
|
| - kStatsValueNameEchoCancellationQualityMin,
|
| - kStatsValueNameEchoDelayMedian,
|
| - kStatsValueNameEchoDelayStdDev,
|
| - kStatsValueNameEchoReturnLoss,
|
| - kStatsValueNameEchoReturnLossEnhancement,
|
| - kStatsValueNameEncodeUsagePercent,
|
| - kStatsValueNameExpandRate,
|
| - kStatsValueNameFingerprint,
|
| - kStatsValueNameFingerprintAlgorithm,
|
| - kStatsValueNameFirsReceived,
|
| - kStatsValueNameFirsSent,
|
| - kStatsValueNameFrameHeightInput,
|
| - kStatsValueNameFrameHeightReceived,
|
| - kStatsValueNameFrameHeightSent,
|
| - kStatsValueNameFrameRateDecoded,
|
| - kStatsValueNameFrameRateInput,
|
| - kStatsValueNameFrameRateOutput,
|
| - kStatsValueNameFrameRateReceived,
|
| - kStatsValueNameFrameRateSent,
|
| - kStatsValueNameFrameWidthInput,
|
| - kStatsValueNameFrameWidthReceived,
|
| - kStatsValueNameFrameWidthSent,
|
| - kStatsValueNameInitiator,
|
| - kStatsValueNameIssuerId,
|
| - kStatsValueNameJitterBufferMs,
|
| - kStatsValueNameJitterReceived,
|
| - kStatsValueNameLabel,
|
| - kStatsValueNameLocalAddress,
|
| - kStatsValueNameLocalCandidateId,
|
| - kStatsValueNameLocalCandidateType,
|
| - kStatsValueNameLocalCertificateId,
|
| - kStatsValueNameMaxDecodeMs,
|
| - kStatsValueNameMinPlayoutDelayMs,
|
| - kStatsValueNameNacksReceived,
|
| - kStatsValueNameNacksSent,
|
| - kStatsValueNamePlisReceived,
|
| - kStatsValueNamePlisSent,
|
| - kStatsValueNamePreemptiveExpandRate,
|
| - kStatsValueNamePreferredJitterBufferMs,
|
| - kStatsValueNameRemoteAddress,
|
| - kStatsValueNameRemoteCandidateId,
|
| - kStatsValueNameRemoteCandidateType,
|
| - kStatsValueNameRemoteCertificateId,
|
| - kStatsValueNameRenderDelayMs,
|
| - kStatsValueNameRetransmitBitrate,
|
| - kStatsValueNameRtt,
|
| - kStatsValueNameSecondaryDecodedRate,
|
| - kStatsValueNameSendPacketsDiscarded,
|
| - kStatsValueNameSpeechExpandRate,
|
| - kStatsValueNameSrtpCipher,
|
| - kStatsValueNameTargetDelayMs,
|
| - kStatsValueNameTargetEncBitrate,
|
| - kStatsValueNameTrackId,
|
| - kStatsValueNameTransmitBitrate,
|
| - kStatsValueNameTransportType,
|
| - kStatsValueNameTypingNoiseState,
|
| - kStatsValueNameViewLimitedResolution,
|
| - kStatsValueNameWritable,
|
| - };
|
| -
|
| - class IdBase : public rtc::RefCountInterface {
|
| - public:
|
| - ~IdBase() override;
|
| - StatsType type() const;
|
| -
|
| - // Users of IdBase will be using the Id typedef, which is compatible with
|
| - // this Equals() function. It simply calls the protected (and overridden)
|
| - // Equals() method.
|
| - bool Equals(const rtc::scoped_refptr<IdBase>& other) const {
|
| - return Equals(*other.get());
|
| - }
|
| -
|
| - virtual std::string ToString() const = 0;
|
| -
|
| - protected:
|
| - // Protected since users of the IdBase type will be using the Id typedef.
|
| - virtual bool Equals(const IdBase& other) const;
|
| -
|
| - IdBase(StatsType type); // Only meant for derived classes.
|
| - const StatsType type_;
|
| -
|
| - static const char kSeparator = '_';
|
| - };
|
| -
|
| - typedef rtc::scoped_refptr<IdBase> Id;
|
| -
|
| - struct Value {
|
| - enum Type {
|
| - kInt, // int.
|
| - kInt64, // int64_t.
|
| - kFloat, // float.
|
| - kString, // std::string
|
| - kStaticString, // const char*.
|
| - kBool, // bool.
|
| - kId, // Id.
|
| - };
|
| -
|
| - Value(StatsValueName name, int64_t value, Type int_type);
|
| - Value(StatsValueName name, float f);
|
| - Value(StatsValueName name, const std::string& value);
|
| - Value(StatsValueName name, const char* value);
|
| - Value(StatsValueName name, bool b);
|
| - Value(StatsValueName name, const Id& value);
|
| -
|
| - ~Value();
|
| -
|
| - // TODO(tommi): This compares name as well as value...
|
| - // I think we should only need to compare the value part and
|
| - // move the name part into a hash map.
|
| - bool Equals(const Value& other) const;
|
| -
|
| - // Comparison operators. Return true iff the current instance is of the
|
| - // correct type and holds the same value. No conversion is performed so
|
| - // a string value of "123" is not equal to an int value of 123 and an int
|
| - // value of 123 is not equal to a float value of 123.0f.
|
| - // One exception to this is that types kInt and kInt64 can be compared and
|
| - // kString and kStaticString too.
|
| - bool operator==(const std::string& value) const;
|
| - bool operator==(const char* value) const;
|
| - bool operator==(int64_t value) const;
|
| - bool operator==(bool value) const;
|
| - bool operator==(float value) const;
|
| - bool operator==(const Id& value) const;
|
| -
|
| - // Getters that allow getting the native value directly.
|
| - // The caller must know the type beforehand or else hit a check.
|
| - int int_val() const;
|
| - int64_t int64_val() const;
|
| - float float_val() const;
|
| - const char* static_string_val() const;
|
| - const std::string& string_val() const;
|
| - bool bool_val() const;
|
| - const Id& id_val() const;
|
| -
|
| - // Returns the string representation of |name|.
|
| - const char* display_name() const;
|
| -
|
| - // Converts the native value to a string representation of the value.
|
| - std::string ToString() const;
|
| -
|
| - Type type() const { return type_; }
|
| -
|
| - // TODO(tommi): Move |name| and |display_name| out of the Value struct.
|
| - const StatsValueName name;
|
| -
|
| - private:
|
| - const Type type_;
|
| - // TODO(tommi): Use C++ 11 union and make value_ const.
|
| - union InternalType {
|
| - int int_;
|
| - int64_t int64_;
|
| - float float_;
|
| - bool bool_;
|
| - std::string* string_;
|
| - const char* static_string_;
|
| - Id* id_;
|
| - } value_;
|
| -
|
| - private:
|
| - RTC_DISALLOW_COPY_AND_ASSIGN(Value);
|
| - };
|
| -
|
| - // TODO(tommi): Consider using a similar approach to how we store Ids using
|
| - // scoped_refptr for values.
|
| - typedef rtc::linked_ptr<Value> ValuePtr;
|
| - typedef std::map<StatsValueName, ValuePtr> Values;
|
| -
|
| - // Ownership of |id| is passed to |this|.
|
| - explicit StatsReport(const Id& id);
|
| -
|
| - // Factory functions for various types of stats IDs.
|
| - static Id NewBandwidthEstimationId();
|
| - static Id NewTypedId(StatsType type, const std::string& id);
|
| - static Id NewTypedIntId(StatsType type, int id);
|
| - static Id NewIdWithDirection(
|
| - StatsType type, const std::string& id, Direction direction);
|
| - static Id NewCandidateId(bool local, const std::string& id);
|
| - static Id NewComponentId(
|
| - const std::string& content_name, int component);
|
| - static Id NewCandidatePairId(
|
| - const std::string& content_name, int component, int index);
|
| -
|
| - const Id& id() const { return id_; }
|
| - StatsType type() const { return id_->type(); }
|
| - double timestamp() const { return timestamp_; }
|
| - void set_timestamp(double t) { timestamp_ = t; }
|
| - bool empty() const { return values_.empty(); }
|
| - const Values& values() const { return values_; }
|
| -
|
| - const char* TypeToString() const;
|
| -
|
| - void AddString(StatsValueName name, const std::string& value);
|
| - void AddString(StatsValueName name, const char* value);
|
| - void AddInt64(StatsValueName name, int64_t value);
|
| - void AddInt(StatsValueName name, int value);
|
| - void AddFloat(StatsValueName name, float value);
|
| - void AddBoolean(StatsValueName name, bool value);
|
| - void AddId(StatsValueName name, const Id& value);
|
| -
|
| - const Value* FindValue(StatsValueName name) const;
|
| -
|
| - private:
|
| - // The unique identifier for this object.
|
| - // This is used as a key for this report in ordered containers,
|
| - // so it must never be changed.
|
| - const Id id_;
|
| - double timestamp_; // Time since 1970-01-01T00:00:00Z in milliseconds.
|
| - Values values_;
|
| -
|
| - RTC_DISALLOW_COPY_AND_ASSIGN(StatsReport);
|
| -};
|
| -
|
| -// Typedef for an array of const StatsReport pointers.
|
| -// Ownership of the pointers held by this implementation is assumed to lie
|
| -// elsewhere and lifetime guarantees are made by the implementation that uses
|
| -// this type. In the StatsCollector, object ownership lies with the
|
| -// StatsCollection class.
|
| -typedef std::vector<const StatsReport*> StatsReports;
|
| -
|
| -// A map from the report id to the report.
|
| -// This class wraps an STL container and provides a limited set of
|
| -// functionality in order to keep things simple.
|
| -class StatsCollection {
|
| - public:
|
| - StatsCollection();
|
| - ~StatsCollection();
|
| -
|
| - typedef std::list<StatsReport*> Container;
|
| - typedef Container::iterator iterator;
|
| - typedef Container::const_iterator const_iterator;
|
| -
|
| - const_iterator begin() const;
|
| - const_iterator end() const;
|
| - size_t size() const;
|
| -
|
| - // Creates a new report object with |id| that does not already
|
| - // exist in the list of reports.
|
| - StatsReport* InsertNew(const StatsReport::Id& id);
|
| - StatsReport* FindOrAddNew(const StatsReport::Id& id);
|
| - StatsReport* ReplaceOrAddNew(const StatsReport::Id& id);
|
| -
|
| - // Looks for a report with the given |id|. If one is not found, NULL
|
| - // will be returned.
|
| - StatsReport* Find(const StatsReport::Id& id);
|
| -
|
| - private:
|
| - Container list_;
|
| - rtc::ThreadChecker thread_checker_;
|
| -};
|
| -
|
| -} // namespace webrtc
|
| -
|
| -#endif // TALK_APP_WEBRTC_STATSTYPES_H_
|
|
|