Chromium Code Reviews| Index: content/public/android/java/src/org/chromium/content/common/TraceEvent.java |
| diff --git a/content/public/android/java/src/org/chromium/content/common/TraceEvent.java b/content/public/android/java/src/org/chromium/content/common/TraceEvent.java |
| index 67c5413093dbb453698e1106eb46b1f7f8fc97ee..835aa38e2c6d839ed5f4e897bd0db0190f51c6d6 100644 |
| --- a/content/public/android/java/src/org/chromium/content/common/TraceEvent.java |
| +++ b/content/public/android/java/src/org/chromium/content/common/TraceEvent.java |
| @@ -37,6 +37,32 @@ public class TraceEvent { |
| } |
| } |
| + static { |
| + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { |
| + try { |
| + Class<?> systemPropertiesClass = Class.forName("android.os.SystemProperties"); |
| + Method addChangeCallbackMethod = systemPropertiesClass.getDeclaredMethod( |
| + "addChangeCallback", Runnable.class); |
| + addChangeCallbackMethod.invoke(null, new Runnable() { |
| + @Override |
| + public void run() { |
| + setEnabledToMatchNative(); |
| + } |
| + }); |
| + } catch (ClassNotFoundException e) { |
| + Log.e("TraceEvent", "init", e); |
| + } catch (NoSuchMethodException e) { |
| + Log.e("TraceEvent", "init", e); |
| + } catch (IllegalArgumentException e) { |
| + Log.e("TraceEvent", "init", e); |
| + } catch (IllegalAccessException e) { |
| + Log.e("TraceEvent", "init", e); |
| + } catch (InvocationTargetException e) { |
| + Log.e("TraceEvent", "init", e); |
| + } |
| + } |
| + } |
| + |
| /** |
| * 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. |
| @@ -47,11 +73,22 @@ public class TraceEvent { |
| if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { |
| try { |
| Class<?> traceClass = Class.forName("android.os.Trace"); |
| - Method m = traceClass.getDeclaredMethod("isTagEnabled", Long.TYPE); |
| - Field f = traceClass.getField("TRACE_TAG_VIEW"); |
| - boolean atraceEnabled = (Boolean) m.invoke(traceClass, f.getLong(null)); |
| - if (atraceEnabled) nativeInitATrace(); |
| - enabled = enabled || atraceEnabled; |
| + long traceTagView = traceClass.getField("TRACE_TAG_VIEW").getLong(null); |
| + String propertyTraceTagEnableFlags = (String)traceClass.getField( |
|
Jay Civelli
2013/02/13 18:24:02
Nit: missing space after (String)
Xianzhu
2013/02/13 21:50:17
Done.
|
| + "PROPERTY_TRACE_TAG_ENABLEFLAGS").get(null); |
| + |
| + Class<?> systemPropertiesClass = Class.forName("android.os.SystemProperties"); |
| + Method systemPropertiesGetIntMethod = systemPropertiesClass.getDeclaredMethod( |
| + "getInt", String.class, Integer.TYPE); |
| + int enabledTags = (Integer) systemPropertiesGetIntMethod.invoke( |
|
Jay Civelli
2013/02/13 18:24:02
Nit: should it be named enableFlags?
Xianzhu
2013/02/13 21:50:17
Done.
|
| + null, propertyTraceTagEnableFlags, 0); |
| + Log.d("TraceEvent", "New enabled tags: " + enabledTags); |
| + if ((enabledTags & traceTagView) != 0) { |
| + nativeStartATrace(); |
| + enabled = true; |
| + } else { |
| + nativeStopATrace(); |
| + } |
| } catch (ClassNotFoundException e) { |
| Log.e("TraceEvent", "setEnabledToMatchNative", e); |
| } catch (NoSuchMethodException e) { |
| @@ -236,7 +273,8 @@ public class TraceEvent { |
| } |
| private static native boolean nativeTraceEnabled(); |
| - private static native void nativeInitATrace(); |
| + private static native void nativeStartATrace(); |
| + private static native void nativeStopATrace(); |
| private static native void nativeInstant(String name, String arg); |
| private static native void nativeBegin(String name, String arg); |
| private static native void nativeEnd(String name, String arg); |