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

Side by Side Diff: content/renderer/media/webrtc/rtc_stats.cc

Issue 2319543002: WebRTCStats added for surfacing RTCStats from WebRTC to Blink. (Closed)
Patch Set: Addressed comments 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 unified diff | Download patch
« no previous file with comments | « content/renderer/media/webrtc/rtc_stats.h ('k') | third_party/WebKit/public/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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
OLDNEW
« no previous file with comments | « content/renderer/media/webrtc/rtc_stats.h ('k') | third_party/WebKit/public/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698