| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "test/cctest/cctest.h" | 5 #include "test/cctest/cctest.h" |
| 6 #include "test/cctest/heap/heap-tester.h" | 6 #include "test/cctest/heap/heap-tester.h" |
| 7 #include "test/cctest/heap/utils-inl.h" | 7 #include "test/cctest/heap/utils-inl.h" |
| 8 | 8 |
| 9 namespace v8 { | 9 namespace v8 { |
| 10 namespace internal { | 10 namespace internal { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 CHECK(heap->old_space()->Expand()); | 43 CHECK(heap->old_space()->Expand()); |
| 44 auto compaction_page_handles = | 44 auto compaction_page_handles = |
| 45 CreatePadding(heap, Page::kAllocatableMemory, TENURED); | 45 CreatePadding(heap, Page::kAllocatableMemory, TENURED); |
| 46 Page* to_be_aborted_page = | 46 Page* to_be_aborted_page = |
| 47 Page::FromAddress(compaction_page_handles.front()->address()); | 47 Page::FromAddress(compaction_page_handles.front()->address()); |
| 48 to_be_aborted_page->SetFlag( | 48 to_be_aborted_page->SetFlag( |
| 49 MemoryChunk::FORCE_EVACUATION_CANDIDATE_FOR_TESTING); | 49 MemoryChunk::FORCE_EVACUATION_CANDIDATE_FOR_TESTING); |
| 50 | 50 |
| 51 heap->set_force_oom(true); | 51 heap->set_force_oom(true); |
| 52 heap->CollectAllGarbage(); | 52 heap->CollectAllGarbage(); |
| 53 heap->mark_compact_collector()->EnsureSweepingCompleted(); |
| 53 | 54 |
| 54 // Check that all handles still point to the same page, i.e., compaction | 55 // Check that all handles still point to the same page, i.e., compaction |
| 55 // has been aborted on the page. | 56 // has been aborted on the page. |
| 56 for (Handle<FixedArray> object : compaction_page_handles) { | 57 for (Handle<FixedArray> object : compaction_page_handles) { |
| 57 CHECK_EQ(to_be_aborted_page, Page::FromAddress(object->address())); | 58 CHECK_EQ(to_be_aborted_page, Page::FromAddress(object->address())); |
| 58 } | 59 } |
| 59 CheckInvariantsOfAbortedPage(to_be_aborted_page); | 60 CheckInvariantsOfAbortedPage(to_be_aborted_page); |
| 60 } | 61 } |
| 61 } | 62 } |
| 62 } | 63 } |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 HandleScope scope3(isolate); | 102 HandleScope scope3(isolate); |
| 102 CHECK(heap->old_space()->Expand()); | 103 CHECK(heap->old_space()->Expand()); |
| 103 const int num_objects = 3; | 104 const int num_objects = 3; |
| 104 std::vector<Handle<FixedArray>> page_to_fill_handles = CreatePadding( | 105 std::vector<Handle<FixedArray>> page_to_fill_handles = CreatePadding( |
| 105 heap, object_size * num_objects, TENURED, object_size); | 106 heap, object_size * num_objects, TENURED, object_size); |
| 106 Page* page_to_fill = | 107 Page* page_to_fill = |
| 107 Page::FromAddress(page_to_fill_handles.front()->address()); | 108 Page::FromAddress(page_to_fill_handles.front()->address()); |
| 108 | 109 |
| 109 heap->set_force_oom(true); | 110 heap->set_force_oom(true); |
| 110 heap->CollectAllGarbage(); | 111 heap->CollectAllGarbage(); |
| 112 heap->mark_compact_collector()->EnsureSweepingCompleted(); |
| 111 | 113 |
| 112 bool migration_aborted = false; | 114 bool migration_aborted = false; |
| 113 for (Handle<FixedArray> object : compaction_page_handles) { | 115 for (Handle<FixedArray> object : compaction_page_handles) { |
| 114 // Once compaction has been aborted, all following objects still have | 116 // Once compaction has been aborted, all following objects still have |
| 115 // to be on the initial page. | 117 // to be on the initial page. |
| 116 CHECK(!migration_aborted || | 118 CHECK(!migration_aborted || |
| 117 (Page::FromAddress(object->address()) == to_be_aborted_page)); | 119 (Page::FromAddress(object->address()) == to_be_aborted_page)); |
| 118 if (Page::FromAddress(object->address()) == to_be_aborted_page) { | 120 if (Page::FromAddress(object->address()) == to_be_aborted_page) { |
| 119 // This object has not been migrated. | 121 // This object has not been migrated. |
| 120 migration_aborted = true; | 122 migration_aborted = true; |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 CHECK(heap->old_space()->Expand()); | 185 CHECK(heap->old_space()->Expand()); |
| 184 const int num_objects = 2; | 186 const int num_objects = 2; |
| 185 int used_memory = object_size * num_objects; | 187 int used_memory = object_size * num_objects; |
| 186 std::vector<Handle<FixedArray>> page_to_fill_handles = | 188 std::vector<Handle<FixedArray>> page_to_fill_handles = |
| 187 CreatePadding(heap, used_memory, TENURED, object_size); | 189 CreatePadding(heap, used_memory, TENURED, object_size); |
| 188 Page* page_to_fill = | 190 Page* page_to_fill = |
| 189 Page::FromAddress(page_to_fill_handles.front()->address()); | 191 Page::FromAddress(page_to_fill_handles.front()->address()); |
| 190 | 192 |
| 191 heap->set_force_oom(true); | 193 heap->set_force_oom(true); |
| 192 heap->CollectAllGarbage(); | 194 heap->CollectAllGarbage(); |
| 195 heap->mark_compact_collector()->EnsureSweepingCompleted(); |
| 193 | 196 |
| 194 // The following check makes sure that we compacted "some" objects, while | 197 // The following check makes sure that we compacted "some" objects, while |
| 195 // leaving others in place. | 198 // leaving others in place. |
| 196 bool in_place = true; | 199 bool in_place = true; |
| 197 Handle<FixedArray> current = root_array; | 200 Handle<FixedArray> current = root_array; |
| 198 while (current->get(0) != heap->undefined_value()) { | 201 while (current->get(0) != heap->undefined_value()) { |
| 199 current = Handle<FixedArray>(FixedArray::cast(current->get(0))); | 202 current = Handle<FixedArray>(FixedArray::cast(current->get(0))); |
| 200 CHECK(current->IsFixedArray()); | 203 CHECK(current->IsFixedArray()); |
| 201 if (Page::FromAddress(current->address()) != to_be_aborted_page) { | 204 if (Page::FromAddress(current->address()) != to_be_aborted_page) { |
| 202 in_place = false; | 205 in_place = false; |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 276 CHECK(heap->old_space()->Expand()); | 279 CHECK(heap->old_space()->Expand()); |
| 277 const int num_objects = 2; | 280 const int num_objects = 2; |
| 278 int used_memory = object_size * num_objects; | 281 int used_memory = object_size * num_objects; |
| 279 std::vector<Handle<FixedArray>> page_to_fill_handles = | 282 std::vector<Handle<FixedArray>> page_to_fill_handles = |
| 280 CreatePadding(heap, used_memory, TENURED, object_size); | 283 CreatePadding(heap, used_memory, TENURED, object_size); |
| 281 Page* page_to_fill = | 284 Page* page_to_fill = |
| 282 Page::FromAddress(page_to_fill_handles.front()->address()); | 285 Page::FromAddress(page_to_fill_handles.front()->address()); |
| 283 | 286 |
| 284 heap->set_force_oom(true); | 287 heap->set_force_oom(true); |
| 285 heap->CollectAllGarbage(); | 288 heap->CollectAllGarbage(); |
| 289 heap->mark_compact_collector()->EnsureSweepingCompleted(); |
| 286 | 290 |
| 287 // The following check makes sure that we compacted "some" objects, while | 291 // The following check makes sure that we compacted "some" objects, while |
| 288 // leaving others in place. | 292 // leaving others in place. |
| 289 bool in_place = true; | 293 bool in_place = true; |
| 290 Handle<FixedArray> current = root_array; | 294 Handle<FixedArray> current = root_array; |
| 291 while (current->get(0) != heap->undefined_value()) { | 295 while (current->get(0) != heap->undefined_value()) { |
| 292 current = Handle<FixedArray>(FixedArray::cast(current->get(0))); | 296 current = Handle<FixedArray>(FixedArray::cast(current->get(0))); |
| 293 CHECK(!heap->InNewSpace(*current)); | 297 CHECK(!heap->InNewSpace(*current)); |
| 294 CHECK(current->IsFixedArray()); | 298 CHECK(current->IsFixedArray()); |
| 295 if (Page::FromAddress(current->address()) != to_be_aborted_page) { | 299 if (Page::FromAddress(current->address()) != to_be_aborted_page) { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 331 // If store buffer entries are not properly filtered/reset for aborted | 335 // If store buffer entries are not properly filtered/reset for aborted |
| 332 // pages we have now a broken address at an object slot in old space and | 336 // pages we have now a broken address at an object slot in old space and |
| 333 // the following scavenge will crash. | 337 // the following scavenge will crash. |
| 334 heap->CollectGarbage(NEW_SPACE); | 338 heap->CollectGarbage(NEW_SPACE); |
| 335 } | 339 } |
| 336 } | 340 } |
| 337 } | 341 } |
| 338 | 342 |
| 339 } // namespace internal | 343 } // namespace internal |
| 340 } // namespace v8 | 344 } // namespace v8 |
| OLD | NEW |