diff options
author | epenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-23 23:10:10 +0000 |
---|---|---|
committer | epenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-23 23:10:10 +0000 |
commit | 2df62300923e8a866f8fb392d74d615993671112 (patch) | |
tree | 788af86e3ebb29f223d283e97ad4d1d270b81021 /base/android | |
parent | c3ac87446a3964d40b17ee8178c175835f2ad5ae (diff) | |
download | chromium_src-2df62300923e8a866f8fb392d74d615993671112.zip chromium_src-2df62300923e8a866f8fb392d74d615993671112.tar.gz chromium_src-2df62300923e8a866f8fb392d74d615993671112.tar.bz2 |
TRACING: Enable java tracing from native also
Currently java traces are enabled in Java only when tracing
that is triggered from an Android intent. This flips it
around so we always notify Java to start tracing, no
matter how tracing is enabled.
The case that wasn't working in this case is the 'dev tools
tracing handler' which is how tracing is enabled for
telemetry.
BUG=None
Review URL: https://codereview.chromium.org/237853005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@265763 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/android')
3 files changed, 39 insertions, 13 deletions
diff --git a/base/android/java/src/org/chromium/base/TraceEvent.java b/base/android/java/src/org/chromium/base/TraceEvent.java index 3d11818..c7b81ee 100644 --- a/base/android/java/src/org/chromium/base/TraceEvent.java +++ b/base/android/java/src/org/chromium/base/TraceEvent.java @@ -162,16 +162,22 @@ public class TraceEvent { new IdleTracingLooperMonitor() : new BasicLooperMonitor(); } + /** - * Calling this will cause enabled() to be updated to match that set on the native side. - * The native library must be loaded before calling this method. + * Register an enabled observer, such that java traces are always enabled with native. */ - public static void setEnabledToMatchNative() { - boolean enabled = nativeTraceEnabled(); - if (sEnabled == enabled) return; - sEnabled = enabled; - ThreadUtils.getUiThreadLooper().setMessageLogging( - enabled() ? LooperMonitorHolder.sInstance : null); + public static void registerNativeEnabledObserver() { + nativeRegisterEnabledObserver(); + } + + /** + * Notification from native that tracing is enabled/disabled. + */ + @CalledByNative + public static void setEnabled(boolean enabled) { + sEnabled = enabled; + ThreadUtils.getUiThreadLooper().setMessageLogging( + enabled ? LooperMonitorHolder.sInstance : null); } /** @@ -186,7 +192,6 @@ public class TraceEvent { } else { nativeStopATrace(); } - setEnabledToMatchNative(); } /** @@ -341,7 +346,7 @@ public class TraceEvent { return stack[4].getClassName() + "." + stack[4].getMethodName(); } - private static native boolean nativeTraceEnabled(); + private static native void nativeRegisterEnabledObserver(); private static native void nativeStartATrace(); private static native void nativeStopATrace(); private static native void nativeInstant(String name, String arg); diff --git a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java index 0dc91dd..4c99512 100644 --- a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java +++ b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java @@ -215,7 +215,10 @@ public class LibraryLoader { // following calls). sInitialized = true; CommandLine.enableNativeProxy(); - TraceEvent.setEnabledToMatchNative(); + + // From now on, keep tracing in sync with native. + TraceEvent.registerNativeEnabledObserver(); + // Record histogram for the Chromium linker. if (Linker.isUsed()) { nativeRecordChromiumAndroidLinkerHistogram(Linker.loadAtFixedAddressFailed(), diff --git a/base/android/trace_event_binding.cc b/base/android/trace_event_binding.cc index f802f3d..e261411 100644 --- a/base/android/trace_event_binding.cc +++ b/base/android/trace_event_binding.cc @@ -9,6 +9,7 @@ #include <set> #include "base/debug/trace_event.h" +#include "base/debug/trace_event_impl.h" #include "base/lazy_instance.h" #include "jni/TraceEvent_jni.h" @@ -54,10 +55,27 @@ class TraceEventDataConverter { DISALLOW_COPY_AND_ASSIGN(TraceEventDataConverter); }; +class TraceEnabledObserver : public debug::TraceLog::EnabledStateObserver { + public: + virtual void OnTraceLogEnabled() OVERRIDE { + JNIEnv* env = base::android::AttachCurrentThread(); + base::android::Java_TraceEvent_setEnabled(env, true); + } + virtual void OnTraceLogDisabled() OVERRIDE { + JNIEnv* env = base::android::AttachCurrentThread(); + base::android::Java_TraceEvent_setEnabled(env, false); + } +}; + +base::LazyInstance<TraceEnabledObserver>::Leaky g_trace_enabled_state_observer_; + } // namespace -static jboolean TraceEnabled(JNIEnv* env, jclass clazz) { - return base::debug::TraceLog::GetInstance()->IsEnabled(); +static void RegisterEnabledObserver(JNIEnv* env, jclass clazz) { + bool enabled = debug::TraceLog::GetInstance()->IsEnabled(); + base::android::Java_TraceEvent_setEnabled(env, enabled); + debug::TraceLog::GetInstance()->AddEnabledStateObserver( + g_trace_enabled_state_observer_.Pointer()); } static void StartATrace(JNIEnv* env, jclass clazz) { |