diff options
author | Elliott Hughes <enh@google.com> | 2012-04-12 16:01:09 -0700 |
---|---|---|
committer | The Android Automerger <android-build@android.com> | 2012-04-13 16:31:18 -0700 |
commit | 7222596c216393e5386b260a0b19082cf4a0d0ec (patch) | |
tree | 0825e71c7a54804b58164a8639254ff625d3d67a | |
parent | 3ca3a08391dc962ce8834c646d511dd35d49816b (diff) | |
download | dalvik-7222596c216393e5386b260a0b19082cf4a0d0ec.tar.gz |
Add a -XX:mainThreadStackSize= option.
Similar to -Xss, but for the main thread only.
Bug: 6315322
Change-Id: I84bd5974f830f348fd9a0486ae972520b4a02cc4
-rw-r--r-- | vm/Globals.h | 1 | ||||
-rw-r--r-- | vm/Init.cpp | 19 | ||||
-rw-r--r-- | vm/Thread.cpp | 2 |
3 files changed, 21 insertions, 1 deletions
diff --git a/vm/Globals.h b/vm/Globals.h index 3cc0b49e2..c656206c6 100644 --- a/vm/Globals.h +++ b/vm/Globals.h @@ -91,6 +91,7 @@ struct DvmGlobals { size_t heapMaximumSize; size_t heapGrowthLimit; size_t stackSize; + size_t mainThreadStackSize; bool verboseGc; bool verboseJni; diff --git a/vm/Init.cpp b/vm/Init.cpp index 80cf9f64e..09470f9f9 100644 --- a/vm/Init.cpp +++ b/vm/Init.cpp @@ -800,6 +800,9 @@ static int processOptions(int argc, const char* const argv[], if (val != 0) { if (val >= kMinStackSize && val <= kMaxStackSize) { gDvm.stackSize = val; + if (val > gDvm.mainThreadStackSize) { + gDvm.mainThreadStackSize = val; + } } else { dvmFprintf(stderr, "Invalid -Xss '%s', range is %d to %d\n", argv[i], kMinStackSize, kMaxStackSize); @@ -810,6 +813,21 @@ static int processOptions(int argc, const char* const argv[], return -1; } + } else if (strncmp(argv[i], "-XX:mainThreadStackSize=", strlen("-XX:mainThreadStackSize=")) == 0) { + size_t val = parseMemOption(argv[i] + strlen("-XX:mainThreadStackSize="), 1); + if (val != 0) { + if (val >= kMinStackSize && val <= kMaxStackSize) { + gDvm.mainThreadStackSize = val; + } else { + dvmFprintf(stderr, "Invalid -XX:mainThreadStackSize '%s', range is %d to %d\n", + argv[i], kMinStackSize, kMaxStackSize); + return -1; + } + } else { + dvmFprintf(stderr, "Invalid -XX:mainThreadStackSize option '%s'\n", argv[i]); + return -1; + } + } else if (strncmp(argv[i], "-XX:+DisableExplicitGC", 22) == 0) { gDvm.disableExplicitGc = true; } else if (strcmp(argv[i], "-verbose") == 0 || @@ -1056,6 +1074,7 @@ static void setCommandLineDefaults() gDvm.heapMaximumSize = 16 * 1024 * 1024; // Spec says 75% physical mem gDvm.heapGrowthLimit = 0; // 0 means no growth limit gDvm.stackSize = kDefaultStackSize; + gDvm.mainThreadStackSize = kDefaultStackSize; gDvm.concurrentMarkSweep = true; diff --git a/vm/Thread.cpp b/vm/Thread.cpp index 01451f3a6..d82f15afe 100644 --- a/vm/Thread.cpp +++ b/vm/Thread.cpp @@ -282,7 +282,7 @@ bool dvmThreadStartup() gDvm.threadIdMap = dvmAllocBitVector(kMaxThreadId, false); - thread = allocThread(gDvm.stackSize); + thread = allocThread(gDvm.mainThreadStackSize); if (thread == NULL) return false; |