| 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 "src/factory.h" | 5 #include "src/factory.h" |
| 6 #include "src/heap/mark-compact.h" | 6 #include "src/heap/mark-compact.h" |
| 7 #include "src/isolate.h" | 7 #include "src/isolate.h" |
| 8 // FIXME(mstarzinger, marja): This is weird, but required because of the missing | 8 // FIXME(mstarzinger, marja): This is weird, but required because of the missing |
| 9 // (disallowed) include: src/factory.h -> src/objects-inl.h | 9 // (disallowed) include: src/factory.h -> src/objects-inl.h |
| 10 #include "src/objects-inl.h" | 10 #include "src/objects-inl.h" |
| (...skipping 29 matching lines...) Expand all Loading... |
| 40 | 40 |
| 41 } // namespace | 41 } // namespace |
| 42 | 42 |
| 43 HEAP_TEST(CompactionFullAbortedPage) { | 43 HEAP_TEST(CompactionFullAbortedPage) { |
| 44 // Test the scenario where we reach OOM during compaction and the whole page | 44 // Test the scenario where we reach OOM during compaction and the whole page |
| 45 // is aborted. | 45 // is aborted. |
| 46 | 46 |
| 47 // Disable concurrent sweeping to ensure memory is in an expected state, i.e., | 47 // Disable concurrent sweeping to ensure memory is in an expected state, i.e., |
| 48 // we can reach the state of a half aborted page. | 48 // we can reach the state of a half aborted page. |
| 49 FLAG_concurrent_sweeping = false; | 49 FLAG_concurrent_sweeping = false; |
| 50 FLAG_stress_incremental_marking = false; |
| 50 FLAG_manual_evacuation_candidates_selection = true; | 51 FLAG_manual_evacuation_candidates_selection = true; |
| 51 CcTest::InitializeVM(); | 52 CcTest::InitializeVM(); |
| 52 Isolate* isolate = CcTest::i_isolate(); | 53 Isolate* isolate = CcTest::i_isolate(); |
| 53 Heap* heap = isolate->heap(); | 54 Heap* heap = isolate->heap(); |
| 54 { | 55 { |
| 55 HandleScope scope1(isolate); | 56 HandleScope scope1(isolate); |
| 56 | 57 |
| 57 heap::SealCurrentObjects(heap); | 58 heap::SealCurrentObjects(heap); |
| 58 | 59 |
| 59 { | 60 { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 82 } | 83 } |
| 83 | 84 |
| 84 | 85 |
| 85 HEAP_TEST(CompactionPartiallyAbortedPage) { | 86 HEAP_TEST(CompactionPartiallyAbortedPage) { |
| 86 // Test the scenario where we reach OOM during compaction and parts of the | 87 // Test the scenario where we reach OOM during compaction and parts of the |
| 87 // page have already been migrated to a new one. | 88 // page have already been migrated to a new one. |
| 88 | 89 |
| 89 // Disable concurrent sweeping to ensure memory is in an expected state, i.e., | 90 // Disable concurrent sweeping to ensure memory is in an expected state, i.e., |
| 90 // we can reach the state of a half aborted page. | 91 // we can reach the state of a half aborted page. |
| 91 FLAG_concurrent_sweeping = false; | 92 FLAG_concurrent_sweeping = false; |
| 93 FLAG_stress_incremental_marking = false; |
| 92 FLAG_manual_evacuation_candidates_selection = true; | 94 FLAG_manual_evacuation_candidates_selection = true; |
| 93 | 95 |
| 94 const int objects_per_page = 10; | 96 const int objects_per_page = 10; |
| 95 const int object_size = Page::kAllocatableMemory / objects_per_page; | 97 const int object_size = Page::kAllocatableMemory / objects_per_page; |
| 96 | 98 |
| 97 CcTest::InitializeVM(); | 99 CcTest::InitializeVM(); |
| 98 Isolate* isolate = CcTest::i_isolate(); | 100 Isolate* isolate = CcTest::i_isolate(); |
| 99 Heap* heap = isolate->heap(); | 101 Heap* heap = isolate->heap(); |
| 100 { | 102 { |
| 101 HandleScope scope1(isolate); | 103 HandleScope scope1(isolate); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 | 158 |
| 157 HEAP_TEST(CompactionPartiallyAbortedPageIntraAbortedPointers) { | 159 HEAP_TEST(CompactionPartiallyAbortedPageIntraAbortedPointers) { |
| 158 // Test the scenario where we reach OOM during compaction and parts of the | 160 // Test the scenario where we reach OOM during compaction and parts of the |
| 159 // page have already been migrated to a new one. Objects on the aborted page | 161 // page have already been migrated to a new one. Objects on the aborted page |
| 160 // are linked together. This test makes sure that intra-aborted page pointers | 162 // are linked together. This test makes sure that intra-aborted page pointers |
| 161 // get properly updated. | 163 // get properly updated. |
| 162 | 164 |
| 163 // Disable concurrent sweeping to ensure memory is in an expected state, i.e., | 165 // Disable concurrent sweeping to ensure memory is in an expected state, i.e., |
| 164 // we can reach the state of a half aborted page. | 166 // we can reach the state of a half aborted page. |
| 165 FLAG_concurrent_sweeping = false; | 167 FLAG_concurrent_sweeping = false; |
| 168 FLAG_stress_incremental_marking = false; |
| 166 FLAG_manual_evacuation_candidates_selection = true; | 169 FLAG_manual_evacuation_candidates_selection = true; |
| 167 | 170 |
| 168 const int objects_per_page = 10; | 171 const int objects_per_page = 10; |
| 169 const int object_size = Page::kAllocatableMemory / objects_per_page; | 172 const int object_size = Page::kAllocatableMemory / objects_per_page; |
| 170 | 173 |
| 171 CcTest::InitializeVM(); | 174 CcTest::InitializeVM(); |
| 172 Isolate* isolate = CcTest::i_isolate(); | 175 Isolate* isolate = CcTest::i_isolate(); |
| 173 Heap* heap = isolate->heap(); | 176 Heap* heap = isolate->heap(); |
| 174 { | 177 { |
| 175 HandleScope scope1(isolate); | 178 HandleScope scope1(isolate); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 243 // page have already been migrated to a new one. Objects on the aborted page | 246 // page have already been migrated to a new one. Objects on the aborted page |
| 244 // are linked together and the very first object on the aborted page points | 247 // are linked together and the very first object on the aborted page points |
| 245 // into new space. The test verifies that the store buffer entries are | 248 // into new space. The test verifies that the store buffer entries are |
| 246 // properly cleared and rebuilt after aborting a page. Failing to do so can | 249 // properly cleared and rebuilt after aborting a page. Failing to do so can |
| 247 // result in other objects being allocated in the free space where their | 250 // result in other objects being allocated in the free space where their |
| 248 // payload looks like a valid new space pointer. | 251 // payload looks like a valid new space pointer. |
| 249 | 252 |
| 250 // Disable concurrent sweeping to ensure memory is in an expected state, i.e., | 253 // Disable concurrent sweeping to ensure memory is in an expected state, i.e., |
| 251 // we can reach the state of a half aborted page. | 254 // we can reach the state of a half aborted page. |
| 252 FLAG_concurrent_sweeping = false; | 255 FLAG_concurrent_sweeping = false; |
| 256 FLAG_stress_incremental_marking = false; |
| 253 FLAG_manual_evacuation_candidates_selection = true; | 257 FLAG_manual_evacuation_candidates_selection = true; |
| 254 | 258 |
| 255 const int objects_per_page = 10; | 259 const int objects_per_page = 10; |
| 256 const int object_size = Page::kAllocatableMemory / objects_per_page; | 260 const int object_size = Page::kAllocatableMemory / objects_per_page; |
| 257 | 261 |
| 258 CcTest::InitializeVM(); | 262 CcTest::InitializeVM(); |
| 259 Isolate* isolate = CcTest::i_isolate(); | 263 Isolate* isolate = CcTest::i_isolate(); |
| 260 Heap* heap = isolate->heap(); | 264 Heap* heap = isolate->heap(); |
| 261 { | 265 { |
| 262 HandleScope scope1(isolate); | 266 HandleScope scope1(isolate); |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 // If store buffer entries are not properly filtered/reset for aborted | 357 // If store buffer entries are not properly filtered/reset for aborted |
| 354 // pages we have now a broken address at an object slot in old space and | 358 // pages we have now a broken address at an object slot in old space and |
| 355 // the following scavenge will crash. | 359 // the following scavenge will crash. |
| 356 CcTest::CollectGarbage(NEW_SPACE); | 360 CcTest::CollectGarbage(NEW_SPACE); |
| 357 } | 361 } |
| 358 } | 362 } |
| 359 } | 363 } |
| 360 | 364 |
| 361 } // namespace internal | 365 } // namespace internal |
| 362 } // namespace v8 | 366 } // namespace v8 |
| OLD | NEW |