mirror of
https://github.com/dart-lang/sdk
synced 2024-10-04 16:04:53 +00:00
[VM/Runtime] Check for valid values specified for old_gen_heap_size and
new_gen_semi_max_size TEST=new unit test Change-Id: I3dd985baf28c1e876c128252c15b8566d22b170d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/212267 Commit-Queue: Siva Annamalai <asiva@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com>
This commit is contained in:
parent
e44b653283
commit
2785fe9996
|
@ -89,6 +89,52 @@ UNIT_TEST_CASE(DartAPI_DartInitializeCallsCodeObserver) {
|
|||
EXPECT(Dart_Cleanup() == NULL);
|
||||
}
|
||||
|
||||
UNIT_TEST_CASE(DartAPI_DartInitializeHeapSizes) {
|
||||
Dart_InitializeParams params;
|
||||
memset(¶ms, 0, sizeof(Dart_InitializeParams));
|
||||
params.version = DART_INITIALIZE_PARAMS_CURRENT_VERSION;
|
||||
params.vm_snapshot_data = TesterState::vm_snapshot_data;
|
||||
params.create_group = TesterState::create_callback;
|
||||
params.shutdown_isolate = TesterState::shutdown_callback;
|
||||
params.cleanup_group = TesterState::group_cleanup_callback;
|
||||
params.start_kernel_isolate = true;
|
||||
|
||||
// Initialize with a normal heap size specification.
|
||||
const char* options_1[] = {"--old-gen-heap-size=3192",
|
||||
"--new-gen-semi-max-size=32"};
|
||||
EXPECT(Dart_SetVMFlags(2, options_1) == NULL);
|
||||
EXPECT(Dart_Initialize(¶ms) == NULL);
|
||||
EXPECT(FLAG_old_gen_heap_size == 3192);
|
||||
EXPECT(FLAG_new_gen_semi_max_size == 32);
|
||||
EXPECT(Dart_Cleanup() == NULL);
|
||||
|
||||
const char* options_2[] = {"--old-gen-heap-size=16384",
|
||||
"--new-gen-semi-max-size=16384"};
|
||||
EXPECT(Dart_SetVMFlags(2, options_2) == NULL);
|
||||
EXPECT(Dart_Initialize(¶ms) == NULL);
|
||||
if (kMaxAddrSpaceMB == 4096) {
|
||||
EXPECT(FLAG_old_gen_heap_size == 0);
|
||||
EXPECT(FLAG_new_gen_semi_max_size == kDefaultNewGenSemiMaxSize);
|
||||
} else {
|
||||
EXPECT(FLAG_old_gen_heap_size == 16384);
|
||||
EXPECT(FLAG_new_gen_semi_max_size == 16384);
|
||||
}
|
||||
EXPECT(Dart_Cleanup() == NULL);
|
||||
|
||||
const char* options_3[] = {"--old-gen-heap-size=30720",
|
||||
"--new-gen-semi-max-size=30720"};
|
||||
EXPECT(Dart_SetVMFlags(2, options_3) == NULL);
|
||||
EXPECT(Dart_Initialize(¶ms) == NULL);
|
||||
if (kMaxAddrSpaceMB == 4096) {
|
||||
EXPECT(FLAG_old_gen_heap_size == 0);
|
||||
EXPECT(FLAG_new_gen_semi_max_size == kDefaultNewGenSemiMaxSize);
|
||||
} else {
|
||||
EXPECT(FLAG_old_gen_heap_size == 30720);
|
||||
EXPECT(FLAG_new_gen_semi_max_size == 30720);
|
||||
}
|
||||
EXPECT(Dart_Cleanup() == NULL);
|
||||
}
|
||||
|
||||
TEST_CASE(Dart_KillIsolate) {
|
||||
const char* kScriptChars =
|
||||
"int testMain() {\n"
|
||||
|
|
|
@ -152,7 +152,7 @@ constexpr bool FLAG_support_il_printer = false;
|
|||
"Maximum number of polymorphic check, otherwise it is megamorphic.") \
|
||||
P(max_equality_polymorphic_checks, int, 32, \
|
||||
"Maximum number of polymorphic checks in equality operator,") \
|
||||
P(new_gen_semi_max_size, int, (kWordSize <= 4) ? 8 : 16, \
|
||||
P(new_gen_semi_max_size, int, kDefaultNewGenSemiMaxSize, \
|
||||
"Max size of new gen semi space in MB") \
|
||||
P(new_gen_semi_initial_size, int, (kWordSize <= 4) ? 1 : 2, \
|
||||
"Initial size of new gen semi space in MB") \
|
||||
|
|
|
@ -42,17 +42,19 @@ static constexpr int kCompressedWordSize = kWordSize;
|
|||
static constexpr int kCompressedWordSizeLog2 = kWordSizeLog2;
|
||||
typedef uintptr_t compressed_uword;
|
||||
#endif
|
||||
const int kMaxAddrSpaceMB = (kWordSize <= 4) ? 4096 : kMaxInt;
|
||||
|
||||
// Number of bytes per BigInt digit.
|
||||
const intptr_t kBytesPerBigIntDigit = 4;
|
||||
|
||||
// The default old gen heap size in MB, where 0 == unlimited.
|
||||
// The default old gen heap size in MB, where 0 -- unlimited.
|
||||
// 32-bit: OS limit is 2 or 3 GB
|
||||
// 64-bit: Linux's limit is
|
||||
// sysctl vm.max_map_count (default 2^16) * 512 KB OldPages = 32 GB
|
||||
// Set the VM limit below the OS limit to increase the likelihood of failing
|
||||
// gracefully with a Dart OutOfMemory exception instead of SIGABORT.
|
||||
const intptr_t kDefaultMaxOldGenHeapSize = (kWordSize <= 4) ? 1536 : 30720;
|
||||
const intptr_t kDefaultNewGenSemiMaxSize = (kWordSize <= 4) ? 8 : 16;
|
||||
|
||||
#define kPosInfinity bit_cast<double>(DART_UINT64_C(0x7ff0000000000000))
|
||||
#define kNegInfinity bit_cast<double>(DART_UINT64_C(0xfff0000000000000))
|
||||
|
|
|
@ -52,6 +52,22 @@ intptr_t VirtualMemory::CalculatePageSize() {
|
|||
}
|
||||
|
||||
void VirtualMemory::Init() {
|
||||
if (FLAG_old_gen_heap_size < 0 || FLAG_old_gen_heap_size > kMaxAddrSpaceMB) {
|
||||
OS::PrintErr(
|
||||
"warning: value specified for --old_gen_heap_size %d is larger than"
|
||||
" the physically addressable range, using 0(unlimited) instead.`\n",
|
||||
FLAG_old_gen_heap_size);
|
||||
FLAG_old_gen_heap_size = 0;
|
||||
}
|
||||
if (FLAG_new_gen_semi_max_size < 0 ||
|
||||
FLAG_new_gen_semi_max_size > kMaxAddrSpaceMB) {
|
||||
OS::PrintErr(
|
||||
"warning: value specified for --new_gen_semi_max_size %d is larger"
|
||||
" than the physically addressable range, using %" Pd " instead.`\n",
|
||||
FLAG_new_gen_semi_max_size, kDefaultNewGenSemiMaxSize);
|
||||
FLAG_new_gen_semi_max_size = kDefaultNewGenSemiMaxSize;
|
||||
}
|
||||
|
||||
#if defined(DART_COMPRESSED_POINTERS)
|
||||
if (compressed_heap_vmar_ == ZX_HANDLE_INVALID) {
|
||||
const zx_vm_option_t align_flag =
|
||||
|
|
|
@ -105,8 +105,22 @@ static MemoryRegion ClipToAlignedRegion(MemoryRegion region, size_t alignment) {
|
|||
#endif // LARGE_RESERVATIONS_MAY_FAIL
|
||||
|
||||
void VirtualMemory::Init() {
|
||||
if (FLAG_old_gen_heap_size < 0 || FLAG_old_gen_heap_size > kMaxAddrSpaceMB) {
|
||||
OS::PrintErr(
|
||||
"warning: value specified for --old_gen_heap_size %d is larger than"
|
||||
" the physically addressable range, using 0(unlimited) instead.`\n",
|
||||
FLAG_old_gen_heap_size);
|
||||
FLAG_old_gen_heap_size = 0;
|
||||
}
|
||||
if (FLAG_new_gen_semi_max_size < 0 ||
|
||||
FLAG_new_gen_semi_max_size > kMaxAddrSpaceMB) {
|
||||
OS::PrintErr(
|
||||
"warning: value specified for --new_gen_semi_max_size %d is larger"
|
||||
" than the physically addressable range, using %" Pd " instead.`\n",
|
||||
FLAG_new_gen_semi_max_size, kDefaultNewGenSemiMaxSize);
|
||||
FLAG_new_gen_semi_max_size = kDefaultNewGenSemiMaxSize;
|
||||
}
|
||||
page_size_ = CalculatePageSize();
|
||||
|
||||
#if defined(DART_COMPRESSED_POINTERS)
|
||||
ASSERT(compressed_heap_ == nullptr);
|
||||
#if defined(LARGE_RESERVATIONS_MAY_FAIL)
|
||||
|
|
|
@ -53,8 +53,22 @@ static void* AllocateAlignedImpl(intptr_t size,
|
|||
}
|
||||
|
||||
void VirtualMemory::Init() {
|
||||
if (FLAG_old_gen_heap_size < 0 || FLAG_old_gen_heap_size > kMaxAddrSpaceMB) {
|
||||
OS::PrintErr(
|
||||
"warning: value specified for --old_gen_heap_size %d is larger than"
|
||||
" the physically addressable range, using 0(unlimited) instead.`\n",
|
||||
FLAG_old_gen_heap_size);
|
||||
FLAG_old_gen_heap_size = 0;
|
||||
}
|
||||
if (FLAG_new_gen_semi_max_size < 0 ||
|
||||
FLAG_new_gen_semi_max_size > kMaxAddrSpaceMB) {
|
||||
OS::PrintErr(
|
||||
"warning: value specified for --new_gen_semi_max_size %d is larger"
|
||||
" than the physically addressable range, using %" Pd " instead.`\n",
|
||||
FLAG_new_gen_semi_max_size, kDefaultNewGenSemiMaxSize);
|
||||
FLAG_new_gen_semi_max_size = kDefaultNewGenSemiMaxSize;
|
||||
}
|
||||
page_size_ = CalculatePageSize();
|
||||
|
||||
#if defined(DART_COMPRESSED_POINTERS)
|
||||
ASSERT(compressed_heap_ == nullptr);
|
||||
compressed_heap_ = Reserve(kCompressedHeapSize, kCompressedHeapAlignment);
|
||||
|
|
Loading…
Reference in a new issue