summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2012-04-12 16:01:09 -0700
committerElliott Hughes <enh@google.com>2012-04-12 16:01:09 -0700
commitce6603b52e6b2ef947cb308b1d7157e357bcba02 (patch)
treeba427180d484f1738c99598cfd4196451c8726b0
parentb5f95ddf3c6d9f3fd9cf3ab9a9aab50e0e823272 (diff)
downloaddalvik-ce6603b52e6b2ef947cb308b1d7157e357bcba02.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.h1
-rw-r--r--vm/Init.cpp19
-rw-r--r--vm/Thread.cpp2
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;