Reland of Android Logging.java: Load native library only when needed (patchset #1 id:1 of https://codereview.webrtc.org/2816753002/ )
Reason for revert: Fix bug in original CL. Original issue's description: > Revert of Android Logging.java: Load native library only when needed (patchset #3 id:40001 of https://codereview.webrtc.org/2803203002/ ) > > Reason for revert: > Breaks C++ logs in Java apps. > > Original issue's description: > > Android Logging.java: Load native library only when needed > > > > Logging.java currently always tries to load jingle_peerconnection_so in > > the static section, but some clients don't want to use it. This CL loads > > jingle_peerconnection_so only when a client requests it by calling one > > of: > > * Logging.enableLogThreads > > * Logging.enableLogTimeStamps > > * Logging.enableTracing > > * Logging.enableLogToDebugOutput > > > > BUG=b/36410678 > > > > Review-Url: https://codereview.webrtc.org/2803203002 > > Cr-Commit-Position: refs/heads/master@{#17647} > > Committed:dee5eb14e1> > TBR=sakal@webrtc.org,glaznev@webrtc.org,noahric@chromium.org,magjed@webrtc.org > # Not skipping CQ checks because original CL landed more than 1 days ago. > BUG=b/36410678 > > Review-Url: https://codereview.webrtc.org/2816753002 > Cr-Commit-Position: refs/heads/master@{#17676} > Committed:6e4a4427dcTBR=sakal@webrtc.org,glaznev@webrtc.org,noahric@chromium.org,brandtr@webrtc.org # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=b/36410678 Review-Url: https://codereview.webrtc.org/2817593003 Cr-Commit-Position: refs/heads/master@{#17677}
This commit is contained in:
@ -16,24 +16,41 @@ import java.util.EnumSet;
|
|||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
/** Java wrapper for WebRTC logging. */
|
/**
|
||||||
|
* Java wrapper for WebRTC logging. Logging defaults to java.util.logging.Logger, but will switch to
|
||||||
|
* native logging (rtc::LogMessage) if one of the following static functions are called from the
|
||||||
|
* app:
|
||||||
|
* - Logging.enableLogThreads
|
||||||
|
* - Logging.enableLogTimeStamps
|
||||||
|
* - Logging.enableTracing
|
||||||
|
* - Logging.enableLogToDebugOutput
|
||||||
|
* Using native logging requires the presence of the jingle_peerconnection_so library.
|
||||||
|
*/
|
||||||
public class Logging {
|
public class Logging {
|
||||||
private static final Logger fallbackLogger = Logger.getLogger("org.webrtc.Logging");
|
private static final Logger fallbackLogger = createFallbackLogger();
|
||||||
private static volatile boolean tracingEnabled;
|
private static volatile boolean tracingEnabled;
|
||||||
private static volatile boolean loggingEnabled;
|
private static volatile boolean loggingEnabled;
|
||||||
private static volatile boolean nativeLibLoaded;
|
private static enum NativeLibStatus { UNINITIALIZED, LOADED, FAILED }
|
||||||
|
private static volatile NativeLibStatus nativeLibStatus = UNINITIALIZED;
|
||||||
|
|
||||||
static {
|
private static Logger createFallbackLogger() {
|
||||||
|
final Logger fallbackLogger = Logger.getLogger("org.webrtc.Logging");
|
||||||
|
fallbackLogger.setLevel(Level.ALL);
|
||||||
|
return fallbackLogger;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean loadNativeLibrary() {
|
||||||
|
if (nativeLibStatus == NativeLibStatus.UNINITIALIZED) {
|
||||||
try {
|
try {
|
||||||
System.loadLibrary("jingle_peerconnection_so");
|
System.loadLibrary("jingle_peerconnection_so");
|
||||||
nativeLibLoaded = true;
|
nativeLibStatus = NativeLibStatus.LOADED;
|
||||||
} catch (UnsatisfiedLinkError t) {
|
} catch (UnsatisfiedLinkError t) {
|
||||||
// If native logging is unavailable, log to system log.
|
nativeLibStatus = NativeLibStatus.FAILED;
|
||||||
fallbackLogger.setLevel(Level.ALL);
|
|
||||||
|
|
||||||
fallbackLogger.log(Level.WARNING, "Failed to load jingle_peerconnection_so: ", t);
|
fallbackLogger.log(Level.WARNING, "Failed to load jingle_peerconnection_so: ", t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return nativeLibStatus == NativeLibStatus.LOADED;
|
||||||
|
}
|
||||||
|
|
||||||
// Keep in sync with webrtc/common_types.h:TraceLevel.
|
// Keep in sync with webrtc/common_types.h:TraceLevel.
|
||||||
public enum TraceLevel {
|
public enum TraceLevel {
|
||||||
@ -63,7 +80,7 @@ public class Logging {
|
|||||||
public enum Severity { LS_SENSITIVE, LS_VERBOSE, LS_INFO, LS_WARNING, LS_ERROR, LS_NONE }
|
public enum Severity { LS_SENSITIVE, LS_VERBOSE, LS_INFO, LS_WARNING, LS_ERROR, LS_NONE }
|
||||||
|
|
||||||
public static void enableLogThreads() {
|
public static void enableLogThreads() {
|
||||||
if (!nativeLibLoaded) {
|
if (!loadNativeLibrary()) {
|
||||||
fallbackLogger.log(Level.WARNING, "Cannot enable log thread because native lib not loaded.");
|
fallbackLogger.log(Level.WARNING, "Cannot enable log thread because native lib not loaded.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -71,7 +88,7 @@ public class Logging {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void enableLogTimeStamps() {
|
public static void enableLogTimeStamps() {
|
||||||
if (!nativeLibLoaded) {
|
if (!loadNativeLibrary()) {
|
||||||
fallbackLogger.log(
|
fallbackLogger.log(
|
||||||
Level.WARNING, "Cannot enable log timestamps because native lib not loaded.");
|
Level.WARNING, "Cannot enable log timestamps because native lib not loaded.");
|
||||||
return;
|
return;
|
||||||
@ -83,7 +100,7 @@ public class Logging {
|
|||||||
// On Android, use "logcat:" for |path| to send output there.
|
// On Android, use "logcat:" for |path| to send output there.
|
||||||
// Note: this function controls the output of the WEBRTC_TRACE() macros.
|
// Note: this function controls the output of the WEBRTC_TRACE() macros.
|
||||||
public static synchronized void enableTracing(String path, EnumSet<TraceLevel> levels) {
|
public static synchronized void enableTracing(String path, EnumSet<TraceLevel> levels) {
|
||||||
if (!nativeLibLoaded) {
|
if (!loadNativeLibrary()) {
|
||||||
fallbackLogger.log(Level.WARNING, "Cannot enable tracing because native lib not loaded.");
|
fallbackLogger.log(Level.WARNING, "Cannot enable tracing because native lib not loaded.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -103,7 +120,7 @@ public class Logging {
|
|||||||
// output. On Android, the output will be directed to Logcat.
|
// output. On Android, the output will be directed to Logcat.
|
||||||
// Note: this function starts collecting the output of the LOG() macros.
|
// Note: this function starts collecting the output of the LOG() macros.
|
||||||
public static synchronized void enableLogToDebugOutput(Severity severity) {
|
public static synchronized void enableLogToDebugOutput(Severity severity) {
|
||||||
if (!nativeLibLoaded) {
|
if (!loadNativeLibrary()) {
|
||||||
fallbackLogger.log(Level.WARNING, "Cannot enable logging because native lib not loaded.");
|
fallbackLogger.log(Level.WARNING, "Cannot enable logging because native lib not loaded.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,6 +20,10 @@ import java.io.RandomAccessFile;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class FileVideoCapturer implements VideoCapturer {
|
public class FileVideoCapturer implements VideoCapturer {
|
||||||
|
static {
|
||||||
|
System.loadLibrary("jingle_peerconnection_so");
|
||||||
|
}
|
||||||
|
|
||||||
private interface VideoReader {
|
private interface VideoReader {
|
||||||
int getFrameWidth();
|
int getFrameWidth();
|
||||||
int getFrameHeight();
|
int getFrameHeight();
|
||||||
|
|||||||
@ -22,6 +22,10 @@ import java.util.ArrayList;
|
|||||||
* Can be used to save the video frames to file.
|
* Can be used to save the video frames to file.
|
||||||
*/
|
*/
|
||||||
public class VideoFileRenderer implements VideoRenderer.Callbacks {
|
public class VideoFileRenderer implements VideoRenderer.Callbacks {
|
||||||
|
static {
|
||||||
|
System.loadLibrary("jingle_peerconnection_so");
|
||||||
|
}
|
||||||
|
|
||||||
private static final String TAG = "VideoFileRenderer";
|
private static final String TAG = "VideoFileRenderer";
|
||||||
|
|
||||||
private final HandlerThread renderThread;
|
private final HandlerThread renderThread;
|
||||||
|
|||||||
Reference in New Issue
Block a user