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

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

Issue 1314493007: [heap] Add compaction space. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebase Created 5 years, 4 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
« no previous file with comments | « src/heap/spaces.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/cctest/test-spaces.cc
diff --git a/test/cctest/test-spaces.cc b/test/cctest/test-spaces.cc
index 86500c52d3658eeb31ca19a79500714413b7469d..520a0bd877f9588244fb889c563aecf352c40df7 100644
--- a/test/cctest/test-spaces.cc
+++ b/test/cctest/test-spaces.cc
@@ -305,40 +305,44 @@ TEST(MemoryAllocator) {
Heap* heap = isolate->heap();
MemoryAllocator* memory_allocator = new MemoryAllocator(isolate);
+ CHECK(memory_allocator != nullptr);
CHECK(memory_allocator->SetUp(heap->MaxReserved(),
heap->MaxExecutableSize()));
+ TestMemoryAllocatorScope test_scope(isolate, memory_allocator);
- int total_pages = 0;
- OldSpace faked_space(heap, OLD_SPACE, NOT_EXECUTABLE);
- Page* first_page = memory_allocator->AllocatePage(
- faked_space.AreaSize(), &faked_space, NOT_EXECUTABLE);
+ {
+ int total_pages = 0;
+ OldSpace faked_space(heap, OLD_SPACE, NOT_EXECUTABLE);
+ Page* first_page = memory_allocator->AllocatePage(
+ faked_space.AreaSize(), &faked_space, NOT_EXECUTABLE);
+
+ first_page->InsertAfter(faked_space.anchor()->prev_page());
+ CHECK(first_page->is_valid());
+ CHECK(first_page->next_page() == faked_space.anchor());
+ total_pages++;
+
+ for (Page* p = first_page; p != faked_space.anchor(); p = p->next_page()) {
+ CHECK(p->owner() == &faked_space);
+ }
- first_page->InsertAfter(faked_space.anchor()->prev_page());
- CHECK(first_page->is_valid());
- CHECK(first_page->next_page() == faked_space.anchor());
- total_pages++;
+ // Again, we should get n or n - 1 pages.
+ Page* other = memory_allocator->AllocatePage(faked_space.AreaSize(),
+ &faked_space, NOT_EXECUTABLE);
+ CHECK(other->is_valid());
+ total_pages++;
+ other->InsertAfter(first_page);
+ int page_count = 0;
+ for (Page* p = first_page; p != faked_space.anchor(); p = p->next_page()) {
+ CHECK(p->owner() == &faked_space);
+ page_count++;
+ }
+ CHECK(total_pages == page_count);
- for (Page* p = first_page; p != faked_space.anchor(); p = p->next_page()) {
- CHECK(p->owner() == &faked_space);
- }
+ Page* second_page = first_page->next_page();
+ CHECK(second_page->is_valid());
- // Again, we should get n or n - 1 pages.
- Page* other = memory_allocator->AllocatePage(
- faked_space.AreaSize(), &faked_space, NOT_EXECUTABLE);
- CHECK(other->is_valid());
- total_pages++;
- other->InsertAfter(first_page);
- int page_count = 0;
- for (Page* p = first_page; p != faked_space.anchor(); p = p->next_page()) {
- CHECK(p->owner() == &faked_space);
- page_count++;
+ // OldSpace's destructor will tear down the space and free up all pages.
}
- CHECK(total_pages == page_count);
-
- Page* second_page = first_page->next_page();
- CHECK(second_page->is_valid());
- memory_allocator->Free(first_page);
- memory_allocator->Free(second_page);
memory_allocator->TearDown();
delete memory_allocator;
}
@@ -388,13 +392,55 @@ TEST(OldSpace) {
s->AllocateRawUnaligned(Page::kMaxRegularHeapObjectSize).ToObjectChecked();
}
- s->TearDown();
delete s;
memory_allocator->TearDown();
delete memory_allocator;
}
+TEST(CompactionSpace) {
+ Isolate* isolate = CcTest::i_isolate();
+ Heap* heap = isolate->heap();
+ MemoryAllocator* memory_allocator = new MemoryAllocator(isolate);
+ CHECK(memory_allocator != nullptr);
+ CHECK(
+ memory_allocator->SetUp(heap->MaxReserved(), heap->MaxExecutableSize()));
+ TestMemoryAllocatorScope test_scope(isolate, memory_allocator);
+
+ CompactionSpace* compaction_space =
+ new CompactionSpace(heap, OLD_SPACE, NOT_EXECUTABLE);
+ CHECK(compaction_space != NULL);
+ CHECK(compaction_space->SetUp());
+
+ OldSpace* old_space = new OldSpace(heap, OLD_SPACE, NOT_EXECUTABLE);
+ CHECK(old_space != NULL);
+ CHECK(old_space->SetUp());
+
+ // Cannot loop until "Available()" since we initially have 0 bytes available
+ // and would thus neither grow, nor be able to allocate an object.
+ const int kNumObjects = 100;
+ const int kExpectedPages = kNumObjects;
+ for (int i = 0; i < kNumObjects; i++) {
+ compaction_space->AllocateRawUnaligned(Page::kMaxRegularHeapObjectSize)
+ .ToObjectChecked();
+ }
+ int pages_in_old_space = old_space->CountTotalPages();
+ int pages_in_compaction_space = compaction_space->CountTotalPages();
+ CHECK_EQ(pages_in_compaction_space, kExpectedPages);
+ CHECK_LE(pages_in_old_space, 1);
+
+ old_space->MergeCompactionSpace(compaction_space);
+ CHECK_EQ(old_space->CountTotalPages(),
+ pages_in_old_space + pages_in_compaction_space);
+
+ delete compaction_space;
+ delete old_space;
+
+ memory_allocator->TearDown();
+ delete memory_allocator;
+}
+
+
TEST(LargeObjectSpace) {
v8::V8::Initialize();
« no previous file with comments | « src/heap/spaces.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698