From d609473b9c51141a2bba691c2b90b84ba28fee89 Mon Sep 17 00:00:00 2001 From: Byoungchan Lee Date: Thu, 16 Jun 2022 07:01:45 +0900 Subject: [PATCH] Move Java PeerConnectionFactory.fieldTrialsFindFullName to different file. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently, Java equivalent of webrtc::field_trial::FindFullName is in PeeerConnectionFactory, which belongs to peerconnection_java GN target. Move that method into a separate file and GN target to make it easier to use the fieldTrialsFindFullName method in other code. Bug: webrtc:13973 Change-Id: I4d7d30339883af76c1d066f72270c6caf9c64c49 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/261500 Reviewed-by: Xavier Lepaul‎ Commit-Queue: Xavier Lepaul‎ Cr-Commit-Position: refs/heads/main@{#37233} --- sdk/android/BUILD.gn | 42 +++++++++++++++++-- sdk/android/api/org/webrtc/FieldTrial.java | 26 ++++++++++++ .../api/org/webrtc/PeerConnectionFactory.java | 15 +++---- sdk/android/src/jni/field_trial.cc | 27 ++++++++++++ .../src/jni/pc/peer_connection_factory.cc | 8 ---- 5 files changed, 98 insertions(+), 20 deletions(-) create mode 100644 sdk/android/api/org/webrtc/FieldTrial.java create mode 100644 sdk/android/src/jni/field_trial.cc diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn index c1ceea4db9..47aa7c3ab0 100644 --- a/sdk/android/BUILD.gn +++ b/sdk/android/BUILD.gn @@ -117,6 +117,7 @@ if (is_android) { ":base_jni", ":builtin_audio_codecs_jni", ":default_video_codec_factory_jni", + ":field_trial_jni", ":java_audio_device_module_jni", ":peerconnection_jni", ":video_jni", @@ -269,7 +270,6 @@ if (is_android) { "api/org/webrtc/MediaSource.java", "api/org/webrtc/MediaStream.java", "api/org/webrtc/MediaStreamTrack.java", - "api/org/webrtc/NativeLibraryLoader.java", "api/org/webrtc/NativePeerConnectionFactory.java", "api/org/webrtc/NetEqFactoryFactory.java", "api/org/webrtc/NetworkChangeDetector.java", @@ -302,7 +302,6 @@ if (is_android) { "api/org/webrtc/VideoTrack.java", "src/java/org/webrtc/NativeAndroidVideoTrackSource.java", "src/java/org/webrtc/NativeCapturerObserver.java", - "src/java/org/webrtc/NativeLibrary.java", ] deps = [ @@ -310,10 +309,12 @@ if (is_android) { ":base_java", ":builtin_audio_codecs_java", ":default_video_codec_factory_java", + ":field_trial_java", #TODO(bugs.webrtc.org/7452): Make injection mandatory and remove this dep. ":java_audio_device_module_java", ":logging_java", + ":native_library_java", ":swcodecs_java", ":video_api_java", ":video_java", @@ -327,6 +328,24 @@ if (is_android) { ] } + rtc_android_library("native_library_java") { + sources = [ + "api/org/webrtc/NativeLibraryLoader.java", + "src/java/org/webrtc/NativeLibrary.java", + ] + + deps = [ + ":logging_java", + "//rtc_base:base_java", + ] + } + + rtc_android_library("field_trial_java") { + sources = [ "api/org/webrtc/FieldTrial.java" ] + + deps = [ ":native_library_java" ] + } + # Modules, in alphabetical order. rtc_android_library("camera_java") { @@ -814,6 +833,16 @@ if (current_os == "linux" || is_android) { ] } + rtc_library("field_trial_jni") { + visibility = [ "*" ] + sources = [ "src/jni/field_trial.cc" ] + deps = [ + ":base_jni", + ":generated_field_trial_jni", + "../../system_wrappers:field_trial", + ] + } + # JNI target for java_audio_device_module_java rtc_library("java_audio_device_module_jni") { visibility = [ "*" ] @@ -1420,6 +1449,12 @@ if (current_os == "linux" || is_android) { jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h" } + generate_jni("generated_field_trial_jni") { + sources = [ "api/org/webrtc/FieldTrial.java" ] + namespace = "webrtc::jni" + jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h" + } + generate_jni("generated_java_audio_jni") { sources = [ "api/org/webrtc/audio/JavaAudioDeviceModule.java" ] namespace = "webrtc::jni" @@ -1525,6 +1560,7 @@ if (is_android) { ":hwcodecs_java", ":libjingle_peerconnection_java", ":libjingle_peerconnection_metrics_default_java", + ":native_library_java", ":peerconnection_java", ":surfaceviewrenderer_java", ":swcodecs_java", @@ -1633,7 +1669,6 @@ if (is_android) { ":native_test_jni_onload", ":opensles_audio_device_module", ":video_jni", - "../../api:field_trials_view", "../../api:scoped_refptr", "../../api/rtc_event_log:rtc_event_log_factory", "../../api/task_queue:default_task_queue_factory", @@ -1688,6 +1723,7 @@ if (is_android) { deps = [ ":base_java", ":java_audio_device_module_java", + ":native_library_java", ":peerconnection_java", ":video_api_java", ":video_java", diff --git a/sdk/android/api/org/webrtc/FieldTrial.java b/sdk/android/api/org/webrtc/FieldTrial.java new file mode 100644 index 0000000000..bac111de26 --- /dev/null +++ b/sdk/android/api/org/webrtc/FieldTrial.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2022 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; + +public class FieldTrial { + // Wrapper of webrtc::field_trial::FindFullName. Develop the feature with default behaviour off. + // Example usage: + // if (FieldTrial.fieldTrialsFindFullName("WebRTCExperiment").equals("Enabled")) { + // method1(); + // } else { + // method2(); + // } + public static String fieldTrialsFindFullName(String name) { + return NativeLibrary.isLoaded() ? nativeFindFieldTrialsFullName(name) : ""; + } + + private static native String nativeFindFieldTrialsFullName(String name); +} diff --git a/sdk/android/api/org/webrtc/PeerConnectionFactory.java b/sdk/android/api/org/webrtc/PeerConnectionFactory.java index ca67b3afc1..067c3cf95d 100644 --- a/sdk/android/api/org/webrtc/PeerConnectionFactory.java +++ b/sdk/android/api/org/webrtc/PeerConnectionFactory.java @@ -14,6 +14,7 @@ import android.content.Context; import android.os.Process; import androidx.annotation.Nullable; import java.util.List; +import org.webrtc.FieldTrial; import org.webrtc.Logging.Severity; import org.webrtc.PeerConnection; import org.webrtc.audio.AudioDeviceModule; @@ -335,15 +336,12 @@ public class PeerConnectionFactory { nativeInitializeFieldTrials(fieldTrialsInitString); } - // Wrapper of webrtc::field_trial::FindFullName. Develop the feature with default behaviour off. - // Example usage: - // if (PeerConnectionFactory.fieldTrialsFindFullName("WebRTCExperiment").equals("Enabled")) { - // method1(); - // } else { - // method2(); - // } + /** + * @deprecated Use {@link org.webrtc.FieldTrial#fieldTrialsFindFullName(String) } instead. + */ + @Deprecated public static String fieldTrialsFindFullName(String name) { - return NativeLibrary.isLoaded() ? nativeFindFieldTrialsFullName(name) : ""; + return FieldTrial.fieldTrialsFindFullName(name); } // Start/stop internal capturing of internal tracing. public static boolean startInternalTracingCapture(String tracingFilename) { @@ -582,7 +580,6 @@ public class PeerConnectionFactory { // (for example, at application startup time). private static native void nativeInitializeAndroidGlobals(); private static native void nativeInitializeFieldTrials(String fieldTrialsInitString); - private static native String nativeFindFieldTrialsFullName(String name); 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. diff --git a/sdk/android/src/jni/field_trial.cc b/sdk/android/src/jni/field_trial.cc new file mode 100644 index 0000000000..2c81c70658 --- /dev/null +++ b/sdk/android/src/jni/field_trial.cc @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2022 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. + */ + +#include "system_wrappers/include/field_trial.h" + +#include "sdk/android/generated_field_trial_jni/FieldTrial_jni.h" +#include "sdk/android/src/jni/jni_helpers.h" + +namespace webrtc { +namespace jni { + +static ScopedJavaLocalRef JNI_FieldTrial_FindFieldTrialsFullName( + JNIEnv* jni, + const JavaParamRef& j_name) { + return NativeToJavaString( + jni, field_trial::FindFullName(JavaToStdString(jni, j_name))); +} + +} // namespace jni +} // namespace webrtc diff --git a/sdk/android/src/jni/pc/peer_connection_factory.cc b/sdk/android/src/jni/pc/peer_connection_factory.cc index fafcad3caf..dced2551d9 100644 --- a/sdk/android/src/jni/pc/peer_connection_factory.cc +++ b/sdk/android/src/jni/pc/peer_connection_factory.cc @@ -213,14 +213,6 @@ static void JNI_PeerConnectionFactory_InitializeInternalTracer(JNIEnv* jni) { rtc::tracing::SetupInternalTracer(); } -static ScopedJavaLocalRef -JNI_PeerConnectionFactory_FindFieldTrialsFullName( - JNIEnv* jni, - const JavaParamRef& j_name) { - return NativeToJavaString( - jni, field_trial::FindFullName(JavaToStdString(jni, j_name))); -} - static jboolean JNI_PeerConnectionFactory_StartInternalTracingCapture( JNIEnv* jni, const JavaParamRef& j_event_tracing_filename) {