OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 6769 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6780 } | 6780 } |
6781 } | 6781 } |
6782 CHECK(marking->IsComplete()); | 6782 CHECK(marking->IsComplete()); |
6783 intptr_t size_before = heap->SizeOfObjects(); | 6783 intptr_t size_before = heap->SizeOfObjects(); |
6784 CcTest::heap()->CollectAllGarbage(); | 6784 CcTest::heap()->CollectAllGarbage(); |
6785 intptr_t size_after = heap->SizeOfObjects(); | 6785 intptr_t size_after = heap->SizeOfObjects(); |
6786 // Live size does not increase after garbage collection. | 6786 // Live size does not increase after garbage collection. |
6787 CHECK_LE(size_after, size_before); | 6787 CHECK_LE(size_after, size_before); |
6788 } | 6788 } |
6789 | 6789 |
| 6790 TEST(LeftTrimFixedArrayInBlackArea) { |
| 6791 FLAG_black_allocation = true; |
| 6792 CcTest::InitializeVM(); |
| 6793 v8::HandleScope scope(CcTest::isolate()); |
| 6794 Heap* heap = CcTest::heap(); |
| 6795 Isolate* isolate = heap->isolate(); |
| 6796 heap->CollectAllGarbage(); |
| 6797 |
| 6798 i::MarkCompactCollector* collector = heap->mark_compact_collector(); |
| 6799 i::IncrementalMarking* marking = heap->incremental_marking(); |
| 6800 if (collector->sweeping_in_progress()) { |
| 6801 collector->EnsureSweepingCompleted(); |
| 6802 } |
| 6803 CHECK(marking->IsMarking() || marking->IsStopped()); |
| 6804 if (marking->IsStopped()) { |
| 6805 heap->StartIncrementalMarking(); |
| 6806 } |
| 6807 CHECK(marking->IsMarking()); |
| 6808 marking->StartBlackAllocationForTesting(); |
| 6809 |
| 6810 // Ensure that we allocate a new page, set up a bump pointer area, and |
| 6811 // perform the allocation in a black area. |
| 6812 heap::SimulateFullSpace(heap->old_space()); |
| 6813 isolate->factory()->NewFixedArray(4, TENURED); |
| 6814 Handle<FixedArray> array = isolate->factory()->NewFixedArray(50, TENURED); |
| 6815 CHECK(heap->old_space()->Contains(*array)); |
| 6816 CHECK(Marking::IsBlack(ObjectMarking::MarkBitFrom(*array))); |
| 6817 |
| 6818 // Now left trim the allocated black area. A filler has to be installed |
| 6819 // for the trimmed area and all mark bits of the trimmed area have to be |
| 6820 // cleared. |
| 6821 FixedArrayBase* trimmed = heap->LeftTrimFixedArray(*array, 10); |
| 6822 CHECK(Marking::IsBlack(ObjectMarking::MarkBitFrom(trimmed))); |
| 6823 |
| 6824 heap::GcAndSweep(heap, OLD_SPACE); |
| 6825 } |
| 6826 |
6790 TEST(Regress618958) { | 6827 TEST(Regress618958) { |
6791 CcTest::InitializeVM(); | 6828 CcTest::InitializeVM(); |
6792 v8::HandleScope scope(CcTest::isolate()); | 6829 v8::HandleScope scope(CcTest::isolate()); |
6793 Heap* heap = CcTest::heap(); | 6830 Heap* heap = CcTest::heap(); |
6794 bool isolate_is_locked = true; | 6831 bool isolate_is_locked = true; |
6795 heap->update_external_memory(100 * MB); | 6832 heap->update_external_memory(100 * MB); |
6796 int mark_sweep_count_before = heap->ms_count(); | 6833 int mark_sweep_count_before = heap->ms_count(); |
6797 heap->MemoryPressureNotification(MemoryPressureLevel::kCritical, | 6834 heap->MemoryPressureNotification(MemoryPressureLevel::kCritical, |
6798 isolate_is_locked); | 6835 isolate_is_locked); |
6799 int mark_sweep_count_after = heap->ms_count(); | 6836 int mark_sweep_count_after = heap->ms_count(); |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6885 chunk, chunk->area_end() - kPointerSize, chunk->area_end()); | 6922 chunk, chunk->area_end() - kPointerSize, chunk->area_end()); |
6886 slots[chunk->area_end() - kPointerSize] = false; | 6923 slots[chunk->area_end() - kPointerSize] = false; |
6887 RememberedSet<OLD_TO_NEW>::Iterate(chunk, [&slots](Address addr) { | 6924 RememberedSet<OLD_TO_NEW>::Iterate(chunk, [&slots](Address addr) { |
6888 CHECK(slots[addr]); | 6925 CHECK(slots[addr]); |
6889 return KEEP_SLOT; | 6926 return KEEP_SLOT; |
6890 }); | 6927 }); |
6891 } | 6928 } |
6892 | 6929 |
6893 } // namespace internal | 6930 } // namespace internal |
6894 } // namespace v8 | 6931 } // namespace v8 |
OLD | NEW |