diff options
author | Andy McFadden <fadden@android.com> | 2010-07-14 16:02:20 -0700 |
---|---|---|
committer | Andy McFadden <fadden@android.com> | 2010-07-30 10:57:47 -0700 |
commit | e4d81f25bd4dc1a5c909b56ab56a56406290da30 (patch) | |
tree | 8bb0db495a1bb2037299022e7fce2a2eae59ee09 | |
parent | 01301d31a4c2e8745a3e12c9a441d2448e63d775 (diff) | |
download | frameworks_base-e4d81f25bd4dc1a5c909b56ab56a56406290da30.zip frameworks_base-e4d81f25bd4dc1a5c909b56ab56a56406290da30.tar.gz frameworks_base-e4d81f25bd4dc1a5c909b56ab56a56406290da30.tar.bz2 |
Add support for dalvik.vm.extra-opts property.
The goal here is to avoid the dalvik.vm.* property explosion by
having a single property that takes an arbitrary collection of Dalvik
command-line options. This is intended for testing of various
configurations by the Dalvik team, not industrial use.
Options should be separated by spaces, e.g.
adb shell setprop dalvik.vm.extra-opts "-showversion -Xmx4m"
will print the version banner and set the heap max to 4MB, which won't
get you very far.
The extra-opts options will appear last, which allows them to override
values set earlier (like the heap max).
Bug 2838629.
(cherry-pick from dalvik-dev branch)
Change-Id: Ibcbb1b62367cf2152798583e8722ef7e461ad19a
-rw-r--r-- | core/jni/AndroidRuntime.cpp | 41 | ||||
-rw-r--r-- | include/android_runtime/AndroidRuntime.h | 1 |
2 files changed, 41 insertions, 1 deletions
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index 3b91710..b3b33fd 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -519,6 +519,40 @@ static void readLocale(char* language, char* region) } /* + * Parse a property containing space-separated options that should be + * passed directly to the VM, e.g. "-Xmx32m -verbose:gc -Xregenmap". + * + * This will cut up "extraOptsBuf" as we chop it into individual options. + * + * Adds the strings, if any, to mOptions. + */ +void AndroidRuntime::parseExtraOpts(char* extraOptsBuf) +{ + JavaVMOption opt; + char* start; + char* end; + + memset(&opt, 0, sizeof(opt)); + start = extraOptsBuf; + while (*start != '\0') { + while (*start == ' ') /* skip leading whitespace */ + start++; + if (*start == '\0') /* was trailing ws, bail */ + break; + + end = start+1; + while (*end != ' ' && *end != '\0') /* find end of token */ + end++; + if (*end == ' ') + *end++ = '\0'; /* mark end, advance to indicate more */ + + opt.optionString = start; + mOptions.add(opt); + start = end; + } +} + +/* * Start the Dalvik Virtual Machine. * * Various arguments, most determined by system properties, are passed in. @@ -537,6 +571,7 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv) char enableAssertBuf[sizeof("-ea:")-1 + PROPERTY_VALUE_MAX]; char jniOptsBuf[sizeof("-Xjniopts:")-1 + PROPERTY_VALUE_MAX]; char heapsizeOptsBuf[sizeof("-Xmx")-1 + PROPERTY_VALUE_MAX]; + char extraOptsBuf[PROPERTY_VALUE_MAX]; char* stackTraceFile = NULL; bool checkJni = false; bool checkDexSum = false; @@ -845,7 +880,11 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv) opt.optionString = stackTraceFile; mOptions.add(opt); } - + + /* extra options; parse this late so it overrides others */ + property_get("dalvik.vm.extra-opts", extraOptsBuf, ""); + parseExtraOpts(extraOptsBuf); + /* Set the properties for locale */ { char langOption[sizeof("-Duser.language=") + 3]; diff --git a/include/android_runtime/AndroidRuntime.h b/include/android_runtime/AndroidRuntime.h index 2ded5be..22c9b72 100644 --- a/include/android_runtime/AndroidRuntime.h +++ b/include/android_runtime/AndroidRuntime.h @@ -100,6 +100,7 @@ public: private: static int startReg(JNIEnv* env); + void parseExtraOpts(char* extraOptsBuf); int startVm(JavaVM** pJavaVM, JNIEnv** pEnv); Vector<JavaVMOption> mOptions; |