From b3a1417663d64fe003b03c97e2f24b6eeba3f9dc Mon Sep 17 00:00:00 2001 From: Jesse Hall Date: Thu, 9 Feb 2017 14:43:14 -0800 Subject: [PATCH] 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 (cherry picked from commit ba0370eef3d17baa70d43723e96eb135c8e4ed58) --- core/java/com/android/internal/os/ZygoteInit.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index 2a1a47651368..85fc8b0adec8 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -26,6 +26,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.Process; import android.os.SystemClock; import android.os.SystemProperties; @@ -79,6 +80,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 String ANDROID_SOCKET_PREFIX = "ANDROID_SOCKET_"; @@ -198,6 +200,9 @@ public class ZygoteInit { Trace.traceBegin(Trace.TRACE_TAG_DALVIK, "PreloadResources"); preloadResources(); Trace.traceEnd(Trace.TRACE_TAG_DALVIK); + 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, @@ -238,6 +243,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(); -- 2.11.0