Merge "Pass to the runtime the primary zygote option." am: c9bcf869db am: e21b8c9b57 am: b06bed082a
am: 269b05c370
Change-Id: Ia83233e71688260e8384fbec09448455e5667ee0
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index 20cb7a2..5611cc4 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -631,7 +631,7 @@
*
* Returns 0 on success.
*/
-int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote)
+int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote, bool primary_zygote)
{
JavaVMInitArgs initArgs;
char propBuf[PROPERTY_VALUE_MAX];
@@ -762,6 +762,10 @@
addOption("-verbose:gc");
//addOption("-verbose:class");
+ if (primary_zygote) {
+ addOption("-Xprimaryzygote");
+ }
+
/*
* The default starting and maximum size of the heap. Larger
* values should be specified in a product property override.
@@ -1123,6 +1127,8 @@
className != NULL ? className : "(unknown)", getuid());
static const String8 startSystemServer("start-system-server");
+ // Whether this is the primary zygote, meaning the zygote which will fork system server.
+ bool primary_zygote = false;
/*
* 'startSystemServer == true' means runtime is obsolete and not run from
@@ -1130,6 +1136,7 @@
*/
for (size_t i = 0; i < options.size(); ++i) {
if (options[i] == startSystemServer) {
+ primary_zygote = true;
/* track our progress through the boot sequence */
const int LOG_BOOT_PROGRESS_START = 3000;
LOG_EVENT_LONG(LOG_BOOT_PROGRESS_START, ns2ms(systemTime(SYSTEM_TIME_MONOTONIC)));
@@ -1165,7 +1172,7 @@
JniInvocation jni_invocation;
jni_invocation.Init(NULL);
JNIEnv* env;
- if (startVm(&mJavaVM, &env, zygote) != 0) {
+ if (startVm(&mJavaVM, &env, zygote, primary_zygote) != 0) {
return;
}
onVmCreated(env);
diff --git a/core/jni/include/android_runtime/AndroidRuntime.h b/core/jni/include/android_runtime/AndroidRuntime.h
index a19f954..2351272 100644
--- a/core/jni/include/android_runtime/AndroidRuntime.h
+++ b/core/jni/include/android_runtime/AndroidRuntime.h
@@ -131,7 +131,7 @@
const char* runtimeArg,
const char* quotingArg);
void parseExtraOpts(char* extraOptsBuf, const char* quotingArg);
- int startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote);
+ int startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote, bool primary_zygote);
Vector<JavaVMOption> mOptions;
bool mExitWithoutCleanup;