OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "content/renderer/media/webrtc/rtc_stats.h" |
| 6 |
| 7 #include "base/logging.h" |
| 8 #include "base/time/time.h" |
| 9 #include "third_party/webrtc/api/rtcstats.h" |
| 10 |
| 11 namespace content { |
| 12 |
| 13 RTCStatsReport::RTCStatsReport( |
| 14 const scoped_refptr<const webrtc::RTCStatsReport>& stats_report) |
| 15 : stats_report_(stats_report), |
| 16 it_(stats_report_->begin()), |
| 17 end_(stats_report_->end()) { |
| 18 DCHECK(stats_report_); |
| 19 } |
| 20 |
| 21 RTCStatsReport::~RTCStatsReport() { |
| 22 } |
| 23 |
| 24 std::unique_ptr<blink::WebRTCStats> RTCStatsReport::next() { |
| 25 if (it_ == end_) |
| 26 return std::unique_ptr<blink::WebRTCStats>(); |
| 27 const webrtc::RTCStats& next = *it_; |
| 28 ++it_; |
| 29 return std::unique_ptr<blink::WebRTCStats>( |
| 30 new RTCStats(stats_report_, &next)); |
| 31 } |
| 32 |
| 33 RTCStats::RTCStats( |
| 34 const scoped_refptr<const webrtc::RTCStatsReport>& stats_owner, |
| 35 const webrtc::RTCStats* stats) |
| 36 : stats_owner_(stats_owner), |
| 37 stats_(stats), |
| 38 stats_members_(stats->Members()) { |
| 39 DCHECK(stats_owner_); |
| 40 DCHECK(stats_); |
| 41 DCHECK(stats_owner_->Get(stats_->id())); |
| 42 } |
| 43 |
| 44 RTCStats::~RTCStats() { |
| 45 } |
| 46 |
| 47 blink::WebString RTCStats::id() const { |
| 48 return blink::WebString::fromUTF8(stats_->id()); |
| 49 } |
| 50 |
| 51 blink::WebString RTCStats::type() const { |
| 52 return blink::WebString::fromUTF8(stats_->type()); |
| 53 } |
| 54 |
| 55 double RTCStats::timestamp() const { |
| 56 return stats_->timestamp_us() / static_cast<double>( |
| 57 base::Time::kMicrosecondsPerMillisecond); |
| 58 } |
| 59 |
| 60 size_t RTCStats::membersCount() const { |
| 61 return stats_members_.size(); |
| 62 } |
| 63 |
| 64 std::unique_ptr<blink::WebRTCStatsMember> RTCStats::getMember(size_t i) const { |
| 65 DCHECK_LT(i, stats_members_.size()); |
| 66 return std::unique_ptr<blink::WebRTCStatsMember>( |
| 67 new RTCStatsMember(stats_owner_, stats_members_[i])); |
| 68 } |
| 69 |
| 70 RTCStatsMember::RTCStatsMember( |
| 71 const scoped_refptr<const webrtc::RTCStatsReport>& stats_owner, |
| 72 const webrtc::RTCStatsMemberInterface* member) |
| 73 : stats_owner_(stats_owner), |
| 74 member_(member) { |
| 75 DCHECK(stats_owner_); |
| 76 DCHECK(member_); |
| 77 } |
| 78 |
| 79 RTCStatsMember::~RTCStatsMember() { |
| 80 } |
| 81 |
| 82 blink::WebString RTCStatsMember::name() const { |
| 83 return blink::WebString::fromUTF8(member_->name()); |
| 84 } |
| 85 |
| 86 blink::WebRTCStatsMemberType RTCStatsMember::type() const { |
| 87 switch (member_->type()) { |
| 88 case webrtc::RTCStatsMemberInterface::kInt32: |
| 89 return blink::WebRTCStatsMemberTypeInt32; |
| 90 case webrtc::RTCStatsMemberInterface::kUint32: |
| 91 return blink::WebRTCStatsMemberTypeUint32; |
| 92 case webrtc::RTCStatsMemberInterface::kInt64: |
| 93 return blink::WebRTCStatsMemberTypeInt64; |
| 94 case webrtc::RTCStatsMemberInterface::kUint64: |
| 95 return blink::WebRTCStatsMemberTypeUint64; |
| 96 case webrtc::RTCStatsMemberInterface::kDouble: |
| 97 return blink::WebRTCStatsMemberTypeDouble; |
| 98 case webrtc::RTCStatsMemberInterface::kStaticString: |
| 99 case webrtc::RTCStatsMemberInterface::kString: |
| 100 return blink::WebRTCStatsMemberTypeString; |
| 101 case webrtc::RTCStatsMemberInterface::kSequenceInt32: |
| 102 return blink::WebRTCStatsMemberTypeSequenceInt32; |
| 103 case webrtc::RTCStatsMemberInterface::kSequenceUint32: |
| 104 return blink::WebRTCStatsMemberTypeSequenceUint32; |
| 105 case webrtc::RTCStatsMemberInterface::kSequenceInt64: |
| 106 return blink::WebRTCStatsMemberTypeSequenceInt64; |
| 107 case webrtc::RTCStatsMemberInterface::kSequenceUint64: |
| 108 return blink::WebRTCStatsMemberTypeSequenceUint64; |
| 109 case webrtc::RTCStatsMemberInterface::kSequenceDouble: |
| 110 return blink::WebRTCStatsMemberTypeSequenceDouble; |
| 111 case webrtc::RTCStatsMemberInterface::kSequenceStaticString: |
| 112 case webrtc::RTCStatsMemberInterface::kSequenceString: |
| 113 return blink::WebRTCStatsMemberTypeSequenceString; |
| 114 default: |
| 115 NOTREACHED(); |
| 116 return blink::WebRTCStatsMemberTypeSequenceInt32; |
| 117 } |
| 118 } |
| 119 |
| 120 int32_t RTCStatsMember::valueInt32() const { |
| 121 return *member_->cast_to<webrtc::RTCStatsMember<int32_t>>(); |
| 122 } |
| 123 |
| 124 uint32_t RTCStatsMember::valueUint32() const { |
| 125 return *member_->cast_to<webrtc::RTCStatsMember<uint32_t>>(); |
| 126 } |
| 127 |
| 128 int64_t RTCStatsMember::valueInt64() const { |
| 129 return *member_->cast_to<webrtc::RTCStatsMember<int64_t>>(); |
| 130 } |
| 131 |
| 132 uint64_t RTCStatsMember::valueUint64() const { |
| 133 return *member_->cast_to<webrtc::RTCStatsMember<uint64_t>>(); |
| 134 } |
| 135 |
| 136 double RTCStatsMember::valueDouble() const { |
| 137 return *member_->cast_to<webrtc::RTCStatsMember<double>>(); |
| 138 } |
| 139 |
| 140 blink::WebString RTCStatsMember::valueString() const { |
| 141 switch (member_->type()) { |
| 142 case webrtc::RTCStatsMemberInterface::kStaticString: |
| 143 return blink::WebString::fromUTF8( |
| 144 *member_->cast_to<webrtc::RTCStatsMember<const char*>>()); |
| 145 case webrtc::RTCStatsMemberInterface::kString: |
| 146 return blink::WebString::fromUTF8( |
| 147 *member_->cast_to<webrtc::RTCStatsMember<std::string>>()); |
| 148 default: |
| 149 NOTREACHED(); |
| 150 return blink::WebString(); |
| 151 } |
| 152 } |
| 153 |
| 154 blink::WebVector<int32_t> RTCStatsMember::valueSequenceInt32() const { |
| 155 return blink::WebVector<int32_t>( |
| 156 *member_->cast_to<webrtc::RTCStatsMember<std::vector<int32_t>>>()); |
| 157 } |
| 158 |
| 159 blink::WebVector<uint32_t> RTCStatsMember::valueSequenceUint32() const { |
| 160 return blink::WebVector<uint32_t>( |
| 161 *member_->cast_to<webrtc::RTCStatsMember<std::vector<uint32_t>>>()); |
| 162 } |
| 163 |
| 164 blink::WebVector<int64_t> RTCStatsMember::valueSequenceInt64() const { |
| 165 return blink::WebVector<int64_t>( |
| 166 *member_->cast_to<webrtc::RTCStatsMember<std::vector<int64_t>>>()); |
| 167 } |
| 168 |
| 169 blink::WebVector<uint64_t> RTCStatsMember::valueSequenceUint64() const { |
| 170 return blink::WebVector<uint64_t>( |
| 171 *member_->cast_to<webrtc::RTCStatsMember<std::vector<uint64_t>>>()); |
| 172 } |
| 173 |
| 174 blink::WebVector<double> RTCStatsMember::valueSequenceDouble() const { |
| 175 return blink::WebVector<double>( |
| 176 *member_->cast_to<webrtc::RTCStatsMember<std::vector<double>>>()); |
| 177 } |
| 178 |
| 179 blink::WebVector<blink::WebString> RTCStatsMember::valueSequenceString() const { |
| 180 switch (member_->type()) { |
| 181 case webrtc::RTCStatsMemberInterface::kStaticString: |
| 182 { |
| 183 const std::vector<const char*>& sequence = |
| 184 *member_->cast_to< |
| 185 webrtc::RTCStatsMember<std::vector<const char*>>>(); |
| 186 blink::WebVector<blink::WebString> web_sequence(sequence.size()); |
| 187 for (size_t i = 0; i < sequence.size(); ++i) |
| 188 web_sequence[i] = blink::WebString::fromUTF8(sequence[i]); |
| 189 return web_sequence; |
| 190 } |
| 191 case webrtc::RTCStatsMemberInterface::kString: |
| 192 { |
| 193 const std::vector<std::string>& sequence = |
| 194 *member_->cast_to< |
| 195 webrtc::RTCStatsMember<std::vector<std::string>>>(); |
| 196 blink::WebVector<blink::WebString> web_sequence(sequence.size()); |
| 197 for (size_t i = 0; i < sequence.size(); ++i) |
| 198 web_sequence[i] = blink::WebString::fromUTF8(sequence[i]); |
| 199 return web_sequence; |
| 200 } |
| 201 default: |
| 202 NOTREACHED(); |
| 203 return blink::WebVector<blink::WebString>(); |
| 204 } |
| 205 } |
| 206 |
| 207 } // namespace content |
OLD | NEW |