Add separate native library for instrumentationtests

Also adds api in PCF for specifying which library to load.

This is in preparation for a CL adding a native function
to be used only in tests.

Bug: webrtc:9225
Change-Id: I72eff272350404729424176758bfa81f7da81836
Reviewed-on: https://webrtc-review.googlesource.com/84125
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Commit-Queue: Paulina Hensman <phensman@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23663}
This commit is contained in:
Paulina Hensman
2018-06-19 16:14:50 +02:00
committed by Commit Bot
parent faf282700c
commit fa2b8d7456
17 changed files with 68 additions and 15 deletions

View File

@ -1045,6 +1045,7 @@ if (rtc_include_tests) {
"instrumentationtests/src/org/webrtc/Camera1CapturerUsingTextureTest.java",
"instrumentationtests/src/org/webrtc/Camera2CapturerTest.java",
"instrumentationtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java",
"instrumentationtests/src/org/webrtc/TestConstants.java",
"instrumentationtests/src/org/webrtc/DefaultVideoEncoderFactoryTest.java",
"instrumentationtests/src/org/webrtc/EglRendererTest.java",
"instrumentationtests/src/org/webrtc/FileVideoCapturerTest.java",
@ -1081,10 +1082,29 @@ if (rtc_include_tests) {
"//third_party/junit",
]
shared_libraries = [ "../../sdk/android:libjingle_peerconnection_so" ]
shared_libraries =
[ "../../sdk/android:libjingle_peerconnection_instrumentationtests_so" ]
}
}
rtc_shared_library("libjingle_peerconnection_instrumentationtests_so") {
testonly = true
sources = [
"src/jni/jni_onload.cc",
]
suppressed_configs += [ "//build/config/android:hide_all_but_jni_onload" ]
configs += [ "//build/config/android:hide_all_but_jni" ]
deps = [
":libjingle_peerconnection_jni",
":libjingle_peerconnection_metrics_default_jni",
"../../pc:libjingle_peerconnection",
"../../rtc_base:rtc_base",
]
output_extension = "so"
}
# The native API is currently experimental and may change without notice.
group("native_api") {
deps = [

View File

@ -41,15 +41,17 @@ public class PeerConnectionFactory {
final boolean enableInternalTracer;
final boolean enableVideoHwAcceleration;
final NativeLibraryLoader nativeLibraryLoader;
final String nativeLibraryName;
private InitializationOptions(Context applicationContext, String fieldTrials,
boolean enableInternalTracer, boolean enableVideoHwAcceleration,
NativeLibraryLoader nativeLibraryLoader) {
NativeLibraryLoader nativeLibraryLoader, String nativeLibraryName) {
this.applicationContext = applicationContext;
this.fieldTrials = fieldTrials;
this.enableInternalTracer = enableInternalTracer;
this.enableVideoHwAcceleration = enableVideoHwAcceleration;
this.nativeLibraryLoader = nativeLibraryLoader;
this.nativeLibraryName = nativeLibraryName;
}
public static Builder builder(Context applicationContext) {
@ -62,6 +64,7 @@ public class PeerConnectionFactory {
private boolean enableInternalTracer = false;
private boolean enableVideoHwAcceleration = true;
private NativeLibraryLoader nativeLibraryLoader = new NativeLibrary.DefaultLoader();
private String nativeLibraryName = "jingle_peerconnection_so";
Builder(Context applicationContext) {
this.applicationContext = applicationContext;
@ -86,10 +89,15 @@ public class PeerConnectionFactory {
this.nativeLibraryLoader = nativeLibraryLoader;
return this;
}
public Builder setNativeLibraryName(String nativeLibraryName) {
this.nativeLibraryName = nativeLibraryName;
return this;
}
public PeerConnectionFactory.InitializationOptions createInitializationOptions() {
return new PeerConnectionFactory.InitializationOptions(applicationContext, fieldTrials,
enableInternalTracer, enableVideoHwAcceleration, nativeLibraryLoader);
enableInternalTracer, enableVideoHwAcceleration, nativeLibraryLoader,
nativeLibraryName);
}
}
}
@ -193,7 +201,7 @@ public class PeerConnectionFactory {
*/
public static void initialize(InitializationOptions options) {
ContextUtils.initialize(options.applicationContext);
NativeLibrary.initialize(options.nativeLibraryLoader);
NativeLibrary.initialize(options.nativeLibraryLoader, options.nativeLibraryName);
nativeInitializeAndroidGlobals(options.enableVideoHwAcceleration);
nativeInitializeFieldTrials(options.fieldTrials);
if (options.enableInternalTracer && !internalTracerInitialized) {

View File

@ -334,6 +334,7 @@ class CameraVideoCapturerTestFixtures {
CameraVideoCapturerTestFixtures(TestObjectFactory testObjectFactory) {
PeerConnectionFactory.initialize(
PeerConnectionFactory.InitializationOptions.builder(testObjectFactory.getAppContext())
.setNativeLibraryName(TestConstants.NATIVE_LIBRARY)
.createInitializationOptions());
this.peerConnectionFactory = PeerConnectionFactory.builder().createPeerConnectionFactory();

View File

@ -64,7 +64,7 @@ public class DefaultVideoEncoderFactoryTest {
@Before
public void setUp() {
NativeLibrary.initialize(new NativeLibrary.DefaultLoader());
NativeLibrary.initialize(new NativeLibrary.DefaultLoader(), TestConstants.NATIVE_LIBRARY);
}
@SmallTest

View File

@ -115,6 +115,7 @@ public class EglRendererTest {
public void setUp() throws Exception {
PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions
.builder(InstrumentationRegistry.getTargetContext())
.setNativeLibraryName(TestConstants.NATIVE_LIBRARY)
.createInitializationOptions());
eglRenderer = new EglRenderer("TestRenderer: ");
eglRenderer.init(null /* sharedContext */, EglBase.CONFIG_RGBA, new GlRectDrawer());

View File

@ -61,7 +61,7 @@ public class FileVideoCapturerTest {
@Before
public void setUp() {
NativeLibrary.initialize(new NativeLibrary.DefaultLoader());
NativeLibrary.initialize(new NativeLibrary.DefaultLoader(), TestConstants.NATIVE_LIBRARY);
}
@Test

View File

@ -155,7 +155,7 @@ public final class HardwareVideoDecoderTest {
@Before
public void setUp() {
NativeLibrary.initialize(new NativeLibrary.DefaultLoader());
NativeLibrary.initialize(new NativeLibrary.DefaultLoader(), TestConstants.NATIVE_LIBRARY);
TEST_FRAMES = generateTestFrames();

View File

@ -354,7 +354,7 @@ public class HardwareVideoEncoderTest {
// # Tests
@Before
public void setUp() {
NativeLibrary.initialize(new NativeLibrary.DefaultLoader());
NativeLibrary.initialize(new NativeLibrary.DefaultLoader(), TestConstants.NATIVE_LIBRARY);
eglBase = new EglBase14(null, EglBase.CONFIG_PLAIN);
eglBase.createDummyPbufferSurface();

View File

@ -23,6 +23,7 @@ public class PeerConnectionFactoryTest {
public void testInitialize() {
PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions
.builder(InstrumentationRegistry.getTargetContext())
.setNativeLibraryName(TestConstants.NATIVE_LIBRARY)
.createInitializationOptions());
}
@ -31,9 +32,11 @@ public class PeerConnectionFactoryTest {
public void testInitializeTwice() {
PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions
.builder(InstrumentationRegistry.getTargetContext())
.setNativeLibraryName(TestConstants.NATIVE_LIBRARY)
.createInitializationOptions());
PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions
.builder(InstrumentationRegistry.getTargetContext())
.setNativeLibraryName(TestConstants.NATIVE_LIBRARY)
.createInitializationOptions());
}
@ -43,10 +46,12 @@ public class PeerConnectionFactoryTest {
PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions
.builder(InstrumentationRegistry.getTargetContext())
.setEnableInternalTracer(true)
.setNativeLibraryName(TestConstants.NATIVE_LIBRARY)
.createInitializationOptions());
PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions
.builder(InstrumentationRegistry.getTargetContext())
.setEnableInternalTracer(true)
.setNativeLibraryName(TestConstants.NATIVE_LIBRARY)
.createInitializationOptions());
}
@ -56,6 +61,7 @@ public class PeerConnectionFactoryTest {
PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions
.builder(InstrumentationRegistry.getTargetContext())
.setEnableInternalTracer(true)
.setNativeLibraryName(TestConstants.NATIVE_LIBRARY)
.createInitializationOptions());
PeerConnectionFactory.shutdownInternalTracer();
}

View File

@ -56,6 +56,7 @@ public class PeerConnectionTest {
public void setUp() {
PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions
.builder(InstrumentationRegistry.getTargetContext())
.setNativeLibraryName(TestConstants.NATIVE_LIBRARY)
.createInitializationOptions());
}

View File

@ -106,7 +106,7 @@ public class SurfaceTextureHelperTest {
@Before
public void setUp() {
// Load the JNI library for textureToYuv.
NativeLibrary.initialize(new NativeLibrary.DefaultLoader());
NativeLibrary.initialize(new NativeLibrary.DefaultLoader(), TestConstants.NATIVE_LIBRARY);
}
/**

View File

@ -0,0 +1,15 @@
/*
* Copyright 2018 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;
class TestConstants {
public static final String NATIVE_LIBRARY = "jingle_peerconnection_instrumentationtests_so";
}

View File

@ -31,7 +31,7 @@ import org.junit.runner.RunWith;
public class VideoFileRendererTest {
@Before
public void setUp() {
NativeLibrary.initialize(new NativeLibrary.DefaultLoader());
NativeLibrary.initialize(new NativeLibrary.DefaultLoader(), TestConstants.NATIVE_LIBRARY);
}
@Test

View File

@ -61,7 +61,7 @@ public class VideoFrameBufferTest {
@BeforeClass
public static void setUp() {
// Needed for JniCommon.nativeAllocateByteBuffer() to work, which is used from JavaI420Buffer.
System.loadLibrary("jingle_peerconnection_so");
System.loadLibrary(TestConstants.NATIVE_LIBRARY);
}
private final BufferType bufferType;

View File

@ -27,6 +27,7 @@ public class WebRtcJniBootTest {
public void testJniLoadsWithoutError() throws InterruptedException {
PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions
.builder(InstrumentationRegistry.getTargetContext())
.setNativeLibraryName(TestConstants.NATIVE_LIBRARY)
.createInitializationOptions());
PeerConnectionFactory.builder().createPeerConnectionFactory();
}

View File

@ -55,7 +55,7 @@ public class YuvHelperTest {
@Before
public void setUp() {
NativeLibrary.initialize(new NativeLibrary.DefaultLoader());
NativeLibrary.initialize(new NativeLibrary.DefaultLoader(), TestConstants.NATIVE_LIBRARY);
}
@SmallTest

View File

@ -34,14 +34,14 @@ class NativeLibrary {
* Loads the native library. Clients should call PeerConnectionFactory.initialize. It will call
* this method for them.
*/
static void initialize(NativeLibraryLoader loader) {
static void initialize(NativeLibraryLoader loader, String libraryName) {
synchronized (lock) {
if (libraryLoaded) {
Logging.d(TAG, "Native library has already been loaded.");
return;
}
Logging.d(TAG, "Loading native library.");
libraryLoaded = loader.load("jingle_peerconnection_so");
Logging.d(TAG, "Loading native library: " + libraryName);
libraryLoaded = loader.load(libraryName);
}
}