Do not initialize internal tracer if it has already been initialized.
Bug: b/68989834
Change-Id: I7bb02d58cef5c14c6433d1fc7a95b46ff2b27f6f
Reviewed-on: https://webrtc-review.googlesource.com/23280
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Commit-Queue: Sami Kalliomäki <sakal@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20696}
diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn
index e1c4df2..b3a7894 100644
--- a/sdk/android/BUILD.gn
+++ b/sdk/android/BUILD.gn
@@ -568,6 +568,7 @@
"instrumentationtests/src/org/webrtc/HardwareVideoEncoderTest.java",
"instrumentationtests/src/org/webrtc/MediaCodecVideoEncoderTest.java",
"instrumentationtests/src/org/webrtc/NetworkMonitorTest.java",
+ "instrumentationtests/src/org/webrtc/PeerConnectionFactoryTest.java",
"instrumentationtests/src/org/webrtc/PeerConnectionTest.java",
"instrumentationtests/src/org/webrtc/RendererCommonTest.java",
"instrumentationtests/src/org/webrtc/SurfaceTextureHelperTest.java",
diff --git a/sdk/android/api/org/webrtc/PeerConnectionFactory.java b/sdk/android/api/org/webrtc/PeerConnectionFactory.java
index d4b158d..de09a7c 100644
--- a/sdk/android/api/org/webrtc/PeerConnectionFactory.java
+++ b/sdk/android/api/org/webrtc/PeerConnectionFactory.java
@@ -29,7 +29,9 @@
private static final String TAG = "PeerConnectionFactory";
private static final String VIDEO_CAPTURER_THREAD_NAME = "VideoCapturerThread";
+
private final long nativeFactory;
+ private static volatile boolean internalTracerInitialized = false;
private static Context applicationContext;
private static Thread networkThread;
private static Thread workerThread;
@@ -120,7 +122,7 @@
NativeLibrary.initialize(options.nativeLibraryLoader);
nativeInitializeAndroidGlobals(options.applicationContext, options.enableVideoHwAcceleration);
initializeFieldTrials(options.fieldTrials);
- if (options.enableInternalTracer) {
+ if (options.enableInternalTracer && !internalTracerInitialized) {
initializeInternalTracer();
}
}
@@ -154,6 +156,17 @@
return true;
}
+ @Deprecated
+ public static void initializeInternalTracer() {
+ internalTracerInitialized = true;
+ nativeInitializeInternalTracer();
+ }
+
+ public static void shutdownInternalTracer() {
+ internalTracerInitialized = false;
+ nativeShutdownInternalTracer();
+ }
+
// Field trial initialization. Must be called before PeerConnectionFactory
// is created.
// Deprecated, use PeerConnectionFactory.initialize instead.
@@ -172,10 +185,10 @@
// Internal tracing initialization. Must be called before PeerConnectionFactory is created to
// prevent racing with tracing code.
// Deprecated, use PeerConnectionFactory.initialize instead.
- @Deprecated public static native void initializeInternalTracer();
+ private static native void nativeInitializeInternalTracer();
// Internal tracing shutdown, called to prevent resource leaks. Must be called after
// PeerConnectionFactory is gone to prevent races with code performing tracing.
- public static native void shutdownInternalTracer();
+ private static native void nativeShutdownInternalTracer();
// Start/stop internal capturing of internal tracing.
public static native boolean startInternalTracingCapture(String tracing_filename);
public static native void stopInternalTracingCapture();
diff --git a/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionFactoryTest.java b/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionFactoryTest.java
new file mode 100644
index 0000000..01e618d
--- /dev/null
+++ b/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionFactoryTest.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2017 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+package org.webrtc;
+
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class PeerConnectionFactoryTest {
+ @SmallTest
+ @Test
+ public void testInitialize() {
+ PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions
+ .builder(InstrumentationRegistry.getTargetContext())
+ .createInitializationOptions());
+ }
+
+ @SmallTest
+ @Test
+ public void testInitializeTwice() {
+ PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions
+ .builder(InstrumentationRegistry.getTargetContext())
+ .createInitializationOptions());
+ PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions
+ .builder(InstrumentationRegistry.getTargetContext())
+ .createInitializationOptions());
+ }
+
+ @SmallTest
+ @Test
+ public void testInitializeTwiceWithTracer() {
+ PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions
+ .builder(InstrumentationRegistry.getTargetContext())
+ .setEnableInternalTracer(true)
+ .createInitializationOptions());
+ PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions
+ .builder(InstrumentationRegistry.getTargetContext())
+ .setEnableInternalTracer(true)
+ .createInitializationOptions());
+ }
+
+ @SmallTest
+ @Test
+ public void testInitializeWithTracerAndShutdown() {
+ PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions
+ .builder(InstrumentationRegistry.getTargetContext())
+ .setEnableInternalTracer(true)
+ .createInitializationOptions());
+ PeerConnectionFactory.shutdownInternalTracer();
+ }
+}
diff --git a/sdk/android/src/jni/pc/peerconnectionfactory_jni.cc b/sdk/android/src/jni/pc/peerconnectionfactory_jni.cc
index a1b9b5e..e34d1fd 100644
--- a/sdk/android/src/jni/pc/peerconnectionfactory_jni.cc
+++ b/sdk/android/src/jni/pc/peerconnectionfactory_jni.cc
@@ -93,7 +93,7 @@
}
JNI_FUNCTION_DECLARATION(void,
- PeerConnectionFactory_initializeInternalTracer,
+ PeerConnectionFactory_nativeInitializeInternalTracer,
JNIEnv* jni,
jclass) {
rtc::tracing::SetupInternalTracer();
@@ -132,7 +132,7 @@
}
JNI_FUNCTION_DECLARATION(void,
- PeerConnectionFactory_shutdownInternalTracer,
+ PeerConnectionFactory_nativeShutdownInternalTracer,
JNIEnv* jni,
jclass) {
rtc::tracing::ShutdownInternalTracer();