Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Unified Diff: test/cctest/test-heap.cc

Issue 1361853005: [heap] Prepare code for smaller large object allocation limit than max allocatable memory. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: test/cctest/test-heap.cc
diff --git a/test/cctest/test-heap.cc b/test/cctest/test-heap.cc
index add16ad9c45bcb852656bcf5a9a3a35aed1446bb..8204b0fb5ab1fd334beebf9dbfca9bd6a6bb1122 100644
--- a/test/cctest/test-heap.cc
+++ b/test/cctest/test-heap.cc
@@ -5529,8 +5529,8 @@ TEST(ArrayShiftSweeping) {
Heap* heap = isolate->heap();
v8::Local<v8::Value> result = CompileRun(
- "var array = new Array(40000);"
- "var tmp = new Array(100000);"
+ "var array = new Array(400);"
+ "var tmp = new Array(1000);"
"array[0] = 10;"
"gc();"
"gc();"
@@ -5609,26 +5609,46 @@ UNINITIALIZED_TEST(PromotionQueue) {
}
heap->CollectGarbage(NEW_SPACE);
- // Create the first huge object which will exactly fit the first semi-space
- // page.
- int new_linear_size =
+ // Create many big objects to fill up the first semi-space page.
Michael Lippautz 2015/09/30 14:14:24 Can't you use your CreatePadding() function here?
Hannes Payer (out of office) 2015/10/05 13:13:10 Done.
+ int free_memory =
static_cast<int>(*heap->new_space()->allocation_limit_address() -
*heap->new_space()->allocation_top_address());
- int length = new_linear_size / kPointerSize - FixedArray::kHeaderSize;
- Handle<FixedArray> first =
- i_isolate->factory()->NewFixedArray(length, NOT_TENURED);
- CHECK(heap->InNewSpace(*first));
-
- // Create the second huge object of maximum allocatable second semi-space
- // page size.
- new_linear_size =
+ const int max_number_of_objects = 20;
+ Handle<FixedArray> big_objects_1[max_number_of_objects];
+ int allocate_memory;
+ int length;
+ for (int i = 0; i < max_number_of_objects && free_memory > 0; i++) {
+ if (free_memory > Page::kMaxRegularHeapObjectSize) {
+ allocate_memory = Page::kMaxRegularHeapObjectSize;
+ } else {
+ allocate_memory = free_memory;
+ }
+ length = (allocate_memory - FixedArray::kHeaderSize) / kPointerSize;
+ DCHECK(length > 0);
+ big_objects_1[i] =
+ i_isolate->factory()->NewFixedArray(length, NOT_TENURED);
+ CHECK(heap->InNewSpace(*big_objects_1[i]));
+ free_memory -= allocate_memory;
+ }
+
+ // Create again big objects to fill up the next semi-space page.
+ free_memory =
static_cast<int>(*heap->new_space()->allocation_limit_address() -
*heap->new_space()->allocation_top_address());
- length = Page::kMaxRegularHeapObjectSize / kPointerSize -
- FixedArray::kHeaderSize;
- Handle<FixedArray> second =
- i_isolate->factory()->NewFixedArray(length, NOT_TENURED);
- CHECK(heap->InNewSpace(*second));
+ Handle<FixedArray> big_objects_2[max_number_of_objects];
+ for (int i = 0; i < max_number_of_objects && free_memory > 0; i++) {
+ if (free_memory > Page::kMaxRegularHeapObjectSize) {
+ allocate_memory = Page::kMaxRegularHeapObjectSize;
+ } else {
+ allocate_memory = free_memory;
+ }
+ length = (allocate_memory - FixedArray::kHeaderSize) / kPointerSize;
+ DCHECK(length > 0);
+ big_objects_2[i] =
+ i_isolate->factory()->NewFixedArray(length, NOT_TENURED);
+ CHECK(heap->InNewSpace(*big_objects_2[i]));
+ free_memory -= allocate_memory;
+ }
// This scavenge will corrupt memory if the promotion queue is not
// evacuated.
@@ -5654,19 +5674,11 @@ TEST(Regress388880) {
int desired_offset = Page::kPageSize - map1->instance_size();
- // Allocate fixed array in old pointer space so, that object allocated
+ // Allocate padding objects in old pointer space so, that object allocated
// afterwards would end at the end of the page.
- {
- SimulateFullSpace(heap->old_space());
- int padding_size = desired_offset - Page::kObjectStartOffset;
- int padding_array_length =
- (padding_size - FixedArray::kHeaderSize) / kPointerSize;
-
- Handle<FixedArray> temp2 =
- factory->NewFixedArray(padding_array_length, TENURED);
- Page* page = Page::FromAddress(temp2->address());
- CHECK_EQ(Page::kObjectStartOffset, page->Offset(temp2->address()));
- }
+ SimulateFullSpace(heap->old_space());
+ int padding_size = desired_offset - Page::kObjectStartOffset;
+ CreatePadding(heap, padding_size, TENURED);
Handle<JSObject> o = factory->NewJSObjectFromMap(map1, TENURED);
o->set_properties(*factory->empty_fixed_array());

Powered by Google App Engine
This is Rietveld 408576698