summaryrefslogtreecommitdiffstats
path: root/base/android
diff options
context:
space:
mode:
authorepenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-23 23:10:10 +0000
committerepenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-23 23:10:10 +0000
commit2df62300923e8a866f8fb392d74d615993671112 (patch)
tree788af86e3ebb29f223d283e97ad4d1d270b81021 /base/android
parentc3ac87446a3964d40b17ee8178c175835f2ad5ae (diff)
downloadchromium_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')
-rw-r--r--base/android/java/src/org/chromium/base/TraceEvent.java25
-rw-r--r--base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java5
-rw-r--r--base/android/trace_event_binding.cc22
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) {