Merge "Load EGL early in Activity launch, instead of in Zygote" into nyc-mr2-dev-plus-aosp

This commit is contained in:
Jesse Hall
2017-01-20 23:57:30 +00:00
committed by Android (Google) Code Review
2 changed files with 18 additions and 10 deletions

View File

@@ -19,6 +19,7 @@ package android.os;
import android.content.Context; import android.content.Context;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.opengl.EGL14;
import android.os.SystemProperties; import android.os.SystemProperties;
import android.util.Log; import android.util.Log;
@@ -34,6 +35,23 @@ public final class GraphicsEnvironment {
private static final String PROPERTY_GFX_DRIVER = "ro.gfx.driver.0"; private static final String PROPERTY_GFX_DRIVER = "ro.gfx.driver.0";
public static void setupGraphicsEnvironment(Context context) { public static void setupGraphicsEnvironment(Context context) {
chooseDriver(context);
// Now that we've figured out which driver to use for this process, load and initialize it.
// This can take multiple frame periods, and it would otherwise happen as part of the first
// frame, increasing first-frame latency. Starting it here, as a low-priority background
// thread, means that it's usually done long before we start drawing the first frame,
// without significantly disrupting other activity launch work.
Thread eglInitThread = new Thread(
() -> {
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY);
},
"EGL Init");
eglInitThread.start();
}
private static void chooseDriver(Context context) {
String driverPackageName = SystemProperties.get(PROPERTY_GFX_DRIVER); String driverPackageName = SystemProperties.get(PROPERTY_GFX_DRIVER);
if (driverPackageName == null || driverPackageName.isEmpty()) { if (driverPackageName == null || driverPackageName.isEmpty()) {
return; return;

View File

@@ -25,7 +25,6 @@ import android.icu.impl.CacheValue;
import android.icu.text.DecimalFormatSymbols; import android.icu.text.DecimalFormatSymbols;
import android.icu.util.ULocale; import android.icu.util.ULocale;
import android.net.LocalServerSocket; import android.net.LocalServerSocket;
import android.opengl.EGL14;
import android.os.IInstalld; import android.os.IInstalld;
import android.os.Process; import android.os.Process;
import android.os.RemoteException; import android.os.RemoteException;
@@ -121,9 +120,6 @@ public class ZygoteInit {
Trace.traceBegin(Trace.TRACE_TAG_DALVIK, "PreloadResources"); Trace.traceBegin(Trace.TRACE_TAG_DALVIK, "PreloadResources");
preloadResources(); preloadResources();
Trace.traceEnd(Trace.TRACE_TAG_DALVIK); Trace.traceEnd(Trace.TRACE_TAG_DALVIK);
Trace.traceBegin(Trace.TRACE_TAG_DALVIK, "PreloadOpenGL");
preloadOpenGL();
Trace.traceEnd(Trace.TRACE_TAG_DALVIK);
preloadSharedLibraries(); preloadSharedLibraries();
preloadTextResources(); preloadTextResources();
// Ask the WebViewFactory to do any initialization that must run in the zygote process, // Ask the WebViewFactory to do any initialization that must run in the zygote process,
@@ -164,12 +160,6 @@ public class ZygoteInit {
System.loadLibrary("jnigraphics"); System.loadLibrary("jnigraphics");
} }
private static void preloadOpenGL() {
if (!SystemProperties.getBoolean(PROPERTY_DISABLE_OPENGL_PRELOADING, false)) {
EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY);
}
}
private static void preloadTextResources() { private static void preloadTextResources() {
Hyphenator.init(); Hyphenator.init();
TextView.preloadFontCache(); TextView.preloadFontCache();