Loading core/java/android/webkit/WebViewZygote.java +4 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,10 @@ public class WebViewZygote { return sPackage.packageName; } public static boolean isMultiprocessEnabled() { return sMultiprocessEnabled && sPackage != null; } public static void setMultiprocessEnabled(boolean enabled) { sMultiprocessEnabled = enabled; Loading services/core/java/com/android/server/am/ActiveServices.java +7 −1 Original line number Diff line number Diff line Loading @@ -75,6 +75,7 @@ import android.util.EventLog; import android.util.Slog; import android.util.SparseArray; import android.util.TimeUtils; import android.webkit.WebViewZygote; public final class ActiveServices { private static final String TAG = TAG_WITH_CLASS_NAME ? "ActiveServices" : TAG_AM; Loading Loading @@ -1708,6 +1709,7 @@ public final class ActiveServices { final boolean isolated = (r.serviceInfo.flags&ServiceInfo.FLAG_ISOLATED_PROCESS) != 0; final String procName = r.processName; String hostingType = "service"; ProcessRecord app; if (!isolated) { Loading Loading @@ -1736,13 +1738,17 @@ public final class ActiveServices { // in the service any current isolated process it is running in or // waiting to have come up. app = r.isolatedProc; if (WebViewZygote.isMultiprocessEnabled() && r.serviceInfo.packageName.equals(WebViewZygote.getPackageName())) { hostingType = "webview_service"; } } // Not running -- get it started, and enqueue this service record // to be executed when the app comes up. if (app == null && !permissionsReviewRequired) { if ((app=mAm.startProcessLocked(procName, r.appInfo, true, intentFlags, "service", r.name, false, isolated, false)) == null) { hostingType, r.name, false, isolated, false)) == null) { String msg = "Unable to launch app " + r.appInfo.packageName + "/" + r.appInfo.uid + " for service " Loading services/core/java/com/android/server/am/ActivityManagerService.java +12 −4 Original line number Diff line number Diff line Loading @@ -3800,10 +3800,18 @@ public final class ActivityManagerService extends ActivityManagerNative Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "Start proc: " + app.processName); checkTime(startTime, "startProcess: asking zygote to start proc"); Process.ProcessStartResult startResult = Process.start(entryPoint, Process.ProcessStartResult startResult; if (hostingType.equals("webview_service")) { startResult = Process.startWebView(entryPoint, app.processName, uid, uid, gids, debugFlags, mountExternal, app.info.targetSdkVersion, app.info.seinfo, requiredAbi, instructionSet, app.info.dataDir, entryPointArgs); } else { startResult = Process.start(entryPoint, app.processName, uid, uid, gids, debugFlags, mountExternal, app.info.targetSdkVersion, app.info.seinfo, requiredAbi, instructionSet, app.info.dataDir, entryPointArgs); } checkTime(startTime, "startProcess: returned from zygote!"); Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); Loading Loading
core/java/android/webkit/WebViewZygote.java +4 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,10 @@ public class WebViewZygote { return sPackage.packageName; } public static boolean isMultiprocessEnabled() { return sMultiprocessEnabled && sPackage != null; } public static void setMultiprocessEnabled(boolean enabled) { sMultiprocessEnabled = enabled; Loading
services/core/java/com/android/server/am/ActiveServices.java +7 −1 Original line number Diff line number Diff line Loading @@ -75,6 +75,7 @@ import android.util.EventLog; import android.util.Slog; import android.util.SparseArray; import android.util.TimeUtils; import android.webkit.WebViewZygote; public final class ActiveServices { private static final String TAG = TAG_WITH_CLASS_NAME ? "ActiveServices" : TAG_AM; Loading Loading @@ -1708,6 +1709,7 @@ public final class ActiveServices { final boolean isolated = (r.serviceInfo.flags&ServiceInfo.FLAG_ISOLATED_PROCESS) != 0; final String procName = r.processName; String hostingType = "service"; ProcessRecord app; if (!isolated) { Loading Loading @@ -1736,13 +1738,17 @@ public final class ActiveServices { // in the service any current isolated process it is running in or // waiting to have come up. app = r.isolatedProc; if (WebViewZygote.isMultiprocessEnabled() && r.serviceInfo.packageName.equals(WebViewZygote.getPackageName())) { hostingType = "webview_service"; } } // Not running -- get it started, and enqueue this service record // to be executed when the app comes up. if (app == null && !permissionsReviewRequired) { if ((app=mAm.startProcessLocked(procName, r.appInfo, true, intentFlags, "service", r.name, false, isolated, false)) == null) { hostingType, r.name, false, isolated, false)) == null) { String msg = "Unable to launch app " + r.appInfo.packageName + "/" + r.appInfo.uid + " for service " Loading
services/core/java/com/android/server/am/ActivityManagerService.java +12 −4 Original line number Diff line number Diff line Loading @@ -3800,10 +3800,18 @@ public final class ActivityManagerService extends ActivityManagerNative Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "Start proc: " + app.processName); checkTime(startTime, "startProcess: asking zygote to start proc"); Process.ProcessStartResult startResult = Process.start(entryPoint, Process.ProcessStartResult startResult; if (hostingType.equals("webview_service")) { startResult = Process.startWebView(entryPoint, app.processName, uid, uid, gids, debugFlags, mountExternal, app.info.targetSdkVersion, app.info.seinfo, requiredAbi, instructionSet, app.info.dataDir, entryPointArgs); } else { startResult = Process.start(entryPoint, app.processName, uid, uid, gids, debugFlags, mountExternal, app.info.targetSdkVersion, app.info.seinfo, requiredAbi, instructionSet, app.info.dataDir, entryPointArgs); } checkTime(startTime, "startProcess: returned from zygote!"); Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); Loading