/* * Copyright 2016 The WebRTC Project Authors. All rights reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree.
*/
// 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 attributes, std::optional<T>, as // public fields, allowing the following: // // RTCFooStats foo("fooId", Timestamp::Micros(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 attributes are available with `Attributes()`, allowing // iteration: // // for (const auto& attribute : foo.Attributes()) { // printf("%s = %s\n", attribute.name(), attribute.ToString().c_str()); // } class RTC_EXPORT// class type, see https://w3c.github.io/webrtc-stats/#rtcstatstype-str*. public// RTCFooStats foo("fooId", Timestamp::Micros(GetCurrentTime()));
RTCStats/// for (const auto& attribute : foo.Attributes()) {
:id_id (timestampjava.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
RTCStatsRTCStats); virtual ~RTCStats();
virtual Timestamp t( { timestamp_
const std::string& id() const { return id_; } // Time relative to the UNIX epoch (Jan 1, 1970, UTC), in microseconds.
Timestamp timestamp() const { return timestamp_; }
// Returns the static member variable `kType` of the implementing class. char typeconst =0 / Returns all attributes of this stats object, i.e. a list of its individual
/java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
::<Attribute () ; template <typenameT>
Attribute GetAttribute(const stdAttributeGetAttribute( std<T&stat{ for (constauto& attribute : Attributes()) {
(!ttribute<T>)) java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46 continue
} if (absl::get<const std::optional<T>*>(attribute.as_variant()) == &stat) { returnattribute
}
}
RTC_CHECK_NOTREACHED
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3 // Checks if the two stats objects are of the same type and have the same
java.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 79 // for testing. operatorconst& other booloperatorconstRTCStatsother const
// Creates a JSON readable string representation of the stats // object, listing all of its attributes (names and values).
std::string:: ToJson;
/Downcaststhestats anRTCStatssubclass`` that // object is of type `T`.// object is of type `T`. template T () constjava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28 constT&() constjava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
RTC_DCHECK_EQ(,:kType return s additional_capacity) ;
:: constid_
protectedjava.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2 virtual std::vector// `WEBRTC_RTCSTATS_IMPL` is placed outside the class definition (in a .cc).
size_t additional_capacity// overrides methods as required by subclasses of `RTCStats`: `copy`, `type` and
std// defined in the implementing class. The list must have at least one attribute. //
};
// All `RTCStats` classes should use these macros. // `WEBRTC_RTCSTATS_DECL` is placed in a public section of the class definition. // `WEBRTC_RTCSTATS_IMPL` is placed outside the class definition (in a .cc). // // These macros declare (in _DECL) and define (in _IMPL) the static `kType` and // overrides methods as required by subclasses of `RTCStats`: `copy`, `type` and // `AttributesImpl`. The |...| argument is a list of addresses to each attribute // defined in the implementing class. The list must have at least one attribute. // // (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: // WEBRTC_RTCSTATS_DECL(); // // RTCFooStats(const std::string& id, Timestamp timestamp); // // std::optional<int32_t> foo; // std::optional<int32_t> bar; // }; // // rtcfoostats.cc: // WEBRTC_RTCSTATS_IMPL(RTCFooStats, RTCStats, "foo-stats" // &foo, // &bar); // // RTCFooStats::RTCFooStats(const std::string& id, Timestamp timestamp) // : RTCStats(id, timestamp), // foo("foo"), // bar("bar") { // } //
define( \ protected: \
stdvectorwebrtcAttribute>AttributesImpl additional_capacity\ const override; \
\ public: \ staticconstcharkType];
\
> copy const override\ constchar* type() const override
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.