Zygote: Add invoke-with to zygote protocol am: b8f7c351b9 am: 45c2fffc52
am: d71bb300e6
Change-Id: Ied54640c44ade52abd6a905526ba7789be14a332
This commit is contained in:
@@ -398,6 +398,9 @@ public class Process {
|
||||
* make easily identifyable processes even if you are using the same base
|
||||
* <var>processClass</var> to start them.
|
||||
*
|
||||
* When invokeWith is not null, the process will be started as a fresh app
|
||||
* and not a zygote fork. Note that this is only allowed for uid 0.
|
||||
*
|
||||
* @param processClass The class to use as the process's main entry
|
||||
* point.
|
||||
* @param niceName A more readable name to use for the process.
|
||||
@@ -410,6 +413,7 @@ public class Process {
|
||||
* @param abi non-null the ABI this app should be started with.
|
||||
* @param instructionSet null-ok the instruction set to use.
|
||||
* @param appDataDir null-ok the data directory of the app.
|
||||
* @param invokeWith null-ok the command to invoke with.
|
||||
* @param zygoteArgs Additional arguments to supply to the zygote process.
|
||||
*
|
||||
* @return An object that describes the result of the attempt to start the process.
|
||||
@@ -426,10 +430,11 @@ public class Process {
|
||||
String abi,
|
||||
String instructionSet,
|
||||
String appDataDir,
|
||||
String invokeWith,
|
||||
String[] zygoteArgs) {
|
||||
return zygoteProcess.start(processClass, niceName, uid, gid, gids,
|
||||
debugFlags, mountExternal, targetSdkVersion, seInfo,
|
||||
abi, instructionSet, appDataDir, zygoteArgs);
|
||||
abi, instructionSet, appDataDir, invokeWith, zygoteArgs);
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@@ -442,10 +447,11 @@ public class Process {
|
||||
String abi,
|
||||
String instructionSet,
|
||||
String appDataDir,
|
||||
String invokeWith,
|
||||
String[] zygoteArgs) {
|
||||
return WebViewZygote.getProcess().start(processClass, niceName, uid, gid, gids,
|
||||
debugFlags, mountExternal, targetSdkVersion, seInfo,
|
||||
abi, instructionSet, appDataDir, zygoteArgs);
|
||||
abi, instructionSet, appDataDir, invokeWith, zygoteArgs);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -170,6 +170,9 @@ public class ZygoteProcess {
|
||||
* make easily identifyable processes even if you are using the same base
|
||||
* <var>processClass</var> to start them.
|
||||
*
|
||||
* When invokeWith is not null, the process will be started as a fresh app
|
||||
* and not a zygote fork. Note that this is only allowed for uid 0.
|
||||
*
|
||||
* @param processClass The class to use as the process's main entry
|
||||
* point.
|
||||
* @param niceName A more readable name to use for the process.
|
||||
@@ -182,6 +185,7 @@ public class ZygoteProcess {
|
||||
* @param abi non-null the ABI this app should be started with.
|
||||
* @param instructionSet null-ok the instruction set to use.
|
||||
* @param appDataDir null-ok the data directory of the app.
|
||||
* @param invokeWith null-ok the command to invoke with.
|
||||
* @param zygoteArgs Additional arguments to supply to the zygote process.
|
||||
*
|
||||
* @return An object that describes the result of the attempt to start the process.
|
||||
@@ -196,11 +200,12 @@ public class ZygoteProcess {
|
||||
String abi,
|
||||
String instructionSet,
|
||||
String appDataDir,
|
||||
String invokeWith,
|
||||
String[] zygoteArgs) {
|
||||
try {
|
||||
return startViaZygote(processClass, niceName, uid, gid, gids,
|
||||
debugFlags, mountExternal, targetSdkVersion, seInfo,
|
||||
abi, instructionSet, appDataDir, zygoteArgs);
|
||||
abi, instructionSet, appDataDir, invokeWith, zygoteArgs);
|
||||
} catch (ZygoteStartFailedEx ex) {
|
||||
Log.e(LOG_TAG,
|
||||
"Starting VM process through Zygote failed");
|
||||
@@ -330,6 +335,7 @@ public class ZygoteProcess {
|
||||
String abi,
|
||||
String instructionSet,
|
||||
String appDataDir,
|
||||
String invokeWith,
|
||||
String[] extraArgs)
|
||||
throws ZygoteStartFailedEx {
|
||||
ArrayList<String> argsForZygote = new ArrayList<String>();
|
||||
@@ -407,6 +413,11 @@ public class ZygoteProcess {
|
||||
argsForZygote.add("--app-data-dir=" + appDataDir);
|
||||
}
|
||||
|
||||
if (invokeWith != null) {
|
||||
argsForZygote.add("--invoke-with");
|
||||
argsForZygote.add(invokeWith);
|
||||
}
|
||||
|
||||
argsForZygote.add(processClass);
|
||||
|
||||
if (extraArgs != null) {
|
||||
|
||||
@@ -3810,12 +3810,12 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
startResult = Process.startWebView(entryPoint,
|
||||
app.processName, uid, uid, gids, debugFlags, mountExternal,
|
||||
app.info.targetSdkVersion, app.info.seinfo, requiredAbi, instructionSet,
|
||||
app.info.dataDir, entryPointArgs);
|
||||
app.info.dataDir, null, 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);
|
||||
app.info.dataDir, null, entryPointArgs);
|
||||
}
|
||||
checkTime(startTime, "startProcess: returned from zygote!");
|
||||
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
|
||||
|
||||
Reference in New Issue
Block a user