diff options
author | Dave Allison <dallison@google.com> | 2014-03-14 21:15:25 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-03-14 21:15:25 +0000 |
commit | 47653f2d0823bcebefc23cc2441db1f8d9e55b4c (patch) | |
tree | b7862fa33c32a8883de828f6a6066609890969d1 | |
parent | 4cde773435074809672f9de6a47b26de902a83d1 (diff) | |
parent | 07a1e2323b1e6765f220a045bd05783dd99b2914 (diff) | |
download | frameworks_base-47653f2d0823bcebefc23cc2441db1f8d9e55b4c.zip frameworks_base-47653f2d0823bcebefc23cc2441db1f8d9e55b4c.tar.gz frameworks_base-47653f2d0823bcebefc23cc2441db1f8d9e55b4c.tar.bz2 |
Merge "Move options buffers to top scope"
-rw-r--r-- | core/jni/AndroidRuntime.cpp | 52 |
1 files changed, 29 insertions, 23 deletions
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index b0835ed..649968e 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -434,6 +434,14 @@ void AndroidRuntime::parseExtraOpts(char* extraOptsBuf, const char* quotingArg) * Various arguments, most determined by system properties, are passed in. * The "mOptions" vector is updated. * + * CAUTION: when adding options in here, be careful not to put the + * char buffer inside a nested scope. Adding the buffer to the + * options using mOptions.add() does not copy the buffer, so if the + * buffer goes out of scope the option may be overwritten. It's best + * to put the buffer at the top of the function so that it is more + * unlikely that someone will surround it in a scope at a later time + * and thus introduce a bug. + * * Returns 0 on success. */ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv) @@ -468,7 +476,15 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv) kEMIntFast, kEMJitCompiler, } executionMode = kEMDefault; - + char profile_period[sizeof("-Xprofile-period:") + PROPERTY_VALUE_MAX]; + char profile_duration[sizeof("-Xprofile-duration:") + PROPERTY_VALUE_MAX]; + char profile_interval[sizeof("-Xprofile-interval:") + PROPERTY_VALUE_MAX]; + char profile_backoff[sizeof("-Xprofile-backoff:") + PROPERTY_VALUE_MAX]; + char langOption[sizeof("-Duser.language=") + 3]; + char regionOption[sizeof("-Duser.region=") + 3]; + char lockProfThresholdBuf[sizeof("-Xlockprofthreshold:") + sizeof(propBuf)]; + char jitOpBuf[sizeof("-Xjitop:") + PROPERTY_VALUE_MAX]; + char jitMethodBuf[sizeof("-Xjitmethod:") + PROPERTY_VALUE_MAX]; property_get("dalvik.vm.checkjni", propBuf, ""); if (strcmp(propBuf, "true") == 0) { @@ -669,7 +685,6 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv) //mOptions.add(opt); } - char lockProfThresholdBuf[sizeof("-Xlockprofthreshold:") + sizeof(propBuf)]; property_get("dalvik.vm.lockprof.threshold", propBuf, ""); if (strlen(propBuf) > 0) { strcpy(lockProfThresholdBuf, "-Xlockprofthreshold:"); @@ -679,7 +694,6 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv) } /* Force interpreter-only mode for selected opcodes. Eg "1-0a,3c,f1-ff" */ - char jitOpBuf[sizeof("-Xjitop:") + PROPERTY_VALUE_MAX]; property_get("dalvik.vm.jit.op", propBuf, ""); if (strlen(propBuf) > 0) { strcpy(jitOpBuf, "-Xjitop:"); @@ -689,7 +703,6 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv) } /* Force interpreter-only mode for selected methods */ - char jitMethodBuf[sizeof("-Xjitmethod:") + PROPERTY_VALUE_MAX]; property_get("dalvik.vm.jit.method", propBuf, ""); if (strlen(propBuf) > 0) { strcpy(jitMethodBuf, "-Xjitmethod:"); @@ -769,8 +782,6 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv) /* Set the properties for locale */ { - char langOption[sizeof("-Duser.language=") + 3]; - char regionOption[sizeof("-Duser.region=") + 3]; strcpy(langOption, "-Duser.language="); strcpy(regionOption, "-Duser.region="); readLocale(langOption, regionOption); @@ -785,35 +796,30 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv) * Set profiler options */ if (libart) { - char period[sizeof("-Xprofile-period:") + PROPERTY_VALUE_MAX]; - char duration[sizeof("-Xprofile-duration:") + PROPERTY_VALUE_MAX]; - char interval[sizeof("-Xprofile-interval:") + PROPERTY_VALUE_MAX]; - char backoff[sizeof("-Xprofile-backoff:") + PROPERTY_VALUE_MAX]; - // Number of seconds during profile runs. - strcpy(period, "-Xprofile-period:"); - property_get("dalvik.vm.profile.period_secs", period+17, "10"); - opt.optionString = period; + strcpy(profile_period, "-Xprofile-period:"); + property_get("dalvik.vm.profile.period_secs", profile_period+17, "10"); + opt.optionString = profile_period; mOptions.add(opt); // Length of each profile run (seconds). - strcpy(duration, "-Xprofile-duration:"); - property_get("dalvik.vm.profile.duration_secs", duration+19, "30"); - opt.optionString = duration; + strcpy(profile_duration, "-Xprofile-duration:"); + property_get("dalvik.vm.profile.duration_secs", profile_duration+19, "30"); + opt.optionString = profile_duration; mOptions.add(opt); // Polling interval during profile run (microseconds). - strcpy(interval, "-Xprofile-interval:"); - property_get("dalvik.vm.profile.interval_us", interval+19, "10000"); - opt.optionString = interval; + strcpy(profile_interval, "-Xprofile-interval:"); + property_get("dalvik.vm.profile.interval_us", profile_interval+19, "10000"); + opt.optionString = profile_interval; mOptions.add(opt); // Coefficient for period backoff. The the period is multiplied // by this value after each profile run. - strcpy(backoff, "-Xprofile-backoff:"); - property_get("dalvik.vm.profile.backoff_coeff", backoff+18, "2.0"); - opt.optionString = backoff; + strcpy(profile_backoff, "-Xprofile-backoff:"); + property_get("dalvik.vm.profile.backoff_coeff", profile_backoff+18, "2.0"); + opt.optionString = profile_backoff; mOptions.add(opt); } |