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

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

Issue 1175001: Fix LargeObjectSpace::Contains to check if addr is in new space. (Closed)
Patch Set: Created 10 years, 9 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/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-heap.cc
diff --git a/test/cctest/test-heap.cc b/test/cctest/test-heap.cc
index 45c516038d5826bb05668ab7bb15b6c1ceceae12..2b88f0f94e187280a7a0535fd26bea0f6aff4712 100644
--- a/test/cctest/test-heap.cc
+++ b/test/cctest/test-heap.cc
@@ -809,3 +809,46 @@ TEST(Iteration) {
CHECK_EQ(objs_count, next_objs_index);
CHECK_EQ(objs_count, ObjectsFoundInHeap(objs, objs_count));
}
+
+
+TEST(LargeObjectSpaceContains) {
+ InitializeVM();
+
+ int free_bytes = Heap::MaxObjectSizeInPagedSpace();
+ CHECK(Heap::CollectGarbage(free_bytes, NEW_SPACE));
+
+ Address current_top = Heap::new_space()->top();
+ Page* page = Page::FromAddress(current_top);
+ Address current_page = page->address();
+ Address next_page = current_page + Page::kPageSize;
+ int bytes_to_page = next_page - current_top;
+ if (bytes_to_page <= FixedArray::kHeaderSize) {
+ // Alas, need to cross another page to be able to
+ // put desired value.
+ next_page += Page::kPageSize;
+ bytes_to_page = next_page - current_top;
+ }
+ CHECK(bytes_to_page > FixedArray::kHeaderSize);
+
+ int* is_normal_page_ptr = &Page::FromAddress(next_page)->is_normal_page;
+ Address is_normal_page_addr = reinterpret_cast<Address>(is_normal_page_ptr);
+
+ int bytes_to_allocate = (is_normal_page_addr - current_top) + kPointerSize;
+
+ int n_elements = (bytes_to_allocate - FixedArray::kHeaderSize) /
+ kPointerSize;
+ CHECK_EQ(bytes_to_allocate, FixedArray::SizeFor(n_elements));
+ FixedArray* array = FixedArray::cast(
+ Heap::AllocateFixedArray(n_elements));
+
+ int index = n_elements - 1;
+ CHECK_EQ(is_normal_page_ptr,
+ HeapObject::RawField(array, FixedArray::OffsetOfElementAt(index)));
+ array->set(index, Smi::FromInt(0));
+ // This chould have turned next page into LargeObjectPage:
+ // CHECK(Page::FromAddress(next_page)->IsLargeObjectPage());
+
+ HeapObject* addr = HeapObject::FromAddress(next_page + 2 * kPointerSize);
+ CHECK(Heap::new_space()->Contains(addr));
+ CHECK(!Heap::lo_space()->Contains(addr));
+}
« no previous file with comments | « src/spaces.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698