This source file includes following definitions.
- loadLibrary
- initTraceEvent
- start
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;
public abstract class AwBrowserProcess {
private static final String PRIVATE_DATA_DIRECTORY_SUFFIX = "webview";
private static final String TAG = "AwBrowserProcess";
public static void loadLibrary() {
PathUtils.setPrivateDataDirectorySuffix(PRIVATE_DATA_DIRECTORY_SUFFIX);
try {
LibraryLoader.loadNow();
initTraceEvent();
} catch (ProcessInitException e) {
throw new RuntimeException("Cannot load WebView", e);
}
}
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);
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);
}
}
public static void start(final Context context) {
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
try {
BrowserStartupController.get(context).startBrowserProcessesSync(
BrowserStartupController.MAX_RENDERERS_SINGLE_PROCESS);
} catch (ProcessInitException e) {
throw new RuntimeException("Cannot initialize WebView", e);
}
}
});
}
}