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

Commit accb3bfa authored by Android Build Merger (Role)'s avatar Android Build Merger (Role) Committed by Android (Google) Code Review
Browse files

Merge "Merge "Load the default graphics driver in USAPs." into qt-dev am:...

Merge "Merge "Load the default graphics driver in USAPs." into qt-dev am: 88ee2945" into qt-dev-plus-aosp
parents b76cb7c6 62d94833
Loading
Loading
Loading
Loading
+38 −36
Original line number Diff line number Diff line
@@ -512,18 +512,19 @@ public class Process {
     * @param invokeWith null-ok the command to invoke with.
     * @param packageName null-ok the name of the package this process belongs to.
     * @param packagesForUid null-ok all the packages with the same uid as this process.
     * @param zygoteArgs Additional arguments to supply to the zygote process.
     * @param useSystemGraphicsDriver whether the process uses system graphics driver.
     *
     * @param zygoteArgs Additional arguments to supply to the zygote process.
     * @return An object that describes the result of the attempt to start the process.
     * @throws RuntimeException on fatal start failure
     * 
     * {@hide}
     */
    public static final ProcessStartResult start(@NonNull final String processClass,
    public static ProcessStartResult start(@NonNull final String processClass,
                                           @Nullable final String niceName,
                                           int uid, int gid, @Nullable int[] gids,
                                  int runtimeFlags, int mountExternal,
                                           int runtimeFlags,
                                           int mountExternal,
                                           int targetSdkVersion,
                                           @Nullable String seInfo,
                                           @NonNull String abi,
@@ -533,20 +534,21 @@ public class Process {
                                           @Nullable String packageName,
                                           @Nullable String[] packagesForUid,
                                           @Nullable String sandboxId,
                                  @Nullable String[] zygoteArgs,
                                  boolean useSystemGraphicsDriver) {
                                           boolean useSystemGraphicsDriver,
                                           @Nullable String[] zygoteArgs) {
        return ZYGOTE_PROCESS.start(processClass, niceName, uid, gid, gids,
                    runtimeFlags, mountExternal, targetSdkVersion, seInfo,
                    abi, instructionSet, appDataDir, invokeWith, packageName,
                    packagesForUid, sandboxId, /*useUnspecializedAppProcessPool=*/ true,
                    zygoteArgs, useSystemGraphicsDriver);
                    packagesForUid, sandboxId, /*useUsapPool=*/ true,
                    useSystemGraphicsDriver, zygoteArgs);
    }

    /** @hide */
    public static final ProcessStartResult startWebView(@NonNull final String processClass,
    public static ProcessStartResult startWebView(@NonNull final String processClass,
                                                  @Nullable final String niceName,
                                                  int uid, int gid, @Nullable int[] gids,
                                  int runtimeFlags, int mountExternal,
                                                  int runtimeFlags,
                                                  int mountExternal,
                                                  int targetSdkVersion,
                                                  @Nullable String seInfo,
                                                  @NonNull String abi,
@@ -556,13 +558,13 @@ public class Process {
                                                  @Nullable String packageName,
                                                  @Nullable String[] packagesForUid,
                                                  @Nullable String sandboxId,
                                  @Nullable String[] zygoteArgs,
                                  boolean useSystemGraphicsDriver) {
                                                  boolean useSystemGraphicsDriver,
                                                  @Nullable String[] zygoteArgs) {
        return WebViewZygote.getProcess().start(processClass, niceName, uid, gid, gids,
                    runtimeFlags, mountExternal, targetSdkVersion, seInfo,
                    abi, instructionSet, appDataDir, invokeWith, packageName,
                    packagesForUid, sandboxId, /*useUnspecializedAppProcessPool=*/ false,
                    zygoteArgs, useSystemGraphicsDriver);
                    packagesForUid, sandboxId, /*useUsapPool=*/ false,
                    useSystemGraphicsDriver, zygoteArgs);
    }

    /**
+10 −6
Original line number Diff line number Diff line
@@ -327,8 +327,8 @@ public class ZygoteProcess {
                                                  @Nullable String[] packagesForUid,
                                                  @Nullable String sandboxId,
                                                  boolean useUsapPool,
                                                  @Nullable String[] zygoteArgs,
                                                  boolean useSystemGraphicsDriver) {
                                                  boolean useSystemGraphicsDriver,
                                                  @Nullable String[] zygoteArgs) {
        // TODO (chriswailes): Is there a better place to check this value?
        if (fetchUsapPoolEnabledPropWithMinInterval()) {
            informZygotesOfUsapPoolStatus();
@@ -339,7 +339,7 @@ public class ZygoteProcess {
                    runtimeFlags, mountExternal, targetSdkVersion, seInfo,
                    abi, instructionSet, appDataDir, invokeWith, /*startChildZygote=*/ false,
                    packageName, packagesForUid, sandboxId,
                    useUsapPool, zygoteArgs);
                    useUsapPool, useSystemGraphicsDriver, zygoteArgs);
        } catch (ZygoteStartFailedEx ex) {
            Log.e(LOG_TAG,
                    "Starting VM process through Zygote failed");
@@ -548,7 +548,8 @@ public class ZygoteProcess {
                                                      @Nullable String packageName,
                                                      @Nullable String[] packagesForUid,
                                                      @Nullable String sandboxId,
                                                      boolean useUnspecializedAppProcessPool,
                                                      boolean useUsapPool,
                                                      boolean useSystemGraphicsDriver,
                                                      @Nullable String[] extraArgs)
                                                      throws ZygoteStartFailedEx {
        ArrayList<String> argsForZygote = new ArrayList<>();
@@ -635,8 +636,10 @@ public class ZygoteProcess {
        }

        synchronized(mLock) {
            // The USAP pool can not be used if the application will not use the systems graphics
            // driver.  If that driver is requested use the Zygote application start path.
            return zygoteSendArgsAndGetResult(openZygoteSocketIfNeeded(abi),
                                              useUnspecializedAppProcessPool,
                                              useUsapPool && useSystemGraphicsDriver,
                                              argsForZygote);
        }
    }
@@ -1141,7 +1144,8 @@ public class ZygoteProcess {
                    abi, instructionSet, null /* appDataDir */, null /* invokeWith */,
                    true /* startChildZygote */, null /* packageName */,
                    null /* packagesForUid */, null /* sandboxId */,
                    false /* useUsapPool */, extraArgs);
                    false /* useUsapPool */, false /*useSystemGraphicsDriver*/,
                    extraArgs);
        } catch (ZygoteStartFailedEx ex) {
            throw new RuntimeException("Starting child-zygote through Zygote failed", ex);
        }
+3 −0
Original line number Diff line number Diff line
@@ -517,6 +517,9 @@ public final class Zygote {
        Credentials peerCredentials = null;
        ZygoteArguments args = null;

        // Load resources
        ZygoteInit.nativePreloadOpenGL();

        while (true) {
            try {
                sessionSocket = usapPoolSocket.accept();
+10 −3
Original line number Diff line number Diff line
@@ -150,7 +150,7 @@ public class ZygoteInit {
        nativePreloadAppProcessHALs();
        Trace.traceEnd(Trace.TRACE_TAG_DALVIK);
        Trace.traceBegin(Trace.TRACE_TAG_DALVIK, "PreloadOpenGL");
        preloadOpenGL();
        maybePreloadOpenGL();
        Trace.traceEnd(Trace.TRACE_TAG_DALVIK);
        preloadSharedLibraries();
        preloadTextResources();
@@ -192,9 +192,16 @@ public class ZygoteInit {

    native private static void nativePreloadAppProcessHALs();

    native private static void nativePreloadOpenGL();
    /**
     * This call loads the graphics driver by attempting to make an OpenGL call.  If the driver is
     * not currently in memory it will load and initialize it.  The OpenGL call itself is relatively
     * cheap and pure.  This means that it is a low overhead on the initial call, and is safe and
     * cheap to call later.  Calls after the initial invocation will effectively be no-ops for the
     * system.
     */
    static native void nativePreloadOpenGL();

    private static void preloadOpenGL() {
    private static void maybePreloadOpenGL() {
        String driverPackageName = SystemProperties.get(PROPERTY_GFX_DRIVER);
        if (!SystemProperties.getBoolean(PROPERTY_DISABLE_OPENGL_PRELOADING, false) &&
                (driverPackageName == null || driverPackageName.isEmpty())) {
+7 −7
Original line number Diff line number Diff line
@@ -1827,8 +1827,8 @@ public final class ProcessList {
                        app.info.targetSdkVersion, seInfo, requiredAbi, instructionSet,
                        app.info.dataDir, null, app.info.packageName,
                        packageNames, sandboxId,
                        new String[] {PROC_START_SEQ_IDENT + app.startSeq},
                        useSystemGraphicsDriver);
                        useSystemGraphicsDriver,
                        new String[] {PROC_START_SEQ_IDENT + app.startSeq});
            } else if (hostingRecord.usesAppZygote()) {
                final AppZygote appZygote = createAppZygoteForProcessIfNeeded(app);

@@ -1836,17 +1836,17 @@ public final class ProcessList {
                        app.processName, uid, uid, gids, runtimeFlags, mountExternal,
                        app.info.targetSdkVersion, seInfo, requiredAbi, instructionSet,
                        app.info.dataDir, null, app.info.packageName,
                        packageNames, sandboxId, /*useUnspecializedAppProcessPool=*/ false,
                        new String[] {PROC_START_SEQ_IDENT + app.startSeq},
                        useSystemGraphicsDriver);
                        packageNames, sandboxId, /*useUsapPool=*/ false,
                        useSystemGraphicsDriver,
                        new String[] {PROC_START_SEQ_IDENT + app.startSeq});
            } else {
                startResult = Process.start(entryPoint,
                        app.processName, uid, uid, gids, runtimeFlags, mountExternal,
                        app.info.targetSdkVersion, seInfo, requiredAbi, instructionSet,
                        app.info.dataDir, invokeWith, app.info.packageName,
                        packageNames, sandboxId,
                        new String[] {PROC_START_SEQ_IDENT + app.startSeq},
                        useSystemGraphicsDriver);
                        useSystemGraphicsDriver,
                        new String[] {PROC_START_SEQ_IDENT + app.startSeq});
            }
            checkSlow(startTime, "startProcess: returned from zygote!");
            return startResult;