summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2012-04-12 16:01:09 -0700
committerThe Android Automerger <android-build@android.com>2012-04-13 16:31:18 -0700
commit7222596c216393e5386b260a0b19082cf4a0d0ec (patch)
tree0825e71c7a54804b58164a8639254ff625d3d67a
parent3ca3a08391dc962ce8834c646d511dd35d49816b (diff)
downloaddalvik-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.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;