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

Side by Side Diff: test/cctest/heap/test-heap.cc

Issue 2207383002: Revert "[heap] Temporarily use old live object iterator to investigate Win 10 memory regression." (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: make sure we do not overflow Created 4 years, 4 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 unified diff | Download patch
« no previous file with comments | « src/heap/mark-compact-inl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 6768 matching lines...) Expand 10 before | Expand all | Expand 10 after
6779 } 6779 }
6780 } 6780 }
6781 CHECK(marking->IsComplete()); 6781 CHECK(marking->IsComplete());
6782 intptr_t size_before = heap->SizeOfObjects(); 6782 intptr_t size_before = heap->SizeOfObjects();
6783 CcTest::heap()->CollectAllGarbage(); 6783 CcTest::heap()->CollectAllGarbage();
6784 intptr_t size_after = heap->SizeOfObjects(); 6784 intptr_t size_after = heap->SizeOfObjects();
6785 // Live size does not increase after garbage collection. 6785 // Live size does not increase after garbage collection.
6786 CHECK_LE(size_after, size_before); 6786 CHECK_LE(size_after, size_before);
6787 } 6787 }
6788 6788
6789 TEST(LeftTrimFixedArrayInBlackArea) {
6790 FLAG_black_allocation = true;
6791 CcTest::InitializeVM();
6792 v8::HandleScope scope(CcTest::isolate());
6793 Heap* heap = CcTest::heap();
6794 Isolate* isolate = heap->isolate();
6795 heap->CollectAllGarbage();
6796
6797 i::MarkCompactCollector* collector = heap->mark_compact_collector();
6798 i::IncrementalMarking* marking = heap->incremental_marking();
6799 if (collector->sweeping_in_progress()) {
6800 collector->EnsureSweepingCompleted();
6801 }
6802 CHECK(marking->IsMarking() || marking->IsStopped());
6803 if (marking->IsStopped()) {
6804 heap->StartIncrementalMarking();
6805 }
6806 CHECK(marking->IsMarking());
6807 marking->StartBlackAllocationForTesting();
6808
6809 // Ensure that we allocate a new page, set up a bump pointer area, and
6810 // perform the allocation in a black area.
6811 heap::SimulateFullSpace(heap->old_space());
6812 isolate->factory()->NewFixedArray(4, TENURED);
6813 Handle<FixedArray> array = isolate->factory()->NewFixedArray(50, TENURED);
6814 CHECK(heap->old_space()->Contains(*array));
6815 CHECK(Marking::IsBlack(ObjectMarking::MarkBitFrom(*array)));
6816
6817 // Now left trim the allocated black area. A filler has to be installed
6818 // for the trimmed area and all mark bits of the trimmed area have to be
6819 // cleared.
6820 FixedArrayBase* trimmed = heap->LeftTrimFixedArray(*array, 10);
6821 CHECK(Marking::IsBlack(ObjectMarking::MarkBitFrom(trimmed)));
6822
6823 heap::GcAndSweep(heap, OLD_SPACE);
6824 }
6825
6826 TEST(ContinuousLeftTrimFixedArrayInBlackArea) {
6827 FLAG_black_allocation = true;
6828 CcTest::InitializeVM();
6829 v8::HandleScope scope(CcTest::isolate());
6830 Heap* heap = CcTest::heap();
6831 Isolate* isolate = heap->isolate();
6832 heap->CollectAllGarbage();
6833
6834 i::MarkCompactCollector* collector = heap->mark_compact_collector();
6835 i::IncrementalMarking* marking = heap->incremental_marking();
6836 if (collector->sweeping_in_progress()) {
6837 collector->EnsureSweepingCompleted();
6838 }
6839 CHECK(marking->IsMarking() || marking->IsStopped());
6840 if (marking->IsStopped()) {
6841 heap->StartIncrementalMarking();
6842 }
6843 CHECK(marking->IsMarking());
6844 marking->StartBlackAllocationForTesting();
6845
6846 // Ensure that we allocate a new page, set up a bump pointer area, and
6847 // perform the allocation in a black area.
6848 heap::SimulateFullSpace(heap->old_space());
6849 isolate->factory()->NewFixedArray(10, TENURED);
6850
6851 // Allocate the fixed array that will be trimmed later.
6852 Handle<FixedArray> array = isolate->factory()->NewFixedArray(100, TENURED);
6853 Address start_address = array->address();
6854 Address end_address = start_address + array->Size();
6855 Page* page = Page::FromAddress(start_address);
6856 CHECK(Marking::IsBlack(ObjectMarking::MarkBitFrom(*array)));
6857 CHECK(page->markbits()->AllBitsSetInRange(
6858 page->AddressToMarkbitIndex(start_address),
6859 page->AddressToMarkbitIndex(end_address)));
6860 CHECK(heap->old_space()->Contains(*array));
6861
6862 FixedArrayBase* previous = *array;
6863 FixedArrayBase* trimmed;
6864
6865 // First trim in one word steps.
6866 for (int i = 0; i < 10; i++) {
6867 trimmed = heap->LeftTrimFixedArray(previous, 1);
6868 HeapObject* filler = HeapObject::FromAddress(previous->address());
6869 CHECK(filler->IsFiller());
6870 CHECK(Marking::IsBlack(ObjectMarking::MarkBitFrom(trimmed)));
6871 CHECK(Marking::IsImpossible(ObjectMarking::MarkBitFrom(previous)));
6872 previous = trimmed;
6873 }
6874
6875 // Then trim in two and three word steps.
6876 for (int i = 2; i <= 3; i++) {
6877 for (int j = 0; j < 10; j++) {
6878 trimmed = heap->LeftTrimFixedArray(previous, i);
6879 HeapObject* filler = HeapObject::FromAddress(previous->address());
6880 CHECK(filler->IsFiller());
6881 CHECK(Marking::IsBlack(ObjectMarking::MarkBitFrom(trimmed)));
6882 CHECK(Marking::IsWhite(ObjectMarking::MarkBitFrom(previous)));
6883 previous = trimmed;
6884 }
6885 }
6886
6887 heap::GcAndSweep(heap, OLD_SPACE);
6888 }
6889
6890 TEST(ContinuousRightTrimFixedArrayInBlackArea) {
6891 FLAG_black_allocation = true;
6892 CcTest::InitializeVM();
6893 v8::HandleScope scope(CcTest::isolate());
6894 Heap* heap = CcTest::heap();
6895 Isolate* isolate = heap->isolate();
6896 heap->CollectAllGarbage();
6897
6898 i::MarkCompactCollector* collector = heap->mark_compact_collector();
6899 i::IncrementalMarking* marking = heap->incremental_marking();
6900 if (collector->sweeping_in_progress()) {
6901 collector->EnsureSweepingCompleted();
6902 }
6903 CHECK(marking->IsMarking() || marking->IsStopped());
6904 if (marking->IsStopped()) {
6905 heap->StartIncrementalMarking();
6906 }
6907 CHECK(marking->IsMarking());
6908 marking->StartBlackAllocationForTesting();
6909
6910 // Ensure that we allocate a new page, set up a bump pointer area, and
6911 // perform the allocation in a black area.
6912 heap::SimulateFullSpace(heap->old_space());
6913 isolate->factory()->NewFixedArray(10, TENURED);
6914
6915 // Allocate the fixed array that will be trimmed later.
6916 Handle<FixedArray> array = isolate->factory()->NewFixedArray(100, TENURED);
6917 Address start_address = array->address();
6918 Address end_address = start_address + array->Size();
6919 Page* page = Page::FromAddress(start_address);
6920 CHECK(Marking::IsBlack(ObjectMarking::MarkBitFrom(*array)));
6921 CHECK(page->markbits()->AllBitsSetInRange(
6922 page->AddressToMarkbitIndex(start_address),
6923 page->AddressToMarkbitIndex(end_address)));
6924 CHECK(heap->old_space()->Contains(*array));
6925
6926 // Trim it once by one word to make checking for white marking color uniform.
6927 Address previous = end_address - kPointerSize;
6928 heap->RightTrimFixedArray<Heap::SEQUENTIAL_TO_SWEEPER>(*array, 1);
6929 HeapObject* filler = HeapObject::FromAddress(previous);
6930 CHECK(filler->IsFiller());
6931 CHECK(Marking::IsImpossible(ObjectMarking::MarkBitFrom(previous)));
6932
6933 // Trim 10 times by one, two, and three word.
6934 for (int i = 1; i <= 3; i++) {
6935 for (int j = 0; j < 10; j++) {
6936 previous -= kPointerSize * i;
6937 heap->RightTrimFixedArray<Heap::SEQUENTIAL_TO_SWEEPER>(*array, i);
6938 HeapObject* filler = HeapObject::FromAddress(previous);
6939 CHECK(filler->IsFiller());
6940 CHECK(Marking::IsWhite(ObjectMarking::MarkBitFrom(previous)));
6941 }
6942 }
6943
6944 heap::GcAndSweep(heap, OLD_SPACE);
6945 }
6946
6789 TEST(Regress618958) { 6947 TEST(Regress618958) {
6790 CcTest::InitializeVM(); 6948 CcTest::InitializeVM();
6791 v8::HandleScope scope(CcTest::isolate()); 6949 v8::HandleScope scope(CcTest::isolate());
6792 Heap* heap = CcTest::heap(); 6950 Heap* heap = CcTest::heap();
6793 bool isolate_is_locked = true; 6951 bool isolate_is_locked = true;
6794 heap->update_external_memory(100 * MB); 6952 heap->update_external_memory(100 * MB);
6795 int mark_sweep_count_before = heap->ms_count(); 6953 int mark_sweep_count_before = heap->ms_count();
6796 heap->MemoryPressureNotification(MemoryPressureLevel::kCritical, 6954 heap->MemoryPressureNotification(MemoryPressureLevel::kCritical,
6797 isolate_is_locked); 6955 isolate_is_locked);
6798 int mark_sweep_count_after = heap->ms_count(); 6956 int mark_sweep_count_after = heap->ms_count();
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
6885 chunk, chunk->area_end() - kPointerSize, chunk->area_end()); 7043 chunk, chunk->area_end() - kPointerSize, chunk->area_end());
6886 slots[chunk->area_end() - kPointerSize] = false; 7044 slots[chunk->area_end() - kPointerSize] = false;
6887 RememberedSet<OLD_TO_NEW>::Iterate(chunk, [&slots](Address addr) { 7045 RememberedSet<OLD_TO_NEW>::Iterate(chunk, [&slots](Address addr) {
6888 CHECK(slots[addr]); 7046 CHECK(slots[addr]);
6889 return KEEP_SLOT; 7047 return KEEP_SLOT;
6890 }); 7048 });
6891 } 7049 }
6892 7050
6893 } // namespace internal 7051 } // namespace internal
6894 } // namespace v8 7052 } // namespace v8
OLDNEW
« no previous file with comments | « src/heap/mark-compact-inl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698