Zygote: Restore GL preload
Preloading GLES drivers in Zygote was removed previously since it is incompatible with updatable drivers. That caused some app startup latency and system memory use regressions. This change re-adds GLES driver preloading, but only on devices that don't support driver updates. Bug: 34611670 Bug: 35052548 Test: boot angler, systrace of Calculator app startup Change-Id: Ibdc6b3c0ba4473574722641d4bfad4b375f908a3
This commit is contained in:
@@ -25,6 +25,7 @@ import android.icu.impl.CacheValue;
|
||||
import android.icu.text.DecimalFormatSymbols;
|
||||
import android.icu.util.ULocale;
|
||||
import android.net.LocalServerSocket;
|
||||
import android.opengl.EGL14;
|
||||
import android.os.IInstalld;
|
||||
import android.os.Process;
|
||||
import android.os.RemoteException;
|
||||
@@ -81,6 +82,7 @@ public class ZygoteInit {
|
||||
private static final String TAG = "Zygote";
|
||||
|
||||
private static final String PROPERTY_DISABLE_OPENGL_PRELOADING = "ro.zygote.disable_gl_preload";
|
||||
private static final String PROPERTY_GFX_DRIVER = "ro.gfx.driver.0";
|
||||
private static final String PROPERTY_RUNNING_IN_CONTAINER = "ro.boot.container";
|
||||
|
||||
private static final int LOG_BOOT_PROGRESS_PRELOAD_START = 3020;
|
||||
@@ -125,6 +127,9 @@ public class ZygoteInit {
|
||||
bootTimingsTraceLog.traceBegin("PreloadResources");
|
||||
preloadResources();
|
||||
bootTimingsTraceLog.traceEnd(); // PreloadResources
|
||||
Trace.traceBegin(Trace.TRACE_TAG_DALVIK, "PreloadOpenGL");
|
||||
preloadOpenGL();
|
||||
Trace.traceEnd(Trace.TRACE_TAG_DALVIK);
|
||||
preloadSharedLibraries();
|
||||
preloadTextResources();
|
||||
// Ask the WebViewFactory to do any initialization that must run in the zygote process,
|
||||
@@ -174,6 +179,14 @@ public class ZygoteInit {
|
||||
System.loadLibrary("jnigraphics");
|
||||
}
|
||||
|
||||
private static void preloadOpenGL() {
|
||||
String driverPackageName = SystemProperties.get(PROPERTY_GFX_DRIVER);
|
||||
if (!SystemProperties.getBoolean(PROPERTY_DISABLE_OPENGL_PRELOADING, false) ||
|
||||
driverPackageName == null || driverPackageName.isEmpty()) {
|
||||
EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY);
|
||||
}
|
||||
}
|
||||
|
||||
private static void preloadTextResources() {
|
||||
Hyphenator.init();
|
||||
TextView.preloadFontCache();
|
||||
|
||||
Reference in New Issue
Block a user