Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ba0370ee authored by Jesse Hall's avatar Jesse Hall
Browse files

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
parent e3ed795f
Loading
Loading
Loading
Loading
+13 −0
Original line number Original line Diff line number Diff line
@@ -25,6 +25,7 @@ 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;
@@ -81,6 +82,7 @@ public class ZygoteInit {
    private static final String TAG = "Zygote";
    private static final String TAG = "Zygote";


    private static final String PROPERTY_DISABLE_OPENGL_PRELOADING = "ro.zygote.disable_gl_preload";
    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 PROPERTY_RUNNING_IN_CONTAINER = "ro.boot.container";


    private static final int LOG_BOOT_PROGRESS_PRELOAD_START = 3020;
    private static final int LOG_BOOT_PROGRESS_PRELOAD_START = 3020;
@@ -125,6 +127,9 @@ public class ZygoteInit {
        bootTimingsTraceLog.traceBegin("PreloadResources");
        bootTimingsTraceLog.traceBegin("PreloadResources");
        preloadResources();
        preloadResources();
        bootTimingsTraceLog.traceEnd(); // PreloadResources
        bootTimingsTraceLog.traceEnd(); // PreloadResources
        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,
@@ -174,6 +179,14 @@ public class ZygoteInit {
        System.loadLibrary("jnigraphics");
        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() {
    private static void preloadTextResources() {
        Hyphenator.init();
        Hyphenator.init();
        TextView.preloadFontCache();
        TextView.preloadFontCache();