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

Side by Side Diff: webrtc/sdk/android/src/jni/rtcstatscollectorcallbackwrapper.cc

Issue 2989323002: Revert of Break peerconnection_jni.cc into multiple files, in "pc" directory. (Closed)
Patch Set: Created 3 years, 4 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
OLDNEW
(Empty)
1 /*
2 * Copyright 2017 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include "webrtc/sdk/android/src/jni/rtcstatscollectorcallbackwrapper.h"
12
13 #include <string>
14 #include <vector>
15
16 #include "webrtc/sdk/android/src/jni/classreferenceholder.h"
17
18 namespace webrtc_jni {
19
20 RTCStatsCollectorCallbackWrapper::RTCStatsCollectorCallbackWrapper(
21 JNIEnv* jni,
22 jobject j_callback)
23 : j_callback_global_(jni, j_callback),
24 j_callback_class_(jni, GetObjectClass(jni, j_callback)),
25 j_stats_report_class_(FindClass(jni, "org/webrtc/RTCStatsReport")),
26 j_stats_report_ctor_(GetMethodID(jni,
27 j_stats_report_class_,
28 "<init>",
29 "(JLjava/util/Map;)V")),
30 j_stats_class_(FindClass(jni, "org/webrtc/RTCStats")),
31 j_stats_ctor_(GetMethodID(
32 jni,
33 j_stats_class_,
34 "<init>",
35 "(JLjava/lang/String;Ljava/lang/String;Ljava/util/Map;)V")),
36 j_linked_hash_map_class_(FindClass(jni, "java/util/LinkedHashMap")),
37 j_linked_hash_map_ctor_(
38 GetMethodID(jni, j_linked_hash_map_class_, "<init>", "()V")),
39 j_linked_hash_map_put_(GetMethodID(
40 jni,
41 j_linked_hash_map_class_,
42 "put",
43 "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;")),
44 j_boolean_class_(FindClass(jni, "java/lang/Boolean")),
45 j_boolean_ctor_(GetMethodID(jni, j_boolean_class_, "<init>", "(Z)V")),
46 j_integer_class_(FindClass(jni, "java/lang/Integer")),
47 j_integer_ctor_(GetMethodID(jni, j_integer_class_, "<init>", "(I)V")),
48 j_long_class_(FindClass(jni, "java/lang/Long")),
49 j_long_ctor_(GetMethodID(jni, j_long_class_, "<init>", "(J)V")),
50 j_big_integer_class_(FindClass(jni, "java/math/BigInteger")),
51 j_big_integer_ctor_(GetMethodID(jni,
52 j_big_integer_class_,
53 "<init>",
54 "(Ljava/lang/String;)V")),
55 j_double_class_(FindClass(jni, "java/lang/Double")),
56 j_double_ctor_(GetMethodID(jni, j_double_class_, "<init>", "(D)V")),
57 j_string_class_(FindClass(jni, "java/lang/String")) {}
58
59 void RTCStatsCollectorCallbackWrapper::OnStatsDelivered(
60 const rtc::scoped_refptr<const webrtc::RTCStatsReport>& report) {
61 JNIEnv* jni = AttachCurrentThreadIfNeeded();
62 ScopedLocalRefFrame local_ref_frame(jni);
63 jobject j_report = ReportToJava(jni, report);
64 jmethodID m = GetMethodID(jni, *j_callback_class_, "onStatsDelivered",
65 "(Lorg/webrtc/RTCStatsReport;)V");
66 jni->CallVoidMethod(*j_callback_global_, m, j_report);
67 CHECK_EXCEPTION(jni) << "error during CallVoidMethod";
68 }
69
70 jobject RTCStatsCollectorCallbackWrapper::ReportToJava(
71 JNIEnv* jni,
72 const rtc::scoped_refptr<const webrtc::RTCStatsReport>& report) {
73 jobject j_stats_map =
74 jni->NewObject(j_linked_hash_map_class_, j_linked_hash_map_ctor_);
75 CHECK_EXCEPTION(jni) << "error during NewObject";
76 for (const webrtc::RTCStats& stats : *report) {
77 // Create a local reference frame for each RTCStats, since there is a
78 // maximum number of references that can be created in one frame.
79 ScopedLocalRefFrame local_ref_frame(jni);
80 jstring j_id = JavaStringFromStdString(jni, stats.id());
81 jobject j_stats = StatsToJava(jni, stats);
82 jni->CallObjectMethod(j_stats_map, j_linked_hash_map_put_, j_id, j_stats);
83 CHECK_EXCEPTION(jni) << "error during CallObjectMethod";
84 }
85 jobject j_report = jni->NewObject(j_stats_report_class_, j_stats_report_ctor_,
86 report->timestamp_us(), j_stats_map);
87 CHECK_EXCEPTION(jni) << "error during NewObject";
88 return j_report;
89 }
90
91 jobject RTCStatsCollectorCallbackWrapper::StatsToJava(
92 JNIEnv* jni,
93 const webrtc::RTCStats& stats) {
94 jstring j_type = JavaStringFromStdString(jni, stats.type());
95 jstring j_id = JavaStringFromStdString(jni, stats.id());
96 jobject j_members =
97 jni->NewObject(j_linked_hash_map_class_, j_linked_hash_map_ctor_);
98 for (const webrtc::RTCStatsMemberInterface* member : stats.Members()) {
99 if (!member->is_defined()) {
100 continue;
101 }
102 // Create a local reference frame for each member as well.
103 ScopedLocalRefFrame local_ref_frame(jni);
104 jstring j_name = JavaStringFromStdString(jni, member->name());
105 jobject j_member = MemberToJava(jni, member);
106 jni->CallObjectMethod(j_members, j_linked_hash_map_put_, j_name, j_member);
107 CHECK_EXCEPTION(jni) << "error during CallObjectMethod";
108 }
109 jobject j_stats =
110 jni->NewObject(j_stats_class_, j_stats_ctor_, stats.timestamp_us(),
111 j_type, j_id, j_members);
112 CHECK_EXCEPTION(jni) << "error during NewObject";
113 return j_stats;
114 }
115
116 jobject RTCStatsCollectorCallbackWrapper::MemberToJava(
117 JNIEnv* jni,
118 const webrtc::RTCStatsMemberInterface* member) {
119 switch (member->type()) {
120 case webrtc::RTCStatsMemberInterface::kBool: {
121 jobject value =
122 jni->NewObject(j_boolean_class_, j_boolean_ctor_,
123 *member->cast_to<webrtc::RTCStatsMember<bool>>());
124 CHECK_EXCEPTION(jni) << "error during NewObject";
125 return value;
126 }
127 case webrtc::RTCStatsMemberInterface::kInt32: {
128 jobject value =
129 jni->NewObject(j_integer_class_, j_integer_ctor_,
130 *member->cast_to<webrtc::RTCStatsMember<int32_t>>());
131 CHECK_EXCEPTION(jni) << "error during NewObject";
132 return value;
133 }
134 case webrtc::RTCStatsMemberInterface::kUint32: {
135 jobject value = jni->NewObject(
136 j_long_class_, j_long_ctor_,
137 (jlong)*member->cast_to<webrtc::RTCStatsMember<uint32_t>>());
138 CHECK_EXCEPTION(jni) << "error during NewObject";
139 return value;
140 }
141 case webrtc::RTCStatsMemberInterface::kInt64: {
142 jobject value =
143 jni->NewObject(j_long_class_, j_long_ctor_,
144 *member->cast_to<webrtc::RTCStatsMember<int64_t>>());
145 CHECK_EXCEPTION(jni) << "error during NewObject";
146 return value;
147 }
148 case webrtc::RTCStatsMemberInterface::kUint64: {
149 jobject value =
150 jni->NewObject(j_big_integer_class_, j_big_integer_ctor_,
151 JavaStringFromStdString(jni, member->ValueToString()));
152 CHECK_EXCEPTION(jni) << "error during NewObject";
153 return value;
154 }
155 case webrtc::RTCStatsMemberInterface::kDouble: {
156 jobject value =
157 jni->NewObject(j_double_class_, j_double_ctor_,
158 *member->cast_to<webrtc::RTCStatsMember<double>>());
159 CHECK_EXCEPTION(jni) << "error during NewObject";
160 return value;
161 }
162 case webrtc::RTCStatsMemberInterface::kString: {
163 return JavaStringFromStdString(
164 jni, *member->cast_to<webrtc::RTCStatsMember<std::string>>());
165 }
166 case webrtc::RTCStatsMemberInterface::kSequenceBool: {
167 const std::vector<bool>& values =
168 *member->cast_to<webrtc::RTCStatsMember<std::vector<bool>>>();
169 jobjectArray j_values =
170 jni->NewObjectArray(values.size(), j_boolean_class_, nullptr);
171 CHECK_EXCEPTION(jni) << "error during NewObjectArray";
172 for (size_t i = 0; i < values.size(); ++i) {
173 jobject value =
174 jni->NewObject(j_boolean_class_, j_boolean_ctor_, values[i]);
175 jni->SetObjectArrayElement(j_values, i, value);
176 CHECK_EXCEPTION(jni) << "error during SetObjectArrayElement";
177 }
178 return j_values;
179 }
180 case webrtc::RTCStatsMemberInterface::kSequenceInt32: {
181 const std::vector<int32_t>& values =
182 *member->cast_to<webrtc::RTCStatsMember<std::vector<int32_t>>>();
183 jobjectArray j_values =
184 jni->NewObjectArray(values.size(), j_integer_class_, nullptr);
185 CHECK_EXCEPTION(jni) << "error during NewObjectArray";
186 for (size_t i = 0; i < values.size(); ++i) {
187 jobject value =
188 jni->NewObject(j_integer_class_, j_integer_ctor_, values[i]);
189 jni->SetObjectArrayElement(j_values, i, value);
190 CHECK_EXCEPTION(jni) << "error during SetObjectArrayElement";
191 }
192 return j_values;
193 }
194 case webrtc::RTCStatsMemberInterface::kSequenceUint32: {
195 const std::vector<uint32_t>& values =
196 *member->cast_to<webrtc::RTCStatsMember<std::vector<uint32_t>>>();
197 jobjectArray j_values =
198 jni->NewObjectArray(values.size(), j_long_class_, nullptr);
199 CHECK_EXCEPTION(jni) << "error during NewObjectArray";
200 for (size_t i = 0; i < values.size(); ++i) {
201 jobject value = jni->NewObject(j_long_class_, j_long_ctor_, values[i]);
202 jni->SetObjectArrayElement(j_values, i, value);
203 CHECK_EXCEPTION(jni) << "error during SetObjectArrayElement";
204 }
205 return j_values;
206 }
207 case webrtc::RTCStatsMemberInterface::kSequenceInt64: {
208 const std::vector<int64_t>& values =
209 *member->cast_to<webrtc::RTCStatsMember<std::vector<int64_t>>>();
210 jobjectArray j_values =
211 jni->NewObjectArray(values.size(), j_long_class_, nullptr);
212 CHECK_EXCEPTION(jni) << "error during NewObjectArray";
213 for (size_t i = 0; i < values.size(); ++i) {
214 jobject value = jni->NewObject(j_long_class_, j_long_ctor_, values[i]);
215 jni->SetObjectArrayElement(j_values, i, value);
216 CHECK_EXCEPTION(jni) << "error during SetObjectArrayElement";
217 }
218 return j_values;
219 }
220 case webrtc::RTCStatsMemberInterface::kSequenceUint64: {
221 const std::vector<uint64_t>& values =
222 *member->cast_to<webrtc::RTCStatsMember<std::vector<uint64_t>>>();
223 jobjectArray j_values =
224 jni->NewObjectArray(values.size(), j_big_integer_class_, nullptr);
225 CHECK_EXCEPTION(jni) << "error during NewObjectArray";
226 for (size_t i = 0; i < values.size(); ++i) {
227 jobject value = jni->NewObject(
228 j_big_integer_class_, j_big_integer_ctor_,
229 JavaStringFromStdString(jni, rtc::ToString(values[i])));
230 jni->SetObjectArrayElement(j_values, i, value);
231 CHECK_EXCEPTION(jni) << "error during SetObjectArrayElement";
232 }
233 return j_values;
234 }
235 case webrtc::RTCStatsMemberInterface::kSequenceDouble: {
236 const std::vector<double>& values =
237 *member->cast_to<webrtc::RTCStatsMember<std::vector<double>>>();
238 jobjectArray j_values =
239 jni->NewObjectArray(values.size(), j_double_class_, nullptr);
240 CHECK_EXCEPTION(jni) << "error during NewObjectArray";
241 for (size_t i = 0; i < values.size(); ++i) {
242 jobject value =
243 jni->NewObject(j_double_class_, j_double_ctor_, values[i]);
244 jni->SetObjectArrayElement(j_values, i, value);
245 CHECK_EXCEPTION(jni) << "error during SetObjectArrayElement";
246 }
247 return j_values;
248 }
249 case webrtc::RTCStatsMemberInterface::kSequenceString: {
250 const std::vector<std::string>& values =
251 *member->cast_to<webrtc::RTCStatsMember<std::vector<std::string>>>();
252 jobjectArray j_values =
253 jni->NewObjectArray(values.size(), j_string_class_, nullptr);
254 CHECK_EXCEPTION(jni) << "error during NewObjectArray";
255 for (size_t i = 0; i < values.size(); ++i) {
256 jni->SetObjectArrayElement(j_values, i,
257 JavaStringFromStdString(jni, values[i]));
258 CHECK_EXCEPTION(jni) << "error during SetObjectArrayElement";
259 }
260 return j_values;
261 }
262 }
263 RTC_NOTREACHED();
264 return nullptr;
265 }
266
267 } // namespace webrtc_jni
OLDNEW
« no previous file with comments | « webrtc/sdk/android/src/jni/rtcstatscollectorcallbackwrapper.h ('k') | webrtc/sdk/android/src/jni/video_jni.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698