Chromium Code Reviews| Index: runtime/vm/heap_test.cc |
| diff --git a/runtime/vm/heap_test.cc b/runtime/vm/heap_test.cc |
| index b594807cf850a2517afe6b10f50ed664c22c5e3d..9c0dbba33b1bed727ee16bd0cb2b0468e4dcfb00 100644 |
| --- a/runtime/vm/heap_test.cc |
| +++ b/runtime/vm/heap_test.cc |
| @@ -363,4 +363,203 @@ ISOLATE_UNIT_TEST_CASE(BecomeForwardRememberedObject) { |
| EXPECT(before_obj.raw() == after_obj.raw()); |
| } |
|
rmacnak
2017/06/19 19:29:00
Two lines between functions in cc files.
|
| +ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_DeadOldToNew) { |
| + Isolate* isolate = Isolate::Current(); |
| + Heap* heap = isolate->heap(); |
| + |
| + heap->CollectAllGarbage(); |
| + intptr_t size_before = |
| + heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); |
| + |
| + Array& old = Array::Handle(Array::New(1, Heap::kOld)); |
| + Array& neu = Array::Handle(Array::New(1, Heap::kNew)); |
| + old.SetAt(0, neu); |
| + old = Array::null(); |
| + neu = Array::null(); |
| + |
| + heap->CollectAllGarbage(); |
| + |
| + intptr_t size_after = |
| + heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); |
| + |
| + EXPECT(size_before == size_after); |
| +} |
| + |
| +ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_DeadNewToOld) { |
| + Isolate* isolate = Isolate::Current(); |
| + Heap* heap = isolate->heap(); |
| + |
| + heap->CollectAllGarbage(); |
| + intptr_t size_before = |
| + heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); |
| + |
| + Array& old = Array::Handle(Array::New(1, Heap::kOld)); |
| + Array& neu = Array::Handle(Array::New(1, Heap::kNew)); |
| + neu.SetAt(0, old); |
| + old = Array::null(); |
| + neu = Array::null(); |
| + |
| + heap->CollectAllGarbage(); |
| + |
| + intptr_t size_after = |
| + heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); |
| + |
| + EXPECT(size_before == size_after); |
| +} |
| + |
| +ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_DeadGenCycle) { |
| + Isolate* isolate = Isolate::Current(); |
| + Heap* heap = isolate->heap(); |
| + |
| + heap->CollectAllGarbage(); |
| + intptr_t size_before = |
| + heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); |
| + |
| + Array& old = Array::Handle(Array::New(1, Heap::kOld)); |
| + Array& neu = Array::Handle(Array::New(1, Heap::kNew)); |
| + neu.SetAt(0, old); |
| + old.SetAt(0, neu); |
| + old = Array::null(); |
| + neu = Array::null(); |
| + |
| + heap->CollectAllGarbage(); |
| + |
| + intptr_t size_after = |
| + heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); |
| + |
| + EXPECT(size_before == size_after); |
| +} |
| + |
| +ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveNewToOld) { |
| + Isolate* isolate = Isolate::Current(); |
| + Heap* heap = isolate->heap(); |
| + |
| + heap->CollectAllGarbage(); |
| + intptr_t size_before = |
| + heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); |
| + |
| + Array& old = Array::Handle(Array::New(1, Heap::kOld)); |
| + Array& neu = Array::Handle(Array::New(1, Heap::kNew)); |
| + neu.SetAt(0, old); |
| + old = Array::null(); |
| + |
| + heap->CollectAllGarbage(); |
| + |
| + intptr_t size_after = |
| + heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); |
| + |
| + EXPECT(size_before < size_after); |
| +} |
| + |
| +ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveOldToNew) { |
| + Isolate* isolate = Isolate::Current(); |
| + Heap* heap = isolate->heap(); |
| + |
| + heap->CollectAllGarbage(); |
| + intptr_t size_before = |
| + heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); |
| + |
| + Array& old = Array::Handle(Array::New(1, Heap::kOld)); |
| + Array& neu = Array::Handle(Array::New(1, Heap::kNew)); |
| + old.SetAt(0, neu); |
| + neu = Array::null(); |
| + |
| + heap->CollectAllGarbage(); |
| + |
| + intptr_t size_after = |
| + heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); |
| + |
| + EXPECT(size_before < size_after); |
| +} |
| + |
| +ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveOldDeadNew) { |
| + Isolate* isolate = Isolate::Current(); |
| + Heap* heap = isolate->heap(); |
| + |
| + heap->CollectAllGarbage(); |
| + intptr_t size_before = |
| + heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); |
| + |
| + Array& old = Array::Handle(Array::New(1, Heap::kOld)); |
| + Array& neu = Array::Handle(Array::New(1, Heap::kNew)); |
| + neu = Array::null(); |
| + old.SetAt(0, old); |
| + |
| + heap->CollectAllGarbage(); |
| + |
| + intptr_t size_after = |
| + heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); |
| + |
| + EXPECT(size_before < size_after); |
| +} |
| + |
| +ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveNewDeadOld) { |
| + Isolate* isolate = Isolate::Current(); |
| + Heap* heap = isolate->heap(); |
| + |
| + heap->CollectAllGarbage(); |
| + intptr_t size_before = |
| + heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); |
| + |
| + Array& old = Array::Handle(Array::New(1, Heap::kOld)); |
| + Array& neu = Array::Handle(Array::New(1, Heap::kNew)); |
| + old = Array::null(); |
| + neu.SetAt(0, neu); |
| + |
| + heap->CollectAllGarbage(); |
| + |
| + intptr_t size_after = |
| + heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); |
| + |
| + EXPECT(size_before < size_after); |
| +} |
| + |
| +ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveNewToOldChain) { |
| + Isolate* isolate = Isolate::Current(); |
| + Heap* heap = isolate->heap(); |
| + |
| + heap->CollectAllGarbage(); |
| + intptr_t size_before = |
| + heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); |
| + |
| + Array& old = Array::Handle(Array::New(1, Heap::kOld)); |
| + Array& old2 = Array::Handle(Array::New(1, Heap::kOld)); |
| + Array& neu = Array::Handle(Array::New(1, Heap::kNew)); |
| + old.SetAt(0, old2); |
| + neu.SetAt(0, old); |
| + old = Array::null(); |
| + old2 = Array::null(); |
| + |
| + heap->CollectAllGarbage(); |
| + |
| + intptr_t size_after = |
| + heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); |
| + |
| + EXPECT(size_before < size_after); |
| +} |
| + |
| +ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveOldToNewChain) { |
| + Isolate* isolate = Isolate::Current(); |
| + Heap* heap = isolate->heap(); |
| + |
| + heap->CollectAllGarbage(); |
| + intptr_t size_before = |
| + heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); |
| + |
| + Array& old = Array::Handle(Array::New(1, Heap::kOld)); |
| + Array& neu = Array::Handle(Array::New(1, Heap::kNew)); |
| + Array& neu2 = Array::Handle(Array::New(1, Heap::kOld)); |
| + neu.SetAt(0, neu2); |
| + old.SetAt(0, neu); |
| + neu = Array::null(); |
| + neu2 = Array::null(); |
| + |
| + heap->CollectAllGarbage(); |
| + |
| + intptr_t size_after = |
| + heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); |
| + |
| + EXPECT(size_before < size_after); |
| +} |
| + |
| } // namespace dart |