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

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

Issue 1999753002: [heap] Harden heap-related cctests (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix for win Created 4 years, 7 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 | « test/cctest/heap/test-alloc.cc ('k') | test/cctest/heap/test-heap.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/cctest/heap/test-compaction.cc
diff --git a/test/cctest/heap/test-compaction.cc b/test/cctest/heap/test-compaction.cc
index b787780d25dd7bb8c7a3840d238a35b307882c31..f61f7e1c41b8cba310f0aa610402017b6df50630 100644
--- a/test/cctest/heap/test-compaction.cc
+++ b/test/cctest/heap/test-compaction.cc
@@ -4,12 +4,14 @@
#include "test/cctest/cctest.h"
#include "test/cctest/heap/heap-tester.h"
-#include "test/cctest/heap/utils-inl.h"
+#include "test/cctest/heap/heap-utils.h"
namespace v8 {
namespace internal {
-static void CheckInvariantsOfAbortedPage(Page* page) {
+namespace {
+
+void CheckInvariantsOfAbortedPage(Page* page) {
// Check invariants:
// 1) Markbits are cleared
// 2) The page is not marked as evacuation candidate anymore
@@ -19,6 +21,14 @@ static void CheckInvariantsOfAbortedPage(Page* page) {
CHECK(!page->IsFlagSet(Page::COMPACTION_WAS_ABORTED));
}
+void CheckAllObjectsOnPage(std::vector<Handle<FixedArray>>& handles,
+ Page* page) {
+ for (auto& fixed_array : handles) {
+ CHECK(Page::FromAddress(fixed_array->address()) == page);
+ }
+}
+
+} // namespace
HEAP_TEST(CompactionFullAbortedPage) {
// Test the scenario where we reach OOM during compaction and the whole page
@@ -33,20 +43,19 @@ HEAP_TEST(CompactionFullAbortedPage) {
Heap* heap = isolate->heap();
{
HandleScope scope1(isolate);
- PageIterator it(heap->old_space());
- while (it.has_next()) {
- it.next()->MarkNeverAllocateForTesting();
- }
+
+ heap::SealCurrentObjects(heap);
{
HandleScope scope2(isolate);
CHECK(heap->old_space()->Expand());
auto compaction_page_handles =
- CreatePadding(heap, Page::kAllocatableMemory, TENURED);
+ heap::CreatePadding(heap, Page::kAllocatableMemory, TENURED);
Page* to_be_aborted_page =
Page::FromAddress(compaction_page_handles.front()->address());
to_be_aborted_page->SetFlag(
MemoryChunk::FORCE_EVACUATION_CANDIDATE_FOR_TESTING);
+ CheckAllObjectsOnPage(compaction_page_handles, to_be_aborted_page);
heap->set_force_oom(true);
heap->CollectAllGarbage();
@@ -72,29 +81,29 @@ HEAP_TEST(CompactionPartiallyAbortedPage) {
FLAG_concurrent_sweeping = false;
FLAG_manual_evacuation_candidates_selection = true;
- const int object_size = 128 * KB;
+ const int objects_per_page = 10;
+ const int object_size = Page::kAllocatableMemory / objects_per_page;
CcTest::InitializeVM();
Isolate* isolate = CcTest::i_isolate();
Heap* heap = isolate->heap();
{
HandleScope scope1(isolate);
- PageIterator it(heap->old_space());
- while (it.has_next()) {
- it.next()->MarkNeverAllocateForTesting();
- }
+
+ heap::SealCurrentObjects(heap);
{
HandleScope scope2(isolate);
// Fill another page with objects of size {object_size} (last one is
// properly adjusted).
CHECK(heap->old_space()->Expand());
- auto compaction_page_handles =
- CreatePadding(heap, Page::kAllocatableMemory, TENURED, object_size);
+ auto compaction_page_handles = heap::CreatePadding(
+ heap, Page::kAllocatableMemory, TENURED, object_size);
Page* to_be_aborted_page =
Page::FromAddress(compaction_page_handles.front()->address());
to_be_aborted_page->SetFlag(
MemoryChunk::FORCE_EVACUATION_CANDIDATE_FOR_TESTING);
+ CheckAllObjectsOnPage(compaction_page_handles, to_be_aborted_page);
{
// Add another page that is filled with {num_objects} objects of size
@@ -102,8 +111,9 @@ HEAP_TEST(CompactionPartiallyAbortedPage) {
HandleScope scope3(isolate);
CHECK(heap->old_space()->Expand());
const int num_objects = 3;
- std::vector<Handle<FixedArray>> page_to_fill_handles = CreatePadding(
- heap, object_size * num_objects, TENURED, object_size);
+ std::vector<Handle<FixedArray>> page_to_fill_handles =
+ heap::CreatePadding(heap, object_size * num_objects, TENURED,
+ object_size);
Page* page_to_fill =
Page::FromAddress(page_to_fill_handles.front()->address());
@@ -145,7 +155,8 @@ HEAP_TEST(CompactionPartiallyAbortedPageIntraAbortedPointers) {
FLAG_concurrent_sweeping = false;
FLAG_manual_evacuation_candidates_selection = true;
- const int object_size = 128 * KB;
+ const int objects_per_page = 10;
+ const int object_size = Page::kAllocatableMemory / objects_per_page;
CcTest::InitializeVM();
Isolate* isolate = CcTest::i_isolate();
@@ -155,10 +166,7 @@ HEAP_TEST(CompactionPartiallyAbortedPageIntraAbortedPointers) {
Handle<FixedArray> root_array =
isolate->factory()->NewFixedArray(10, TENURED);
- PageIterator it(heap->old_space());
- while (it.has_next()) {
- it.next()->MarkNeverAllocateForTesting();
- }
+ heap::SealCurrentObjects(heap);
Page* to_be_aborted_page = nullptr;
{
@@ -167,7 +175,8 @@ HEAP_TEST(CompactionPartiallyAbortedPageIntraAbortedPointers) {
// properly adjusted).
CHECK(heap->old_space()->Expand());
std::vector<Handle<FixedArray>> compaction_page_handles =
- CreatePadding(heap, Page::kAllocatableMemory, TENURED, object_size);
+ heap::CreatePadding(heap, Page::kAllocatableMemory, TENURED,
+ object_size);
to_be_aborted_page =
Page::FromAddress(compaction_page_handles.front()->address());
to_be_aborted_page->SetFlag(
@@ -176,8 +185,8 @@ HEAP_TEST(CompactionPartiallyAbortedPageIntraAbortedPointers) {
compaction_page_handles[i]->set(0, *compaction_page_handles[i - 1]);
}
root_array->set(0, *compaction_page_handles.back());
+ CheckAllObjectsOnPage(compaction_page_handles, to_be_aborted_page);
}
-
{
// Add another page that is filled with {num_objects} objects of size
// {object_size}.
@@ -186,7 +195,7 @@ HEAP_TEST(CompactionPartiallyAbortedPageIntraAbortedPointers) {
const int num_objects = 2;
int used_memory = object_size * num_objects;
std::vector<Handle<FixedArray>> page_to_fill_handles =
- CreatePadding(heap, used_memory, TENURED, object_size);
+ heap::CreatePadding(heap, used_memory, TENURED, object_size);
Page* page_to_fill =
Page::FromAddress(page_to_fill_handles.front()->address());
@@ -233,7 +242,8 @@ HEAP_TEST(CompactionPartiallyAbortedPageWithStoreBufferEntries) {
FLAG_concurrent_sweeping = false;
FLAG_manual_evacuation_candidates_selection = true;
- const int object_size = 128 * KB;
+ const int objects_per_page = 10;
+ const int object_size = Page::kAllocatableMemory / objects_per_page;
CcTest::InitializeVM();
Isolate* isolate = CcTest::i_isolate();
@@ -242,10 +252,7 @@ HEAP_TEST(CompactionPartiallyAbortedPageWithStoreBufferEntries) {
HandleScope scope1(isolate);
Handle<FixedArray> root_array =
isolate->factory()->NewFixedArray(10, TENURED);
- PageIterator it(heap->old_space());
- while (it.has_next()) {
- it.next()->MarkNeverAllocateForTesting();
- }
+ heap::SealCurrentObjects(heap);
Page* to_be_aborted_page = nullptr;
{
@@ -253,8 +260,8 @@ HEAP_TEST(CompactionPartiallyAbortedPageWithStoreBufferEntries) {
// Fill another page with objects of size {object_size} (last one is
// properly adjusted).
CHECK(heap->old_space()->Expand());
- auto compaction_page_handles =
- CreatePadding(heap, Page::kAllocatableMemory, TENURED, object_size);
+ auto compaction_page_handles = heap::CreatePadding(
+ heap, Page::kAllocatableMemory, TENURED, object_size);
// Sanity check that we have enough space for linking up arrays.
CHECK_GE(compaction_page_handles.front()->length(), 2);
to_be_aborted_page =
@@ -270,6 +277,7 @@ HEAP_TEST(CompactionPartiallyAbortedPageWithStoreBufferEntries) {
isolate->factory()->NewFixedArray(1, NOT_TENURED);
CHECK(heap->InNewSpace(*new_space_array));
compaction_page_handles.front()->set(1, *new_space_array);
+ CheckAllObjectsOnPage(compaction_page_handles, to_be_aborted_page);
}
{
@@ -280,7 +288,7 @@ HEAP_TEST(CompactionPartiallyAbortedPageWithStoreBufferEntries) {
const int num_objects = 2;
int used_memory = object_size * num_objects;
std::vector<Handle<FixedArray>> page_to_fill_handles =
- CreatePadding(heap, used_memory, TENURED, object_size);
+ heap::CreatePadding(heap, used_memory, TENURED, object_size);
Page* page_to_fill =
Page::FromAddress(page_to_fill_handles.front()->address());
« no previous file with comments | « test/cctest/heap/test-alloc.cc ('k') | test/cctest/heap/test-heap.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698