Add a -XX:mainThreadStackSize= option.
Similar to -Xss, but for the main thread only.
Bug: 6315322
Change-Id: I84bd5974f830f348fd9a0486ae972520b4a02cc4
diff --git a/vm/Globals.h b/vm/Globals.h
index 3cc0b49..c656206 100644
--- a/vm/Globals.h
+++ b/vm/Globals.h
@@ -91,6 +91,7 @@
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 80cf9f6..09470f9 100644
--- a/vm/Init.cpp
+++ b/vm/Init.cpp
@@ -800,6 +800,9 @@
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 @@
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 @@
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 01451f3..d82f15a 100644
--- a/vm/Thread.cpp
+++ b/vm/Thread.cpp
@@ -282,7 +282,7 @@
gDvm.threadIdMap = dvmAllocBitVector(kMaxThreadId, false);
- thread = allocThread(gDvm.stackSize);
+ thread = allocThread(gDvm.mainThreadStackSize);
if (thread == NULL)
return false;