Android: Generate JNI code for RTCStats
Bug: webrtc:8278
Change-Id: I183cec54ec3e97894db7f26e365eb9941a1ab458
Reviewed-on: https://webrtc-review.googlesource.com/25660
Commit-Queue: Magnus Jedvert <magjed@webrtc.org>
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20879}
diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn
index c346563..967a3b4 100644
--- a/sdk/android/BUILD.gn
+++ b/sdk/android/BUILD.gn
@@ -282,6 +282,9 @@
"api/org/webrtc/MediaConstraints.java",
"api/org/webrtc/NetworkMonitor.java",
"api/org/webrtc/NetworkMonitorAutoDetect.java",
+ "api/org/webrtc/RTCStats.java",
+ "api/org/webrtc/RTCStatsCollectorCallback.java",
+ "api/org/webrtc/RTCStatsReport.java",
]
jni_package = ""
jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
diff --git a/sdk/android/api/org/webrtc/RTCStats.java b/sdk/android/api/org/webrtc/RTCStats.java
index 7a73376..7ad7634 100644
--- a/sdk/android/api/org/webrtc/RTCStats.java
+++ b/sdk/android/api/org/webrtc/RTCStats.java
@@ -103,4 +103,11 @@
builder.append(value);
}
}
+
+ // TODO(bugs.webrtc.org/8557) Use ctor directly with full Map type.
+ @SuppressWarnings("unchecked")
+ @CalledByNative
+ static RTCStats create(long timestampUs, String type, String id, Map members) {
+ return new RTCStats(timestampUs, type, id, members);
+ }
}
diff --git a/sdk/android/api/org/webrtc/RTCStatsCollectorCallback.java b/sdk/android/api/org/webrtc/RTCStatsCollectorCallback.java
index 027c158..dc8902c 100644
--- a/sdk/android/api/org/webrtc/RTCStatsCollectorCallback.java
+++ b/sdk/android/api/org/webrtc/RTCStatsCollectorCallback.java
@@ -13,5 +13,5 @@
/** Interface for receiving stats reports (see webrtc::RTCStatsCollectorCallback). */
public interface RTCStatsCollectorCallback {
/** Called when the stats report is ready. */
- public void onStatsDelivered(RTCStatsReport report);
+ @CalledByNative public void onStatsDelivered(RTCStatsReport report);
}
diff --git a/sdk/android/api/org/webrtc/RTCStatsReport.java b/sdk/android/api/org/webrtc/RTCStatsReport.java
index d4a9784..d4d90db 100644
--- a/sdk/android/api/org/webrtc/RTCStatsReport.java
+++ b/sdk/android/api/org/webrtc/RTCStatsReport.java
@@ -52,4 +52,11 @@
builder.append(" ] }");
return builder.toString();
}
+
+ // TODO(bugs.webrtc.org/8557) Use ctor directly with full Map type.
+ @SuppressWarnings("unchecked")
+ @CalledByNative
+ private static RTCStatsReport create(long timestampUs, Map stats) {
+ return new RTCStatsReport(timestampUs, stats);
+ }
}
diff --git a/sdk/android/src/jni/pc/rtcstatscollectorcallbackwrapper.cc b/sdk/android/src/jni/pc/rtcstatscollectorcallbackwrapper.cc
index e7e6495..2e892e5 100644
--- a/sdk/android/src/jni/pc/rtcstatscollectorcallbackwrapper.cc
+++ b/sdk/android/src/jni/pc/rtcstatscollectorcallbackwrapper.cc
@@ -13,6 +13,9 @@
#include <string>
#include <vector>
+#include "sdk/android/generated_peerconnection_jni/jni/RTCStatsCollectorCallback_jni.h"
+#include "sdk/android/generated_peerconnection_jni/jni/RTCStatsReport_jni.h"
+#include "sdk/android/generated_peerconnection_jni/jni/RTCStats_jni.h"
#include "sdk/android/src/jni/classreferenceholder.h"
namespace webrtc {
@@ -23,17 +26,6 @@
jobject j_callback)
: j_callback_global_(jni, j_callback),
j_callback_class_(jni, GetObjectClass(jni, j_callback)),
- j_stats_report_class_(FindClass(jni, "org/webrtc/RTCStatsReport")),
- j_stats_report_ctor_(GetMethodID(jni,
- j_stats_report_class_,
- "<init>",
- "(JLjava/util/Map;)V")),
- j_stats_class_(FindClass(jni, "org/webrtc/RTCStats")),
- j_stats_ctor_(GetMethodID(
- jni,
- j_stats_class_,
- "<init>",
- "(JLjava/lang/String;Ljava/lang/String;Ljava/util/Map;)V")),
j_linked_hash_map_class_(FindClass(jni, "java/util/LinkedHashMap")),
j_linked_hash_map_ctor_(
GetMethodID(jni, j_linked_hash_map_class_, "<init>", "()V")),
@@ -61,10 +53,8 @@
JNIEnv* jni = AttachCurrentThreadIfNeeded();
ScopedLocalRefFrame local_ref_frame(jni);
jobject j_report = ReportToJava(jni, report);
- jmethodID m = GetMethodID(jni, *j_callback_class_, "onStatsDelivered",
- "(Lorg/webrtc/RTCStatsReport;)V");
- jni->CallVoidMethod(*j_callback_global_, m, j_report);
- CHECK_EXCEPTION(jni) << "error during CallVoidMethod";
+ Java_RTCStatsCollectorCallback_onStatsDelivered(jni, *j_callback_global_,
+ j_report);
}
jobject RTCStatsCollectorCallbackWrapper::ReportToJava(
@@ -82,9 +72,8 @@
jni->CallObjectMethod(j_stats_map, j_linked_hash_map_put_, j_id, j_stats);
CHECK_EXCEPTION(jni) << "error during CallObjectMethod";
}
- jobject j_report = jni->NewObject(j_stats_report_class_, j_stats_report_ctor_,
- report->timestamp_us(), j_stats_map);
- CHECK_EXCEPTION(jni) << "error during NewObject";
+ jobject j_report =
+ Java_RTCStatsReport_create(jni, report->timestamp_us(), j_stats_map);
return j_report;
}
@@ -106,8 +95,7 @@
CHECK_EXCEPTION(jni) << "error during CallObjectMethod";
}
jobject j_stats =
- jni->NewObject(j_stats_class_, j_stats_ctor_, stats.timestamp_us(),
- j_type, j_id, j_members);
+ Java_RTCStats_create(jni, stats.timestamp_us(), j_type, j_id, j_members);
CHECK_EXCEPTION(jni) << "error during NewObject";
return j_stats;
}
diff --git a/sdk/android/src/jni/pc/rtcstatscollectorcallbackwrapper.h b/sdk/android/src/jni/pc/rtcstatscollectorcallbackwrapper.h
index e3b56df..8914a5d 100644
--- a/sdk/android/src/jni/pc/rtcstatscollectorcallbackwrapper.h
+++ b/sdk/android/src/jni/pc/rtcstatscollectorcallbackwrapper.h
@@ -38,10 +38,6 @@
const ScopedGlobalRef<jobject> j_callback_global_;
const ScopedGlobalRef<jclass> j_callback_class_;
- const jclass j_stats_report_class_;
- const jmethodID j_stats_report_ctor_;
- const jclass j_stats_class_;
- const jmethodID j_stats_ctor_;
const jclass j_linked_hash_map_class_;
const jmethodID j_linked_hash_map_ctor_;
const jmethodID j_linked_hash_map_put_;