Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(289)

Unified Diff: webrtc/api/rtcstats.h

Issue 2331373004: PeerConnection[Interface]::GetStats(RTCStatsCollectorCallback*) added. (Closed)
Patch Set: (Corrected an incorrect inclusion) Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/api/peerconnectionproxy.h ('k') | webrtc/api/rtcstats_objects.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/api/rtcstats.h
diff --git a/webrtc/api/rtcstats.h b/webrtc/api/rtcstats.h
index e2cbf29c74dcc0dbd81edb05cb4884867387f733..55aeb1d8a089ac2d9363f5cd487f57f7ab088de7 100644
--- a/webrtc/api/rtcstats.h
+++ b/webrtc/api/rtcstats.h
@@ -8,274 +8,6 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-#ifndef WEBRTC_API_RTCSTATS_H_
-#define WEBRTC_API_RTCSTATS_H_
+// TODO(hbos): Remove this file once Chromium uses the correct include path.
-#include <map>
-#include <memory>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "webrtc/base/checks.h"
-
-namespace webrtc {
-
-class RTCStatsMemberInterface;
-
-// Abstract base class for RTCStats-derived dictionaries, see
-// https://w3c.github.io/webrtc-stats/.
-//
-// All derived classes must have the following static variable defined:
-// static const char kType[];
-// It is used as a unique class identifier and a string representation of the
-// class type, see https://w3c.github.io/webrtc-stats/#rtcstatstype-str*.
-// Use the |WEBRTC_RTCSTATS_IMPL| macro when implementing subclasses, see macro
-// for details.
-//
-// Derived classes list their dictionary members, RTCStatsMember<T>, as public
-// fields, allowing the following:
-//
-// RTCFooStats foo("fooId", GetCurrentTime());
-// foo.bar = 42;
-// foo.baz = std::vector<std::string>();
-// foo.baz->push_back("hello world");
-// uint32_t x = *foo.bar;
-//
-// Pointers to all the members are available with |Members|, allowing iteration:
-//
-// for (const RTCStatsMemberInterface* member : foo.Members()) {
-// printf("%s = %s\n", member->name(), member->ValueToString().c_str());
-// }
-class RTCStats {
- public:
- RTCStats(const std::string& id, int64_t timestamp_us)
- : id_(id), timestamp_us_(timestamp_us) {}
- RTCStats(std::string&& id, int64_t timestamp_us)
- : id_(std::move(id)), timestamp_us_(timestamp_us) {}
- virtual ~RTCStats() {}
-
- virtual std::unique_ptr<RTCStats> copy() const = 0;
-
- const std::string& id() const { return id_; }
- // Time relative to the UNIX epoch (Jan 1, 1970, UTC), in microseconds.
- int64_t timestamp_us() const { return timestamp_us_; }
- // Returns the static member variable |kType| of the implementing class.
- virtual const char* type() const = 0;
- // Returns a vector of pointers to all the RTCStatsMemberInterface members of
- // this class. This allows for iteration of members.
- std::vector<const RTCStatsMemberInterface*> Members() const;
-
- // Creates a human readable string representation of the report, listing all
- // of its members (names and values).
- std::string ToString() const;
-
- // Downcasts the stats object to an |RTCStats| subclass |T|. DCHECKs that the
- // object is of type |T|.
- template<typename T>
- const T& cast_to() const {
- RTC_DCHECK_EQ(type(), T::kType);
- return static_cast<const T&>(*this);
- }
-
- protected:
- // Gets a vector of all members of this |RTCStats| object, including members
- // derived from parent classes. |additional_capacity| is how many more members
- // shall be reserved in the vector (so that subclasses can allocate a vector
- // with room for both parent and child members without it having to resize).
- virtual std::vector<const RTCStatsMemberInterface*>
- MembersOfThisObjectAndAncestors(
- size_t additional_capacity) const;
-
- std::string const id_;
- int64_t timestamp_us_;
-};
-
-// All |RTCStats| classes should use this macro in a public section of the class
-// definition.
-//
-// This macro declares the static |kType| and overrides methods as required by
-// subclasses of |RTCStats|: |copy|, |type|, and
-// |MembersOfThisObjectAndAncestors|. The |...| argument is a list of addresses
-// to each member defined in the implementing class (list cannot be empty, must
-// have at least one new member).
-//
-// (Since class names need to be known to implement these methods this cannot be
-// part of the base |RTCStats|. While these methods could be implemented using
-// templates, that would only work for immediate subclasses. Subclasses of
-// subclasses also have to override these methods, resulting in boilerplate
-// code. Using a macro avoids this and works for any |RTCStats| class, including
-// grandchildren.)
-//
-// Sample usage:
-//
-// rtcfoostats.h:
-// class RTCFooStats : public RTCStats {
-// public:
-// RTCFooStats(const std::string& id, int64_t timestamp_us)
-// : RTCStats(id, timestamp_us),
-// foo("foo"),
-// bar("bar") {
-// }
-//
-// WEBRTC_RTCSTATS_IMPL(RTCStats, RTCFooStats,
-// &foo,
-// &bar);
-//
-// RTCStatsMember<int32_t> foo;
-// RTCStatsMember<int32_t> bar;
-// };
-//
-// rtcfoostats.cc:
-// const char RTCFooStats::kType[] = "foo-stats";
-//
-#define WEBRTC_RTCSTATS_IMPL(parent_class, this_class, ...) \
- public: \
- static const char kType[]; \
- std::unique_ptr<webrtc::RTCStats> copy() const override { \
- return std::unique_ptr<webrtc::RTCStats>(new this_class(*this)); \
- } \
- const char* type() const override { return this_class::kType; } \
- protected: \
- std::vector<const webrtc::RTCStatsMemberInterface*> \
- MembersOfThisObjectAndAncestors( \
- size_t local_var_additional_capacity) const override { \
- const webrtc::RTCStatsMemberInterface* local_var_members[] = { \
- __VA_ARGS__ \
- }; \
- size_t local_var_members_count = \
- sizeof(local_var_members) / sizeof(local_var_members[0]); \
- std::vector<const webrtc::RTCStatsMemberInterface*> local_var_members_vec =\
- parent_class::MembersOfThisObjectAndAncestors( \
- local_var_members_count + local_var_additional_capacity); \
- RTC_DCHECK_GE( \
- local_var_members_vec.capacity() - local_var_members_vec.size(), \
- local_var_members_count + local_var_additional_capacity); \
- local_var_members_vec.insert(local_var_members_vec.end(), \
- &local_var_members[0], \
- &local_var_members[local_var_members_count]); \
- return local_var_members_vec; \
- } \
- public:
-
-// Interface for |RTCStats| members, which have a name and a value of a type
-// defined in a subclass. Only the types listed in |Type| are supported, these
-// are implemented by |RTCStatsMember<T>|. The value of a member may be
-// undefined, the value can only be read if |is_defined|.
-class RTCStatsMemberInterface {
- public:
- // Member value types.
- enum Type {
- kInt32, // int32_t
- kUint32, // uint32_t
- kInt64, // int64_t
- kUint64, // uint64_t
- kDouble, // double
- kString, // std::string
-
- kSequenceInt32, // std::vector<int32_t>
- kSequenceUint32, // std::vector<uint32_t>
- kSequenceInt64, // std::vector<int64_t>
- kSequenceUint64, // std::vector<uint64_t>
- kSequenceDouble, // std::vector<double>
- kSequenceString, // std::vector<std::string>
- };
-
- virtual ~RTCStatsMemberInterface() {}
-
- const char* name() const { return name_; }
- virtual Type type() const = 0;
- virtual bool is_sequence() const = 0;
- virtual bool is_string() const = 0;
- bool is_defined() const { return is_defined_; }
- virtual std::string ValueToString() const = 0;
-
- template<typename T>
- const T& cast_to() const {
- RTC_DCHECK_EQ(type(), T::kType);
- return static_cast<const T&>(*this);
- }
-
- protected:
- RTCStatsMemberInterface(const char* name, bool is_defined)
- : name_(name), is_defined_(is_defined) {}
-
- const char* const name_;
- bool is_defined_;
-};
-
-// Template implementation of |RTCStatsMemberInterface|. Every possible |T| is
-// specialized in rtcstats.cc, using a different |T| results in a linker error
-// (undefined reference to |kType|). The supported types are the ones described
-// by |RTCStatsMemberInterface::Type|.
-template<typename T>
-class RTCStatsMember : public RTCStatsMemberInterface {
- public:
- static const Type kType;
-
- explicit RTCStatsMember(const char* name)
- : RTCStatsMemberInterface(name, false),
- value_() {}
- RTCStatsMember(const char* name, const T& value)
- : RTCStatsMemberInterface(name, true),
- value_(value) {}
- RTCStatsMember(const char* name, T&& value)
- : RTCStatsMemberInterface(name, true),
- value_(std::move(value)) {}
- explicit RTCStatsMember(const RTCStatsMember<T>& other)
- : RTCStatsMemberInterface(other.name_, other.is_defined_),
- value_(other.value_) {}
- explicit RTCStatsMember(RTCStatsMember<T>&& other)
- : RTCStatsMemberInterface(other.name_, other.is_defined_),
- value_(std::move(other.value_)) {}
-
- Type type() const override { return kType; }
- bool is_sequence() const override;
- bool is_string() const override;
- std::string ValueToString() const override;
-
- // Assignment operators.
- T& operator=(const T& value) {
- value_ = value;
- is_defined_ = true;
- return value_;
- }
- T& operator=(const T&& value) {
- value_ = std::move(value);
- is_defined_ = true;
- return value_;
- }
- T& operator=(const RTCStatsMember<T>& other) {
- RTC_DCHECK(other.is_defined_);
- value_ = other.is_defined_;
- is_defined_ = true;
- return value_;
- }
-
- // Value getters.
- T& operator*() {
- RTC_DCHECK(is_defined_);
- return value_;
- }
- const T& operator*() const {
- RTC_DCHECK(is_defined_);
- return value_;
- }
-
- // Value getters, arrow operator.
- T* operator->() {
- RTC_DCHECK(is_defined_);
- return &value_;
- }
- const T* operator->() const {
- RTC_DCHECK(is_defined_);
- return &value_;
- }
-
- private:
- T value_;
-};
-
-} // namespace webrtc
-
-#endif // WEBRTC_API_RTCSTATS_H_
+#include "webrtc/api/stats/rtcstats.h"
« no previous file with comments | « webrtc/api/peerconnectionproxy.h ('k') | webrtc/api/rtcstats_objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698