Zygote: Add invoke-with to zygote protocol am: b8f7c351b9 am: 45c2fffc52

am: d71bb300e6

Change-Id: Ied54640c44ade52abd6a905526ba7789be14a332
This commit is contained in:
Tamas Berghammer
2016-12-16 19:54:11 +00:00
committed by android-build-merger
3 changed files with 22 additions and 5 deletions

View File

@@ -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);
}
/**

View File

@@ -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) {

View File

@@ -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);