| Index: talk/app/webrtc/java/jni/peerconnection_jni.cc
|
| diff --git a/talk/app/webrtc/java/jni/peerconnection_jni.cc b/talk/app/webrtc/java/jni/peerconnection_jni.cc
|
| index c3ccb8ab8f565517c7e3a957e41829d0209c44d3..1db862172567a58b8149145e3a92a05178f9a9da 100644
|
| --- a/talk/app/webrtc/java/jni/peerconnection_jni.cc
|
| +++ b/talk/app/webrtc/java/jni/peerconnection_jni.cc
|
| @@ -76,6 +76,7 @@
|
| #include "webrtc/base/checks.h"
|
| #include "webrtc/base/logging.h"
|
| #include "webrtc/base/logsinks.h"
|
| +#include "webrtc/base/networkmonitor.h"
|
| #include "webrtc/base/messagequeue.h"
|
| #include "webrtc/base/ssladapter.h"
|
| #include "webrtc/base/stringutils.h"
|
| @@ -88,6 +89,7 @@
|
| #include "talk/app/webrtc/java/jni/androidmediadecoder_jni.h"
|
| #include "talk/app/webrtc/java/jni/androidmediaencoder_jni.h"
|
| #include "talk/app/webrtc/java/jni/androidvideocapturer_jni.h"
|
| +#include "talk/app/webrtc/java/jni/androidnetworkmonitor_jni.h"
|
| #include "webrtc/modules/video_render/video_render_internal.h"
|
| #include "webrtc/system_wrappers/interface/logcat_trace_context.h"
|
| using webrtc::LogcatTraceContext;
|
| @@ -1023,6 +1025,7 @@ JOW(jboolean, PeerConnectionFactory_initializeAndroidGlobals)(
|
| jboolean video_hw_acceleration) {
|
| bool failure = false;
|
| video_hw_acceleration_enabled = video_hw_acceleration;
|
| + AndroidNetworkMonitor::SetAndroidContext(jni, context);
|
| if (!factory_static_initialized) {
|
| if (initialize_video) {
|
| failure |= webrtc::SetRenderAndroidVM(GetJVM());
|
| @@ -1063,18 +1066,29 @@ class OwnedFactoryAndThreads {
|
| Thread* signaling_thread,
|
| WebRtcVideoEncoderFactory* encoder_factory,
|
| WebRtcVideoDecoderFactory* decoder_factory,
|
| + rtc::NetworkMonitorFactory* network_monitor_factory,
|
| PeerConnectionFactoryInterface* factory)
|
| : worker_thread_(worker_thread),
|
| signaling_thread_(signaling_thread),
|
| encoder_factory_(encoder_factory),
|
| decoder_factory_(decoder_factory),
|
| + network_monitor_factory_(network_monitor_factory),
|
| factory_(factory) {}
|
|
|
| - ~OwnedFactoryAndThreads() { CHECK_RELEASE(factory_); }
|
| + ~OwnedFactoryAndThreads() {
|
| + CHECK_RELEASE(factory_);
|
| + if (network_monitor_factory_ != nullptr) {
|
| + rtc::NetworkMonitorFactory::ReleaseFactory(network_monitor_factory_);
|
| + }
|
| + }
|
|
|
| PeerConnectionFactoryInterface* factory() { return factory_; }
|
| WebRtcVideoEncoderFactory* encoder_factory() { return encoder_factory_; }
|
| WebRtcVideoDecoderFactory* decoder_factory() { return decoder_factory_; }
|
| + rtc::NetworkMonitorFactory* network_monitor_factory() {
|
| + return network_monitor_factory_;
|
| + }
|
| + void clear_network_monitor_factory() { network_monitor_factory_ = nullptr; }
|
| void InvokeJavaCallbacksOnFactoryThreads();
|
|
|
| private:
|
| @@ -1084,6 +1098,7 @@ class OwnedFactoryAndThreads {
|
| const scoped_ptr<Thread> signaling_thread_;
|
| WebRtcVideoEncoderFactory* encoder_factory_;
|
| WebRtcVideoDecoderFactory* decoder_factory_;
|
| + rtc::NetworkMonitorFactory* network_monitor_factory_;
|
| PeerConnectionFactoryInterface* factory_; // Const after ctor except dtor.
|
| };
|
|
|
| @@ -1132,11 +1147,15 @@ JOW(jlong, PeerConnectionFactory_nativeCreatePeerConnectionFactory)(
|
| << "Failed to start threads";
|
| WebRtcVideoEncoderFactory* encoder_factory = nullptr;
|
| WebRtcVideoDecoderFactory* decoder_factory = nullptr;
|
| + rtc::NetworkMonitorFactory* network_monitor_factory = nullptr;
|
| +
|
| #if defined(ANDROID) && !defined(WEBRTC_CHROMIUM_BUILD)
|
| if (video_hw_acceleration_enabled) {
|
| encoder_factory = new MediaCodecVideoEncoderFactory();
|
| decoder_factory = new MediaCodecVideoDecoderFactory();
|
| }
|
| + network_monitor_factory = new AndroidNetworkMonitorFactory();
|
| + rtc::NetworkMonitorFactory::SetFactory(network_monitor_factory);
|
| #endif
|
| rtc::scoped_refptr<PeerConnectionFactoryInterface> factory(
|
| webrtc::CreatePeerConnectionFactory(worker_thread,
|
| @@ -1149,7 +1168,7 @@ JOW(jlong, PeerConnectionFactory_nativeCreatePeerConnectionFactory)(
|
| OwnedFactoryAndThreads* owned_factory = new OwnedFactoryAndThreads(
|
| worker_thread, signaling_thread,
|
| encoder_factory, decoder_factory,
|
| - factory.release());
|
| + network_monitor_factory, factory.release());
|
| owned_factory->InvokeJavaCallbacksOnFactoryThreads();
|
| return jlongFromPointer(owned_factory);
|
| }
|
| @@ -1247,13 +1266,29 @@ JOW(void, PeerConnectionFactory_nativeSetOptions)(
|
| bool disable_encryption =
|
| jni->GetBooleanField(options, disable_encryption_field);
|
|
|
| + jfieldID disable_network_monitor_field =
|
| + jni->GetFieldID(options_class, "disableNetworkMonitor", "Z");
|
| + bool disable_network_monitor =
|
| + jni->GetBooleanField(options, disable_network_monitor_field);
|
| +
|
| PeerConnectionFactoryInterface::Options options_to_set;
|
|
|
| // This doesn't necessarily match the c++ version of this struct; feel free
|
| // to add more parameters as necessary.
|
| options_to_set.network_ignore_mask = network_ignore_mask;
|
| options_to_set.disable_encryption = disable_encryption;
|
| + options_to_set.disable_network_monitor = disable_network_monitor;
|
| factory->SetOptions(options_to_set);
|
| +
|
| + if (disable_network_monitor) {
|
| + OwnedFactoryAndThreads* owner =
|
| + reinterpret_cast<OwnedFactoryAndThreads*>(native_factory);
|
| + if (owner->network_monitor_factory()) {
|
| + rtc::NetworkMonitorFactory::ReleaseFactory(
|
| + owner->network_monitor_factory());
|
| + owner->clear_network_monitor_factory();
|
| + }
|
| + }
|
| }
|
|
|
| JOW(void, PeerConnectionFactory_nativeSetVideoHwAccelerationOptions)(
|
|
|