Merge "Clean up options for ART runtime."
This commit is contained in:
@@ -675,8 +675,6 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote, bool p
|
|||||||
char cachePruneBuf[sizeof("-Xzygote-max-boot-retry=")-1 + PROPERTY_VALUE_MAX];
|
char cachePruneBuf[sizeof("-Xzygote-max-boot-retry=")-1 + PROPERTY_VALUE_MAX];
|
||||||
char dex2oatXmsImageFlagsBuf[sizeof("-Xms")-1 + PROPERTY_VALUE_MAX];
|
char dex2oatXmsImageFlagsBuf[sizeof("-Xms")-1 + PROPERTY_VALUE_MAX];
|
||||||
char dex2oatXmxImageFlagsBuf[sizeof("-Xmx")-1 + PROPERTY_VALUE_MAX];
|
char dex2oatXmxImageFlagsBuf[sizeof("-Xmx")-1 + PROPERTY_VALUE_MAX];
|
||||||
char dex2oatXmsFlagsBuf[sizeof("-Xms")-1 + PROPERTY_VALUE_MAX];
|
|
||||||
char dex2oatXmxFlagsBuf[sizeof("-Xmx")-1 + PROPERTY_VALUE_MAX];
|
|
||||||
char dex2oatCompilerFilterBuf[sizeof("--compiler-filter=")-1 + PROPERTY_VALUE_MAX];
|
char dex2oatCompilerFilterBuf[sizeof("--compiler-filter=")-1 + PROPERTY_VALUE_MAX];
|
||||||
char dex2oatImageCompilerFilterBuf[sizeof("--compiler-filter=")-1 + PROPERTY_VALUE_MAX];
|
char dex2oatImageCompilerFilterBuf[sizeof("--compiler-filter=")-1 + PROPERTY_VALUE_MAX];
|
||||||
char dex2oatThreadsBuf[sizeof("-j")-1 + PROPERTY_VALUE_MAX];
|
char dex2oatThreadsBuf[sizeof("-j")-1 + PROPERTY_VALUE_MAX];
|
||||||
@@ -926,88 +924,45 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote, bool p
|
|||||||
bool skip_compilation = ((strcmp(voldDecryptBuf, "trigger_restart_min_framework") == 0) ||
|
bool skip_compilation = ((strcmp(voldDecryptBuf, "trigger_restart_min_framework") == 0) ||
|
||||||
(strcmp(voldDecryptBuf, "1") == 0));
|
(strcmp(voldDecryptBuf, "1") == 0));
|
||||||
|
|
||||||
// Extra options for boot.art/boot.oat image generation.
|
// Extra options for JIT.
|
||||||
parseCompilerRuntimeOption("dalvik.vm.image-dex2oat-Xms", dex2oatXmsImageFlagsBuf,
|
|
||||||
"-Xms", "-Ximage-compiler-option");
|
|
||||||
parseCompilerRuntimeOption("dalvik.vm.image-dex2oat-Xmx", dex2oatXmxImageFlagsBuf,
|
|
||||||
"-Xmx", "-Ximage-compiler-option");
|
|
||||||
if (skip_compilation) {
|
|
||||||
addOption("-Ximage-compiler-option");
|
|
||||||
addOption("--compiler-filter=assume-verified");
|
|
||||||
} else {
|
|
||||||
parseCompilerOption("dalvik.vm.image-dex2oat-filter", dex2oatImageCompilerFilterBuf,
|
|
||||||
"--compiler-filter=", "-Ximage-compiler-option");
|
|
||||||
}
|
|
||||||
|
|
||||||
// If there is a boot profile, it takes precedence over the image and preloaded classes.
|
|
||||||
if (hasFile("/system/etc/boot-image.prof")) {
|
|
||||||
addOption("-Ximage-compiler-option");
|
|
||||||
addOption("--profile-file=/system/etc/boot-image.prof");
|
|
||||||
addOption("-Ximage-compiler-option");
|
|
||||||
addOption("--compiler-filter=speed-profile");
|
|
||||||
} else {
|
|
||||||
ALOGE("Missing boot-image.prof file, /system/etc/boot-image.prof not found: %s\n",
|
|
||||||
strerror(errno));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// If there is a dirty-image-objects file, push it.
|
|
||||||
if (hasFile("/system/etc/dirty-image-objects")) {
|
|
||||||
addOption("-Ximage-compiler-option");
|
|
||||||
addOption("--dirty-image-objects=/system/etc/dirty-image-objects");
|
|
||||||
}
|
|
||||||
|
|
||||||
property_get("dalvik.vm.image-dex2oat-flags", dex2oatImageFlagsBuf, "");
|
|
||||||
parseExtraOpts(dex2oatImageFlagsBuf, "-Ximage-compiler-option");
|
|
||||||
|
|
||||||
// Extra options for DexClassLoader.
|
|
||||||
parseCompilerRuntimeOption("dalvik.vm.dex2oat-Xms", dex2oatXmsFlagsBuf,
|
|
||||||
"-Xms", "-Xcompiler-option");
|
|
||||||
parseCompilerRuntimeOption("dalvik.vm.dex2oat-Xmx", dex2oatXmxFlagsBuf,
|
|
||||||
"-Xmx", "-Xcompiler-option");
|
|
||||||
if (skip_compilation) {
|
if (skip_compilation) {
|
||||||
addOption("-Xcompiler-option");
|
addOption("-Xcompiler-option");
|
||||||
addOption("--compiler-filter=assume-verified");
|
addOption("--compiler-filter=assume-verified");
|
||||||
|
|
||||||
// We skip compilation when a minimal runtime is brought up for decryption. In that case
|
|
||||||
// /data is temporarily backed by a tmpfs, which is usually small.
|
|
||||||
// If the system image contains prebuilts, they will be relocated into the tmpfs. In this
|
|
||||||
// specific situation it is acceptable to *not* relocate and run out of the prebuilts
|
|
||||||
// directly instead.
|
|
||||||
addOption("--runtime-arg");
|
|
||||||
addOption("-Xnorelocate");
|
|
||||||
} else {
|
} else {
|
||||||
parseCompilerOption("dalvik.vm.dex2oat-filter", dex2oatCompilerFilterBuf,
|
parseCompilerOption("dalvik.vm.dex2oat-filter", dex2oatCompilerFilterBuf,
|
||||||
"--compiler-filter=", "-Xcompiler-option");
|
"--compiler-filter=", "-Xcompiler-option");
|
||||||
}
|
}
|
||||||
parseCompilerOption("dalvik.vm.dex2oat-threads", dex2oatThreadsBuf, "-j", "-Xcompiler-option");
|
parseCompilerOption("dalvik.vm.dex2oat-threads", dex2oatThreadsBuf, "-j", "-Xcompiler-option");
|
||||||
parseCompilerOption("dalvik.vm.image-dex2oat-threads", dex2oatThreadsImageBuf, "-j",
|
|
||||||
"-Ximage-compiler-option");
|
|
||||||
parseCompilerOption("dalvik.vm.dex2oat-cpu-set", dex2oatCpuSetBuf, "--cpu-set=",
|
parseCompilerOption("dalvik.vm.dex2oat-cpu-set", dex2oatCpuSetBuf, "--cpu-set=",
|
||||||
"-Xcompiler-option");
|
"-Xcompiler-option");
|
||||||
parseCompilerOption("dalvik.vm.image-dex2oat-cpu-set", dex2oatCpuSetImageBuf, "--cpu-set=",
|
|
||||||
"-Ximage-compiler-option");
|
|
||||||
|
|
||||||
// The runtime will compile a boot image, when necessary, not using installd. Thus, we need to
|
|
||||||
// pass the instruction-set-features/variant as an image-compiler-option.
|
|
||||||
// Note: it is OK to reuse the buffer, as the values are exactly the same between
|
|
||||||
// * compiler-option, used for runtime compilation (DexClassLoader)
|
|
||||||
// * image-compiler-option, used for boot-image compilation on device
|
|
||||||
|
|
||||||
// Copy the variant.
|
// Copy the variant.
|
||||||
sprintf(dex2oat_isa_variant_key, "dalvik.vm.isa.%s.variant", ABI_STRING);
|
sprintf(dex2oat_isa_variant_key, "dalvik.vm.isa.%s.variant", ABI_STRING);
|
||||||
parseCompilerOption(dex2oat_isa_variant_key, dex2oat_isa_variant,
|
|
||||||
"--instruction-set-variant=", "-Ximage-compiler-option");
|
|
||||||
parseCompilerOption(dex2oat_isa_variant_key, dex2oat_isa_variant,
|
parseCompilerOption(dex2oat_isa_variant_key, dex2oat_isa_variant,
|
||||||
"--instruction-set-variant=", "-Xcompiler-option");
|
"--instruction-set-variant=", "-Xcompiler-option");
|
||||||
// Copy the features.
|
// Copy the features.
|
||||||
sprintf(dex2oat_isa_features_key, "dalvik.vm.isa.%s.features", ABI_STRING);
|
sprintf(dex2oat_isa_features_key, "dalvik.vm.isa.%s.features", ABI_STRING);
|
||||||
parseCompilerOption(dex2oat_isa_features_key, dex2oat_isa_features,
|
|
||||||
"--instruction-set-features=", "-Ximage-compiler-option");
|
|
||||||
parseCompilerOption(dex2oat_isa_features_key, dex2oat_isa_features,
|
parseCompilerOption(dex2oat_isa_features_key, dex2oat_isa_features,
|
||||||
"--instruction-set-features=", "-Xcompiler-option");
|
"--instruction-set-features=", "-Xcompiler-option");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When running with debug.generate-debug-info, add --generate-debug-info to
|
||||||
|
* the compiler options so that both JITted code and the boot image extension,
|
||||||
|
* if it is compiled on device, will include native debugging information.
|
||||||
|
*/
|
||||||
|
property_get("debug.generate-debug-info", propBuf, "");
|
||||||
|
bool generate_debug_info = (strcmp(propBuf, "true") == 0);
|
||||||
|
if (generate_debug_info) {
|
||||||
|
addOption("-Xcompiler-option");
|
||||||
|
addOption("--generate-debug-info");
|
||||||
|
}
|
||||||
|
|
||||||
|
// The mini-debug-info makes it possible to backtrace through compiled code.
|
||||||
|
bool generate_mini_debug_info = property_get_bool("dalvik.vm.minidebuginfo", 0);
|
||||||
|
if (generate_mini_debug_info) {
|
||||||
|
addOption("-Xcompiler-option");
|
||||||
|
addOption("--generate-mini-debug-info");
|
||||||
|
}
|
||||||
|
|
||||||
property_get("dalvik.vm.dex2oat-flags", dex2oatFlagsBuf, "");
|
property_get("dalvik.vm.dex2oat-flags", dex2oatFlagsBuf, "");
|
||||||
parseExtraOpts(dex2oatFlagsBuf, "-Xcompiler-option");
|
parseExtraOpts(dex2oatFlagsBuf, "-Xcompiler-option");
|
||||||
@@ -1016,6 +971,53 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote, bool p
|
|||||||
property_get("dalvik.vm.extra-opts", extraOptsBuf, "");
|
property_get("dalvik.vm.extra-opts", extraOptsBuf, "");
|
||||||
parseExtraOpts(extraOptsBuf, NULL);
|
parseExtraOpts(extraOptsBuf, NULL);
|
||||||
|
|
||||||
|
// Extra options for boot image extension generation.
|
||||||
|
if (skip_compilation) {
|
||||||
|
addOption("-Xnoimage-dex2oat");
|
||||||
|
} else {
|
||||||
|
parseCompilerRuntimeOption("dalvik.vm.image-dex2oat-Xms", dex2oatXmsImageFlagsBuf,
|
||||||
|
"-Xms", "-Ximage-compiler-option");
|
||||||
|
parseCompilerRuntimeOption("dalvik.vm.image-dex2oat-Xmx", dex2oatXmxImageFlagsBuf,
|
||||||
|
"-Xmx", "-Ximage-compiler-option");
|
||||||
|
|
||||||
|
parseCompilerOption("dalvik.vm.image-dex2oat-filter", dex2oatImageCompilerFilterBuf,
|
||||||
|
"--compiler-filter=", "-Ximage-compiler-option");
|
||||||
|
|
||||||
|
// If there is a dirty-image-objects file, push it.
|
||||||
|
if (hasFile("/system/etc/dirty-image-objects")) {
|
||||||
|
addOption("-Ximage-compiler-option");
|
||||||
|
addOption("--dirty-image-objects=/system/etc/dirty-image-objects");
|
||||||
|
}
|
||||||
|
|
||||||
|
parseCompilerOption("dalvik.vm.image-dex2oat-threads", dex2oatThreadsImageBuf, "-j",
|
||||||
|
"-Ximage-compiler-option");
|
||||||
|
parseCompilerOption("dalvik.vm.image-dex2oat-cpu-set", dex2oatCpuSetImageBuf, "--cpu-set=",
|
||||||
|
"-Ximage-compiler-option");
|
||||||
|
|
||||||
|
// The runtime may compile a boot image extension, when necessary, not using installd.
|
||||||
|
// Thus, we need to pass the instruction-set-features/variant as an image-compiler-option.
|
||||||
|
// Note: it is OK to reuse the buffer, as the values are exactly the same between
|
||||||
|
// * compiler-option, used for runtime compilation (DexClassLoader)
|
||||||
|
// * image-compiler-option, used for boot-image compilation on device
|
||||||
|
parseCompilerOption(dex2oat_isa_variant_key, dex2oat_isa_variant,
|
||||||
|
"--instruction-set-variant=", "-Ximage-compiler-option");
|
||||||
|
parseCompilerOption(dex2oat_isa_features_key, dex2oat_isa_features,
|
||||||
|
"--instruction-set-features=", "-Ximage-compiler-option");
|
||||||
|
|
||||||
|
if (generate_debug_info) {
|
||||||
|
addOption("-Ximage-compiler-option");
|
||||||
|
addOption("--generate-debug-info");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (generate_mini_debug_info) {
|
||||||
|
addOption("-Ximage-compiler-option");
|
||||||
|
addOption("--generate-mini-debug-info");
|
||||||
|
}
|
||||||
|
|
||||||
|
property_get("dalvik.vm.image-dex2oat-flags", dex2oatImageFlagsBuf, "");
|
||||||
|
parseExtraOpts(dex2oatImageFlagsBuf, "-Ximage-compiler-option");
|
||||||
|
}
|
||||||
|
|
||||||
/* Set the properties for locale */
|
/* Set the properties for locale */
|
||||||
{
|
{
|
||||||
strcpy(localeOption, "-Duser.locale=");
|
strcpy(localeOption, "-Duser.locale=");
|
||||||
@@ -1073,25 +1075,6 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote, bool p
|
|||||||
parseRuntimeOption("dalvik.vm.zygote.max-boot-retry", cachePruneBuf,
|
parseRuntimeOption("dalvik.vm.zygote.max-boot-retry", cachePruneBuf,
|
||||||
"-Xzygote-max-boot-retry=");
|
"-Xzygote-max-boot-retry=");
|
||||||
|
|
||||||
/*
|
|
||||||
* When running with debug.generate-debug-info, add --generate-debug-info to
|
|
||||||
* the compiler options so that the boot image, if it is compiled on device,
|
|
||||||
* will include native debugging information.
|
|
||||||
*/
|
|
||||||
property_get("debug.generate-debug-info", propBuf, "");
|
|
||||||
if (strcmp(propBuf, "true") == 0) {
|
|
||||||
addOption("-Xcompiler-option");
|
|
||||||
addOption("--generate-debug-info");
|
|
||||||
addOption("-Ximage-compiler-option");
|
|
||||||
addOption("--generate-debug-info");
|
|
||||||
}
|
|
||||||
|
|
||||||
// The mini-debug-info makes it possible to backtrace through JIT code.
|
|
||||||
if (property_get_bool("dalvik.vm.minidebuginfo", 0)) {
|
|
||||||
addOption("-Xcompiler-option");
|
|
||||||
addOption("--generate-mini-debug-info");
|
|
||||||
}
|
|
||||||
|
|
||||||
// If set, the property below can be used to enable core platform API violation reporting.
|
// If set, the property below can be used to enable core platform API violation reporting.
|
||||||
property_get("persist.debug.dalvik.vm.core_platform_api_policy", propBuf, "");
|
property_get("persist.debug.dalvik.vm.core_platform_api_policy", propBuf, "");
|
||||||
if (propBuf[0] != '\0') {
|
if (propBuf[0] != '\0') {
|
||||||
|
|||||||
Reference in New Issue
Block a user