diff options
| author | 2016-12-02 17:15:23 +0000 | |
|---|---|---|
| committer | 2016-12-02 17:15:23 +0000 | |
| commit | bbcd9d26b13117c867cd6be6812f7f330c1e8554 (patch) | |
| tree | ba6bd6af2154b5f5c0dac4543d9e14693cfd86a3 | |
| parent | 33f0cf1267a345ae80a345d72f8e3746167ee1f4 (diff) | |
| parent | eda1af611fd9542693a35c6ead405159b950ff76 (diff) | |
Merge "Add new hostingType for startProcessLocked() that selects using the WebViewZygote."
am: eda1af611f
Change-Id: I539fb728175c109a93cbff7d8929b584e88bb70c
3 files changed, 23 insertions, 5 deletions
diff --git a/core/java/android/webkit/WebViewZygote.java b/core/java/android/webkit/WebViewZygote.java index c2069741d6cd..e0d589a8a8fb 100644 --- a/core/java/android/webkit/WebViewZygote.java +++ b/core/java/android/webkit/WebViewZygote.java @@ -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; diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java index 1bcff1a7b2e6..10a538863c25 100644 --- a/services/core/java/com/android/server/am/ActiveServices.java +++ b/services/core/java/com/android/server/am/ActiveServices.java @@ -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; @@ -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) { @@ -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 " diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 72c876e7ed61..4cf1ef5444bb 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -3799,10 +3799,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, - app.processName, uid, uid, gids, debugFlags, mountExternal, - app.info.targetSdkVersion, app.info.seinfo, requiredAbi, instructionSet, - app.info.dataDir, entryPointArgs); + 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); |