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..242b0b607fa1c4bd70722467f30b7cf9d7b87c7b |
--- /dev/null |
+++ b/content/renderer/media/webrtc/rtc_stats.cc |
@@ -0,0 +1,151 @@ |
+// 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 { |
+ |
+RTCStats::RTCStats(scoped_refptr<const webrtc::RTCStatsReport> stats_owner, |
+ const webrtc::RTCStats* stats) |
+ : stats_owner_(stats_owner), |
+ 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 members_.size(); |
+} |
+ |
+std::unique_ptr<blink::WebRTCStatsMember> RTCStats::getMember(size_t i) const { |
+ DCHECK_LT(i, members_.size()); |
+ return std::unique_ptr<blink::WebRTCStatsMember>( |
+ new RTCStatsMember(members_[i])); |
+} |
+ |
+RTCStatsMember::RTCStatsMember(const webrtc::RTCStatsMemberInterface* member) |
+ : member_(member) { |
+ DCHECK(member_); |
+} |
+ |
+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: |
+ return blink::WebRTCStatsMemberTypeStaticString; |
+ 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: |
+ return blink::WebRTCStatsMemberTypeSequenceStaticString; |
+ 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>>(); |
+} |
+ |
+const char* RTCStatsMember::valueStaticString() const { |
+ return *member_->cast_to<webrtc::RTCStatsMember<const char*>>(); |
+} |
+ |
+const std::string& RTCStatsMember::valueString() const { |
+ return *member_->cast_to<webrtc::RTCStatsMember<std::string>>(); |
+} |
+ |
+const std::vector<int32_t>& RTCStatsMember::valueSequenceInt32() const { |
+ return *member_->cast_to<webrtc::RTCStatsMember<std::vector<int32_t>>>(); |
+} |
+ |
+const std::vector<uint32_t>& RTCStatsMember::valueSequenceUint32() const { |
+ return *member_->cast_to<webrtc::RTCStatsMember<std::vector<uint32_t>>>(); |
+} |
+ |
+const std::vector<int64_t>& RTCStatsMember::valueSequenceInt64() const { |
+ return *member_->cast_to<webrtc::RTCStatsMember<std::vector<int64_t>>>(); |
+} |
+ |
+const std::vector<uint64_t>& RTCStatsMember::valueSequenceUint64() const { |
+ return *member_->cast_to<webrtc::RTCStatsMember<std::vector<uint64_t>>>(); |
+} |
+ |
+const std::vector<double>& RTCStatsMember::valueSequenceDouble() const { |
+ return *member_->cast_to<webrtc::RTCStatsMember<std::vector<double>>>(); |
+} |
+ |
+const std::vector<const char*>& RTCStatsMember::valueSequenceStaticString() |
+ const { |
+ return *member_->cast_to<webrtc::RTCStatsMember<std::vector<const char*>>>(); |
+} |
+ |
+const std::vector<std::string>& RTCStatsMember::valueSequenceString() const { |
+ return *member_->cast_to<webrtc::RTCStatsMember<std::vector<std::string>>>(); |
+} |
+ |
+} // namespace content |