| Index: android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java
|
| diff --git a/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java b/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java
|
| index 6f6404aa5e21eb274bb758c0c8584b10ba71e73d..b3aa4f8a859b1ce420bf717d27fef4a4add8e98f 100644
|
| --- a/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java
|
| +++ b/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java
|
| @@ -5,18 +5,25 @@
|
| package org.chromium.android_webview;
|
|
|
| import android.content.Context;
|
| +import android.os.Build;
|
| +import android.util.Log;
|
|
|
| import org.chromium.base.PathUtils;
|
| import org.chromium.base.ThreadUtils;
|
| +import org.chromium.base.TraceEvent;
|
| import org.chromium.base.library_loader.LibraryLoader;
|
| import org.chromium.base.library_loader.ProcessInitException;
|
| import org.chromium.content.browser.BrowserStartupController;
|
|
|
| +import java.lang.reflect.InvocationTargetException;
|
| +import java.lang.reflect.Method;
|
| +
|
| /**
|
| * Wrapper for the steps needed to initialize the java and native sides of webview chromium.
|
| */
|
| public abstract class AwBrowserProcess {
|
| private static final String PRIVATE_DATA_DIRECTORY_SUFFIX = "webview";
|
| + private static final String TAG = "AwBrowserProcess";
|
|
|
| /**
|
| * Loads the native library, and performs basic static construction of objects needed
|
| @@ -27,11 +34,58 @@ public abstract class AwBrowserProcess {
|
| PathUtils.setPrivateDataDirectorySuffix(PRIVATE_DATA_DIRECTORY_SUFFIX);
|
| try {
|
| LibraryLoader.loadNow();
|
| + initTraceEvent();
|
| } catch (ProcessInitException e) {
|
| throw new RuntimeException("Cannot load WebView", e);
|
| }
|
| }
|
|
|
| + // TODO(benm): Move this function into WebView code in Android tree to avoid reflection.
|
| + private static void initTraceEvent() {
|
| + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) return;
|
| +
|
| + try {
|
| + final Class<?> traceClass = Class.forName("android.os.Trace");
|
| + final long traceTagView = traceClass.getField("TRACE_TAG_WEBVIEW").getLong(null);
|
| +
|
| + final Class<?> systemPropertiesClass = Class.forName("android.os.SystemProperties");
|
| + final Method systemPropertiesGetLongMethod = systemPropertiesClass.getDeclaredMethod(
|
| + "getLong", String.class, Long.TYPE);
|
| + final Method addChangeCallbackMethod = systemPropertiesClass.getDeclaredMethod(
|
| + "addChangeCallback", Runnable.class);
|
| +
|
| + // Won't reach here if any of the above reflect lookups fail.
|
| + addChangeCallbackMethod.invoke(null, new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + try {
|
| + long enabledFlags = (Long) systemPropertiesGetLongMethod.invoke(
|
| + null, "debug.atrace.tags.enableflags", 0);
|
| + TraceEvent.setATraceEnabled((enabledFlags & traceTagView) != 0);
|
| + } catch (IllegalArgumentException e) {
|
| + Log.e(TAG, "systemPropertyChanged", e);
|
| + } catch (IllegalAccessException e) {
|
| + Log.e(TAG, "systemPropertyChanged", e);
|
| + } catch (InvocationTargetException e) {
|
| + Log.e(TAG, "systemPropertyChanged", e);
|
| + }
|
| + }
|
| + });
|
| + } catch (ClassNotFoundException e) {
|
| + Log.e(TAG, "initTraceEvent", e);
|
| + } catch (NoSuchMethodException e) {
|
| + Log.e(TAG, "initTraceEvent", e);
|
| + } catch (IllegalArgumentException e) {
|
| + Log.e(TAG, "initTraceEvent", e);
|
| + } catch (IllegalAccessException e) {
|
| + Log.e(TAG, "initTraceEvent", e);
|
| + } catch (InvocationTargetException e) {
|
| + Log.e(TAG, "initTraceEvent", e);
|
| + } catch (NoSuchFieldException e) {
|
| + Log.e(TAG, "initTraceEvent", e);
|
| + }
|
| + }
|
| +
|
| /**
|
| * Starts the chromium browser process running within this process. Creates threads
|
| * and performs other per-app resource allocations; must not be called from zygote.
|
|
|