| Index: content/renderer/media/webrtc/rtc_stats.cc
|
| diff --git a/content/renderer/media/webrtc/rtc_stats.cc b/content/renderer/media/webrtc/rtc_stats.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f8356379d6ab85c59ac9e3fc6d13c76c72fd539f
|
| --- /dev/null
|
| +++ b/content/renderer/media/webrtc/rtc_stats.cc
|
| @@ -0,0 +1,207 @@
|
| +// Copyright (c) 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "content/renderer/media/webrtc/rtc_stats.h"
|
| +
|
| +#include "base/logging.h"
|
| +#include "base/time/time.h"
|
| +#include "third_party/webrtc/api/rtcstats.h"
|
| +
|
| +namespace content {
|
| +
|
| +RTCStatsReport::RTCStatsReport(
|
| + const scoped_refptr<const webrtc::RTCStatsReport>& stats_report)
|
| + : stats_report_(stats_report),
|
| + it_(stats_report_->begin()),
|
| + end_(stats_report_->end()) {
|
| + DCHECK(stats_report_);
|
| +}
|
| +
|
| +RTCStatsReport::~RTCStatsReport() {
|
| +}
|
| +
|
| +std::unique_ptr<blink::WebRTCStats> RTCStatsReport::next() {
|
| + if (it_ == end_)
|
| + return std::unique_ptr<blink::WebRTCStats>();
|
| + const webrtc::RTCStats& next = *it_;
|
| + ++it_;
|
| + return std::unique_ptr<blink::WebRTCStats>(
|
| + new RTCStats(stats_report_, &next));
|
| +}
|
| +
|
| +RTCStats::RTCStats(
|
| + const scoped_refptr<const webrtc::RTCStatsReport>& stats_owner,
|
| + const webrtc::RTCStats* stats)
|
| + : stats_owner_(stats_owner),
|
| + stats_(stats),
|
| + stats_members_(stats->Members()) {
|
| + DCHECK(stats_owner_);
|
| + DCHECK(stats_);
|
| + DCHECK(stats_owner_->Get(stats_->id()));
|
| +}
|
| +
|
| +RTCStats::~RTCStats() {
|
| +}
|
| +
|
| +blink::WebString RTCStats::id() const {
|
| + return blink::WebString::fromUTF8(stats_->id());
|
| +}
|
| +
|
| +blink::WebString RTCStats::type() const {
|
| + return blink::WebString::fromUTF8(stats_->type());
|
| +}
|
| +
|
| +double RTCStats::timestamp() const {
|
| + return stats_->timestamp_us() / static_cast<double>(
|
| + base::Time::kMicrosecondsPerMillisecond);
|
| +}
|
| +
|
| +size_t RTCStats::membersCount() const {
|
| + return stats_members_.size();
|
| +}
|
| +
|
| +std::unique_ptr<blink::WebRTCStatsMember> RTCStats::getMember(size_t i) const {
|
| + DCHECK_LT(i, stats_members_.size());
|
| + return std::unique_ptr<blink::WebRTCStatsMember>(
|
| + new RTCStatsMember(stats_owner_, stats_members_[i]));
|
| +}
|
| +
|
| +RTCStatsMember::RTCStatsMember(
|
| + const scoped_refptr<const webrtc::RTCStatsReport>& stats_owner,
|
| + const webrtc::RTCStatsMemberInterface* member)
|
| + : stats_owner_(stats_owner),
|
| + member_(member) {
|
| + DCHECK(stats_owner_);
|
| + DCHECK(member_);
|
| +}
|
| +
|
| +RTCStatsMember::~RTCStatsMember() {
|
| +}
|
| +
|
| +blink::WebString RTCStatsMember::name() const {
|
| + return blink::WebString::fromUTF8(member_->name());
|
| +}
|
| +
|
| +blink::WebRTCStatsMemberType RTCStatsMember::type() const {
|
| + switch (member_->type()) {
|
| + case webrtc::RTCStatsMemberInterface::kInt32:
|
| + return blink::WebRTCStatsMemberTypeInt32;
|
| + case webrtc::RTCStatsMemberInterface::kUint32:
|
| + return blink::WebRTCStatsMemberTypeUint32;
|
| + case webrtc::RTCStatsMemberInterface::kInt64:
|
| + return blink::WebRTCStatsMemberTypeInt64;
|
| + case webrtc::RTCStatsMemberInterface::kUint64:
|
| + return blink::WebRTCStatsMemberTypeUint64;
|
| + case webrtc::RTCStatsMemberInterface::kDouble:
|
| + return blink::WebRTCStatsMemberTypeDouble;
|
| + case webrtc::RTCStatsMemberInterface::kStaticString:
|
| + case webrtc::RTCStatsMemberInterface::kString:
|
| + return blink::WebRTCStatsMemberTypeString;
|
| + case webrtc::RTCStatsMemberInterface::kSequenceInt32:
|
| + return blink::WebRTCStatsMemberTypeSequenceInt32;
|
| + case webrtc::RTCStatsMemberInterface::kSequenceUint32:
|
| + return blink::WebRTCStatsMemberTypeSequenceUint32;
|
| + case webrtc::RTCStatsMemberInterface::kSequenceInt64:
|
| + return blink::WebRTCStatsMemberTypeSequenceInt64;
|
| + case webrtc::RTCStatsMemberInterface::kSequenceUint64:
|
| + return blink::WebRTCStatsMemberTypeSequenceUint64;
|
| + case webrtc::RTCStatsMemberInterface::kSequenceDouble:
|
| + return blink::WebRTCStatsMemberTypeSequenceDouble;
|
| + case webrtc::RTCStatsMemberInterface::kSequenceStaticString:
|
| + case webrtc::RTCStatsMemberInterface::kSequenceString:
|
| + return blink::WebRTCStatsMemberTypeSequenceString;
|
| + default:
|
| + NOTREACHED();
|
| + return blink::WebRTCStatsMemberTypeSequenceInt32;
|
| + }
|
| +}
|
| +
|
| +int32_t RTCStatsMember::valueInt32() const {
|
| + return *member_->cast_to<webrtc::RTCStatsMember<int32_t>>();
|
| +}
|
| +
|
| +uint32_t RTCStatsMember::valueUint32() const {
|
| + return *member_->cast_to<webrtc::RTCStatsMember<uint32_t>>();
|
| +}
|
| +
|
| +int64_t RTCStatsMember::valueInt64() const {
|
| + return *member_->cast_to<webrtc::RTCStatsMember<int64_t>>();
|
| +}
|
| +
|
| +uint64_t RTCStatsMember::valueUint64() const {
|
| + return *member_->cast_to<webrtc::RTCStatsMember<uint64_t>>();
|
| +}
|
| +
|
| +double RTCStatsMember::valueDouble() const {
|
| + return *member_->cast_to<webrtc::RTCStatsMember<double>>();
|
| +}
|
| +
|
| +blink::WebString RTCStatsMember::valueString() const {
|
| + switch (member_->type()) {
|
| + case webrtc::RTCStatsMemberInterface::kStaticString:
|
| + return blink::WebString::fromUTF8(
|
| + *member_->cast_to<webrtc::RTCStatsMember<const char*>>());
|
| + case webrtc::RTCStatsMemberInterface::kString:
|
| + return blink::WebString::fromUTF8(
|
| + *member_->cast_to<webrtc::RTCStatsMember<std::string>>());
|
| + default:
|
| + NOTREACHED();
|
| + return blink::WebString();
|
| + }
|
| +}
|
| +
|
| +blink::WebVector<int32_t> RTCStatsMember::valueSequenceInt32() const {
|
| + return blink::WebVector<int32_t>(
|
| + *member_->cast_to<webrtc::RTCStatsMember<std::vector<int32_t>>>());
|
| +}
|
| +
|
| +blink::WebVector<uint32_t> RTCStatsMember::valueSequenceUint32() const {
|
| + return blink::WebVector<uint32_t>(
|
| + *member_->cast_to<webrtc::RTCStatsMember<std::vector<uint32_t>>>());
|
| +}
|
| +
|
| +blink::WebVector<int64_t> RTCStatsMember::valueSequenceInt64() const {
|
| + return blink::WebVector<int64_t>(
|
| + *member_->cast_to<webrtc::RTCStatsMember<std::vector<int64_t>>>());
|
| +}
|
| +
|
| +blink::WebVector<uint64_t> RTCStatsMember::valueSequenceUint64() const {
|
| + return blink::WebVector<uint64_t>(
|
| + *member_->cast_to<webrtc::RTCStatsMember<std::vector<uint64_t>>>());
|
| +}
|
| +
|
| +blink::WebVector<double> RTCStatsMember::valueSequenceDouble() const {
|
| + return blink::WebVector<double>(
|
| + *member_->cast_to<webrtc::RTCStatsMember<std::vector<double>>>());
|
| +}
|
| +
|
| +blink::WebVector<blink::WebString> RTCStatsMember::valueSequenceString() const {
|
| + switch (member_->type()) {
|
| + case webrtc::RTCStatsMemberInterface::kStaticString:
|
| + {
|
| + const std::vector<const char*>& sequence =
|
| + *member_->cast_to<
|
| + webrtc::RTCStatsMember<std::vector<const char*>>>();
|
| + blink::WebVector<blink::WebString> web_sequence(sequence.size());
|
| + for (size_t i = 0; i < sequence.size(); ++i)
|
| + web_sequence[i] = blink::WebString::fromUTF8(sequence[i]);
|
| + return web_sequence;
|
| + }
|
| + case webrtc::RTCStatsMemberInterface::kString:
|
| + {
|
| + const std::vector<std::string>& sequence =
|
| + *member_->cast_to<
|
| + webrtc::RTCStatsMember<std::vector<std::string>>>();
|
| + blink::WebVector<blink::WebString> web_sequence(sequence.size());
|
| + for (size_t i = 0; i < sequence.size(); ++i)
|
| + web_sequence[i] = blink::WebString::fromUTF8(sequence[i]);
|
| + return web_sequence;
|
| + }
|
| + default:
|
| + NOTREACHED();
|
| + return blink::WebVector<blink::WebString>();
|
| + }
|
| +}
|
| +
|
| +} // namespace content
|
|
|