[test] Fix or skip CHECKs in tests for TPH
* Mostly are heap/space/page checks. Bug: v8:11641 Change-Id: Ia1726f414109ac5e8a3bdb18ccaa46a63db6bc95 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2849823 Commit-Queue: Wenyu Zhao <wenyu.zhao@anu.edu.au> Reviewed-by: Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#74317}
This commit is contained in:
parent
1a9c9f0fc0
commit
7134d7f656
@ -568,7 +568,7 @@ StartupData SnapshotCreator::CreateBlob(
|
|||||||
i::GarbageCollectionReason::kSnapshotCreator);
|
i::GarbageCollectionReason::kSnapshotCreator);
|
||||||
{
|
{
|
||||||
i::HandleScope scope(isolate);
|
i::HandleScope scope(isolate);
|
||||||
isolate->heap()->CompactWeakArrayLists(internal::AllocationType::kOld);
|
isolate->heap()->CompactWeakArrayLists();
|
||||||
}
|
}
|
||||||
|
|
||||||
i::Snapshot::ClearReconstructableDataForSerialization(
|
i::Snapshot::ClearReconstructableDataForSerialization(
|
||||||
|
@ -465,7 +465,12 @@ bool Heap::InToPage(HeapObject heap_object) {
|
|||||||
return BasicMemoryChunk::FromHeapObject(heap_object)->IsToPage();
|
return BasicMemoryChunk::FromHeapObject(heap_object)->IsToPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Heap::InOldSpace(Object object) { return old_space_->Contains(object); }
|
bool Heap::InOldSpace(Object object) {
|
||||||
|
if (V8_ENABLE_THIRD_PARTY_HEAP_BOOL)
|
||||||
|
return object.IsHeapObject() &&
|
||||||
|
third_party_heap::Heap::InOldSpace(object.ptr());
|
||||||
|
return old_space_->Contains(object);
|
||||||
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
Heap* Heap::FromWritableHeapObject(HeapObject obj) {
|
Heap* Heap::FromWritableHeapObject(HeapObject obj) {
|
||||||
|
@ -3134,7 +3134,8 @@ bool Heap::IsImmovable(HeapObject object) {
|
|||||||
|
|
||||||
bool Heap::IsLargeObject(HeapObject object) {
|
bool Heap::IsLargeObject(HeapObject object) {
|
||||||
if (V8_ENABLE_THIRD_PARTY_HEAP_BOOL)
|
if (V8_ENABLE_THIRD_PARTY_HEAP_BOOL)
|
||||||
return third_party_heap::Heap::InLargeObjectSpace(object.address());
|
return third_party_heap::Heap::InLargeObjectSpace(object.address()) ||
|
||||||
|
third_party_heap::Heap::InSpace(object.address(), CODE_LO_SPACE);
|
||||||
return BasicMemoryChunk::FromHeapObject(object)->IsLargePage();
|
return BasicMemoryChunk::FromHeapObject(object)->IsLargePage();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4116,6 +4117,8 @@ bool Heap::SharedHeapContains(HeapObject value) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Heap::InSpace(HeapObject value, AllocationSpace space) const {
|
bool Heap::InSpace(HeapObject value, AllocationSpace space) const {
|
||||||
|
if (V8_ENABLE_THIRD_PARTY_HEAP_BOOL)
|
||||||
|
return third_party_heap::Heap::InSpace(value.address(), space);
|
||||||
if (memory_allocator()->IsOutsideAllocatedSpace(value.address())) {
|
if (memory_allocator()->IsOutsideAllocatedSpace(value.address())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -5825,7 +5828,7 @@ Handle<WeakArrayList> CompactWeakArrayList(Heap* heap,
|
|||||||
|
|
||||||
} // anonymous namespace
|
} // anonymous namespace
|
||||||
|
|
||||||
void Heap::CompactWeakArrayLists(AllocationType allocation) {
|
void Heap::CompactWeakArrayLists() {
|
||||||
// Find known PrototypeUsers and compact them.
|
// Find known PrototypeUsers and compact them.
|
||||||
std::vector<Handle<PrototypeInfo>> prototype_infos;
|
std::vector<Handle<PrototypeInfo>> prototype_infos;
|
||||||
{
|
{
|
||||||
@ -5842,20 +5845,18 @@ void Heap::CompactWeakArrayLists(AllocationType allocation) {
|
|||||||
for (auto& prototype_info : prototype_infos) {
|
for (auto& prototype_info : prototype_infos) {
|
||||||
Handle<WeakArrayList> array(
|
Handle<WeakArrayList> array(
|
||||||
WeakArrayList::cast(prototype_info->prototype_users()), isolate());
|
WeakArrayList::cast(prototype_info->prototype_users()), isolate());
|
||||||
DCHECK_IMPLIES(allocation == AllocationType::kOld,
|
DCHECK(InOldSpace(*array) ||
|
||||||
InOldSpace(*array) ||
|
*array == ReadOnlyRoots(this).empty_weak_array_list());
|
||||||
*array == ReadOnlyRoots(this).empty_weak_array_list());
|
|
||||||
WeakArrayList new_array = PrototypeUsers::Compact(
|
WeakArrayList new_array = PrototypeUsers::Compact(
|
||||||
array, this, JSObject::PrototypeRegistryCompactionCallback, allocation);
|
array, this, JSObject::PrototypeRegistryCompactionCallback,
|
||||||
|
AllocationType::kOld);
|
||||||
prototype_info->set_prototype_users(new_array);
|
prototype_info->set_prototype_users(new_array);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find known WeakArrayLists and compact them.
|
// Find known WeakArrayLists and compact them.
|
||||||
Handle<WeakArrayList> scripts(script_list(), isolate());
|
Handle<WeakArrayList> scripts(script_list(), isolate());
|
||||||
DCHECK_IMPLIES(
|
DCHECK(InOldSpace(*scripts));
|
||||||
!V8_ENABLE_THIRD_PARTY_HEAP_BOOL && allocation == AllocationType::kOld,
|
scripts = CompactWeakArrayList(this, scripts, AllocationType::kOld);
|
||||||
InOldSpace(*scripts));
|
|
||||||
scripts = CompactWeakArrayList(this, scripts, allocation);
|
|
||||||
set_script_list(*scripts);
|
set_script_list(*scripts);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6190,7 +6191,7 @@ HeapObjectIterator::~HeapObjectIterator() {
|
|||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
// Assert that in filtering mode we have iterated through all
|
// Assert that in filtering mode we have iterated through all
|
||||||
// objects. Otherwise, heap will be left in an inconsistent state.
|
// objects. Otherwise, heap will be left in an inconsistent state.
|
||||||
if (!V8_ENABLE_THIRD_PARTY_HEAP_BOOL && filtering_ != kNoFiltering) {
|
if (filtering_ != kNoFiltering) {
|
||||||
DCHECK_NULL(object_iterator_);
|
DCHECK_NULL(object_iterator_);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -751,7 +751,7 @@ class Heap {
|
|||||||
|
|
||||||
size_t backing_store_bytes() const { return backing_store_bytes_; }
|
size_t backing_store_bytes() const { return backing_store_bytes_; }
|
||||||
|
|
||||||
void CompactWeakArrayLists(AllocationType allocation);
|
void CompactWeakArrayLists();
|
||||||
|
|
||||||
V8_EXPORT_PRIVATE void AddRetainedMap(Handle<NativeContext> context,
|
V8_EXPORT_PRIVATE void AddRetainedMap(Handle<NativeContext> context,
|
||||||
Handle<Map> map);
|
Handle<Map> map);
|
||||||
|
6
src/heap/third-party/heap-api-stub.cc
vendored
6
src/heap/third-party/heap-api-stub.cc
vendored
@ -37,6 +37,12 @@ const base::AddressRegion& Heap::GetCodeRange() {
|
|||||||
return no_region;
|
return no_region;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
bool Heap::InSpace(Address, AllocationSpace) { return false; }
|
||||||
|
|
||||||
|
// static
|
||||||
|
bool Heap::InOldSpace(Address) { return false; }
|
||||||
|
|
||||||
// static
|
// static
|
||||||
bool Heap::InCodeSpace(Address) { return false; }
|
bool Heap::InCodeSpace(Address) { return false; }
|
||||||
|
|
||||||
|
4
src/heap/third-party/heap-api.h
vendored
4
src/heap/third-party/heap-api.h
vendored
@ -26,6 +26,10 @@ class Heap {
|
|||||||
|
|
||||||
const base::AddressRegion& GetCodeRange();
|
const base::AddressRegion& GetCodeRange();
|
||||||
|
|
||||||
|
static bool InSpace(Address address, AllocationSpace space);
|
||||||
|
|
||||||
|
static bool InOldSpace(Address address);
|
||||||
|
|
||||||
static bool InCodeSpace(Address address);
|
static bool InCodeSpace(Address address);
|
||||||
|
|
||||||
static bool InReadOnlySpace(Address address);
|
static bool InReadOnlySpace(Address address);
|
||||||
|
@ -198,8 +198,10 @@ bool DeleteObjectPropertyFast(Isolate* isolate, Handle<JSReceiver> receiver,
|
|||||||
// have recorded slots in free space.
|
// have recorded slots in free space.
|
||||||
isolate->heap()->ClearRecordedSlot(*receiver,
|
isolate->heap()->ClearRecordedSlot(*receiver,
|
||||||
receiver->RawField(index.offset()));
|
receiver->RawField(index.offset()));
|
||||||
MemoryChunk* chunk = MemoryChunk::FromHeapObject(*receiver);
|
if (!FLAG_enable_third_party_heap) {
|
||||||
chunk->InvalidateRecordedSlots(*receiver);
|
MemoryChunk* chunk = MemoryChunk::FromHeapObject(*receiver);
|
||||||
|
chunk->InvalidateRecordedSlots(*receiver);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1927,6 +1927,7 @@ TEST(TestAlignedOverAllocation) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(HeapNumberAlignment) {
|
TEST(HeapNumberAlignment) {
|
||||||
|
if (!FLAG_allocation_site_pretenuring) return;
|
||||||
CcTest::InitializeVM();
|
CcTest::InitializeVM();
|
||||||
Isolate* isolate = CcTest::i_isolate();
|
Isolate* isolate = CcTest::i_isolate();
|
||||||
Factory* factory = isolate->factory();
|
Factory* factory = isolate->factory();
|
||||||
@ -3847,10 +3848,12 @@ static void TestFillersFromPersistentHandles(bool promote) {
|
|||||||
|
|
||||||
// GC should retain the trimmed array but drop all of the three fillers.
|
// GC should retain the trimmed array but drop all of the three fillers.
|
||||||
CcTest::CollectGarbage(NEW_SPACE);
|
CcTest::CollectGarbage(NEW_SPACE);
|
||||||
if (promote) {
|
if (!FLAG_single_generation) {
|
||||||
CHECK(heap->InOldSpace(*tail));
|
if (promote) {
|
||||||
} else {
|
CHECK(heap->InOldSpace(*tail));
|
||||||
CHECK(Heap::InYoungGeneration(*tail));
|
} else {
|
||||||
|
CHECK(Heap::InYoungGeneration(*tail));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
CHECK_EQ(n - 6, (*tail).length());
|
CHECK_EQ(n - 6, (*tail).length());
|
||||||
CHECK(!filler_1->IsHeapObject());
|
CHECK(!filler_1->IsHeapObject());
|
||||||
@ -3859,12 +3862,12 @@ static void TestFillersFromPersistentHandles(bool promote) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(DoNotEvacuateFillersFromPersistentHandles) {
|
TEST(DoNotEvacuateFillersFromPersistentHandles) {
|
||||||
if (FLAG_single_generation) return;
|
if (FLAG_single_generation || FLAG_move_object_start) return;
|
||||||
TestFillersFromPersistentHandles(false /*promote*/);
|
TestFillersFromPersistentHandles(false /*promote*/);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(DoNotPromoteFillersFromPersistentHandles) {
|
TEST(DoNotPromoteFillersFromPersistentHandles) {
|
||||||
if (FLAG_single_generation) return;
|
if (FLAG_single_generation || FLAG_move_object_start) return;
|
||||||
TestFillersFromPersistentHandles(true /*promote*/);
|
TestFillersFromPersistentHandles(true /*promote*/);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6247,7 +6250,8 @@ TEST(UncommitUnusedLargeObjectMemory) {
|
|||||||
Handle<FixedArray> array =
|
Handle<FixedArray> array =
|
||||||
isolate->factory()->NewFixedArray(200000, AllocationType::kOld);
|
isolate->factory()->NewFixedArray(200000, AllocationType::kOld);
|
||||||
MemoryChunk* chunk = MemoryChunk::FromHeapObject(*array);
|
MemoryChunk* chunk = MemoryChunk::FromHeapObject(*array);
|
||||||
CHECK(chunk->owner_identity() == LO_SPACE);
|
CHECK_IMPLIES(!FLAG_enable_third_party_heap,
|
||||||
|
chunk->owner_identity() == LO_SPACE);
|
||||||
|
|
||||||
intptr_t size_before = array->Size();
|
intptr_t size_before = array->Size();
|
||||||
size_t committed_memory_before = chunk->CommittedPhysicalMemory();
|
size_t committed_memory_before = chunk->CommittedPhysicalMemory();
|
||||||
@ -6438,6 +6442,7 @@ TEST(RememberedSet_OldToOld) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(RememberedSetRemoveRange) {
|
TEST(RememberedSetRemoveRange) {
|
||||||
|
if (FLAG_single_generation) return;
|
||||||
CcTest::InitializeVM();
|
CcTest::InitializeVM();
|
||||||
v8::HandleScope scope(CcTest::isolate());
|
v8::HandleScope scope(CcTest::isolate());
|
||||||
Heap* heap = CcTest::heap();
|
Heap* heap = CcTest::heap();
|
||||||
@ -6446,7 +6451,8 @@ TEST(RememberedSetRemoveRange) {
|
|||||||
Handle<FixedArray> array = isolate->factory()->NewFixedArray(
|
Handle<FixedArray> array = isolate->factory()->NewFixedArray(
|
||||||
Page::kPageSize / kTaggedSize, AllocationType::kOld);
|
Page::kPageSize / kTaggedSize, AllocationType::kOld);
|
||||||
MemoryChunk* chunk = MemoryChunk::FromHeapObject(*array);
|
MemoryChunk* chunk = MemoryChunk::FromHeapObject(*array);
|
||||||
CHECK(chunk->owner_identity() == LO_SPACE);
|
CHECK_IMPLIES(!FLAG_enable_third_party_heap,
|
||||||
|
chunk->owner_identity() == LO_SPACE);
|
||||||
Address start = array->address();
|
Address start = array->address();
|
||||||
// Maps slot to boolean indicator of whether the slot should be in the set.
|
// Maps slot to boolean indicator of whether the slot should be in the set.
|
||||||
std::map<Address, bool> slots;
|
std::map<Address, bool> slots;
|
||||||
@ -7206,7 +7212,7 @@ class TestAllocationTracker : public HeapObjectAllocationTracker {
|
|||||||
HEAP_TEST(CodeLargeObjectSpace) {
|
HEAP_TEST(CodeLargeObjectSpace) {
|
||||||
Heap* heap = CcTest::heap();
|
Heap* heap = CcTest::heap();
|
||||||
int size_in_bytes =
|
int size_in_bytes =
|
||||||
MemoryChunkLayout::MaxRegularCodeObjectSize() + kTaggedSize;
|
Heap::MaxRegularHeapObjectSize(AllocationType::kCode) + kTaggedSize;
|
||||||
TestAllocationTracker allocation_tracker{size_in_bytes};
|
TestAllocationTracker allocation_tracker{size_in_bytes};
|
||||||
heap->AddHeapObjectAllocationTracker(&allocation_tracker);
|
heap->AddHeapObjectAllocationTracker(&allocation_tracker);
|
||||||
|
|
||||||
@ -7240,7 +7246,7 @@ UNINITIALIZED_HEAP_TEST(CodeLargeObjectSpace64k) {
|
|||||||
// Allocate a regular code object.
|
// Allocate a regular code object.
|
||||||
{
|
{
|
||||||
int size_in_bytes =
|
int size_in_bytes =
|
||||||
MemoryChunkLayout::MaxRegularCodeObjectSize() - kTaggedSize;
|
Heap::MaxRegularHeapObjectSize(AllocationType::kCode) - kTaggedSize;
|
||||||
TestAllocationTracker allocation_tracker{size_in_bytes};
|
TestAllocationTracker allocation_tracker{size_in_bytes};
|
||||||
heap->AddHeapObjectAllocationTracker(&allocation_tracker);
|
heap->AddHeapObjectAllocationTracker(&allocation_tracker);
|
||||||
|
|
||||||
@ -7262,7 +7268,7 @@ UNINITIALIZED_HEAP_TEST(CodeLargeObjectSpace64k) {
|
|||||||
// Allocate a large code object.
|
// Allocate a large code object.
|
||||||
{
|
{
|
||||||
int size_in_bytes =
|
int size_in_bytes =
|
||||||
MemoryChunkLayout::MaxRegularCodeObjectSize() + kTaggedSize;
|
Heap::MaxRegularHeapObjectSize(AllocationType::kCode) + kTaggedSize;
|
||||||
TestAllocationTracker allocation_tracker{size_in_bytes};
|
TestAllocationTracker allocation_tracker{size_in_bytes};
|
||||||
heap->AddHeapObjectAllocationTracker(&allocation_tracker);
|
heap->AddHeapObjectAllocationTracker(&allocation_tracker);
|
||||||
|
|
||||||
@ -7291,7 +7297,8 @@ TEST(IsPendingAllocationNewSpace) {
|
|||||||
Factory* factory = isolate->factory();
|
Factory* factory = isolate->factory();
|
||||||
HandleScope handle_scope(isolate);
|
HandleScope handle_scope(isolate);
|
||||||
Handle<FixedArray> object = factory->NewFixedArray(5, AllocationType::kYoung);
|
Handle<FixedArray> object = factory->NewFixedArray(5, AllocationType::kYoung);
|
||||||
CHECK(heap->IsPendingAllocation(*object));
|
CHECK_IMPLIES(!FLAG_enable_third_party_heap,
|
||||||
|
heap->IsPendingAllocation(*object));
|
||||||
heap->PublishPendingAllocations();
|
heap->PublishPendingAllocations();
|
||||||
CHECK(!heap->IsPendingAllocation(*object));
|
CHECK(!heap->IsPendingAllocation(*object));
|
||||||
}
|
}
|
||||||
@ -7304,7 +7311,8 @@ TEST(IsPendingAllocationNewLOSpace) {
|
|||||||
HandleScope handle_scope(isolate);
|
HandleScope handle_scope(isolate);
|
||||||
Handle<FixedArray> object = factory->NewFixedArray(
|
Handle<FixedArray> object = factory->NewFixedArray(
|
||||||
FixedArray::kMaxRegularLength + 1, AllocationType::kYoung);
|
FixedArray::kMaxRegularLength + 1, AllocationType::kYoung);
|
||||||
CHECK(heap->IsPendingAllocation(*object));
|
CHECK_IMPLIES(!FLAG_enable_third_party_heap,
|
||||||
|
heap->IsPendingAllocation(*object));
|
||||||
heap->PublishPendingAllocations();
|
heap->PublishPendingAllocations();
|
||||||
CHECK(!heap->IsPendingAllocation(*object));
|
CHECK(!heap->IsPendingAllocation(*object));
|
||||||
}
|
}
|
||||||
@ -7316,7 +7324,8 @@ TEST(IsPendingAllocationOldSpace) {
|
|||||||
Factory* factory = isolate->factory();
|
Factory* factory = isolate->factory();
|
||||||
HandleScope handle_scope(isolate);
|
HandleScope handle_scope(isolate);
|
||||||
Handle<FixedArray> object = factory->NewFixedArray(5, AllocationType::kOld);
|
Handle<FixedArray> object = factory->NewFixedArray(5, AllocationType::kOld);
|
||||||
CHECK(heap->IsPendingAllocation(*object));
|
CHECK_IMPLIES(!FLAG_enable_third_party_heap,
|
||||||
|
heap->IsPendingAllocation(*object));
|
||||||
heap->PublishPendingAllocations();
|
heap->PublishPendingAllocations();
|
||||||
CHECK(!heap->IsPendingAllocation(*object));
|
CHECK(!heap->IsPendingAllocation(*object));
|
||||||
}
|
}
|
||||||
@ -7329,7 +7338,8 @@ TEST(IsPendingAllocationLOSpace) {
|
|||||||
HandleScope handle_scope(isolate);
|
HandleScope handle_scope(isolate);
|
||||||
Handle<FixedArray> object = factory->NewFixedArray(
|
Handle<FixedArray> object = factory->NewFixedArray(
|
||||||
FixedArray::kMaxRegularLength + 1, AllocationType::kOld);
|
FixedArray::kMaxRegularLength + 1, AllocationType::kOld);
|
||||||
CHECK(heap->IsPendingAllocation(*object));
|
CHECK_IMPLIES(!FLAG_enable_third_party_heap,
|
||||||
|
heap->IsPendingAllocation(*object));
|
||||||
heap->PublishPendingAllocations();
|
heap->PublishPendingAllocations();
|
||||||
CHECK(!heap->IsPendingAllocation(*object));
|
CHECK(!heap->IsPendingAllocation(*object));
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,7 @@ TEST(HeapObjectIterator) {
|
|||||||
|
|
||||||
for (HeapObject obj = iterator.Next(); !obj.is_null();
|
for (HeapObject obj = iterator.Next(); !obj.is_null();
|
||||||
obj = iterator.Next()) {
|
obj = iterator.Next()) {
|
||||||
CHECK(!ReadOnlyHeap::Contains(obj));
|
CHECK_IMPLIES(!FLAG_enable_third_party_heap, !ReadOnlyHeap::Contains(obj));
|
||||||
CHECK(CcTest::heap()->Contains(obj));
|
CHECK(CcTest::heap()->Contains(obj));
|
||||||
if (sample_object == obj) seen_sample_object = true;
|
if (sample_object == obj) seen_sample_object = true;
|
||||||
}
|
}
|
||||||
|
@ -16754,7 +16754,10 @@ THREADED_TEST(GetHeapStatistics) {
|
|||||||
CHECK_EQ(0u, heap_statistics.used_heap_size());
|
CHECK_EQ(0u, heap_statistics.used_heap_size());
|
||||||
c1->GetIsolate()->GetHeapStatistics(&heap_statistics);
|
c1->GetIsolate()->GetHeapStatistics(&heap_statistics);
|
||||||
CHECK_NE(static_cast<int>(heap_statistics.total_heap_size()), 0);
|
CHECK_NE(static_cast<int>(heap_statistics.total_heap_size()), 0);
|
||||||
CHECK_NE(static_cast<int>(heap_statistics.used_heap_size()), 0);
|
if (!v8::internal::FLAG_enable_third_party_heap) {
|
||||||
|
// TODO(wenyuzhao): Get used size from third_party_heap interface
|
||||||
|
CHECK_NE(static_cast<int>(heap_statistics.used_heap_size()), 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(GetHeapSpaceStatistics) {
|
TEST(GetHeapSpaceStatistics) {
|
||||||
|
@ -61,7 +61,7 @@ TEST(Factory_CodeBuilder) {
|
|||||||
|
|
||||||
// Create a big function that ends up in CODE_LO_SPACE.
|
// Create a big function that ends up in CODE_LO_SPACE.
|
||||||
const int instruction_size =
|
const int instruction_size =
|
||||||
MemoryChunkLayout::MaxRegularCodeObjectSize() + 1;
|
Heap::MaxRegularHeapObjectSize(AllocationType::kCode) + 1;
|
||||||
std::unique_ptr<byte[]> instructions(new byte[instruction_size]);
|
std::unique_ptr<byte[]> instructions(new byte[instruction_size]);
|
||||||
|
|
||||||
CodeDesc desc;
|
CodeDesc desc;
|
||||||
|
@ -230,6 +230,7 @@ TEST(WeakMapScavenge) {
|
|||||||
// by other paths are correctly recorded in the slots buffer.
|
// by other paths are correctly recorded in the slots buffer.
|
||||||
TEST(Regress2060a) {
|
TEST(Regress2060a) {
|
||||||
if (i::FLAG_never_compact) return;
|
if (i::FLAG_never_compact) return;
|
||||||
|
if (i::FLAG_enable_third_party_heap) return;
|
||||||
FLAG_always_compact = true;
|
FLAG_always_compact = true;
|
||||||
FLAG_stress_concurrent_allocation = false; // For SimulateFullSpace.
|
FLAG_stress_concurrent_allocation = false; // For SimulateFullSpace.
|
||||||
LocalContext context;
|
LocalContext context;
|
||||||
@ -253,7 +254,8 @@ TEST(Regress2060a) {
|
|||||||
Handle<JSObject> object =
|
Handle<JSObject> object =
|
||||||
factory->NewJSObject(function, AllocationType::kOld);
|
factory->NewJSObject(function, AllocationType::kOld);
|
||||||
CHECK(!Heap::InYoungGeneration(*object));
|
CHECK(!Heap::InYoungGeneration(*object));
|
||||||
CHECK(!first_page->Contains(object->address()));
|
CHECK_IMPLIES(!FLAG_enable_third_party_heap,
|
||||||
|
!first_page->Contains(object->address()));
|
||||||
int32_t hash = key->GetOrCreateHash(isolate).value();
|
int32_t hash = key->GetOrCreateHash(isolate).value();
|
||||||
JSWeakCollection::Set(weakmap, key, object, hash);
|
JSWeakCollection::Set(weakmap, key, object, hash);
|
||||||
}
|
}
|
||||||
@ -292,7 +294,8 @@ TEST(Regress2060b) {
|
|||||||
for (int i = 0; i < 32; i++) {
|
for (int i = 0; i < 32; i++) {
|
||||||
keys[i] = factory->NewJSObject(function, AllocationType::kOld);
|
keys[i] = factory->NewJSObject(function, AllocationType::kOld);
|
||||||
CHECK(!Heap::InYoungGeneration(*keys[i]));
|
CHECK(!Heap::InYoungGeneration(*keys[i]));
|
||||||
CHECK(!first_page->Contains(keys[i]->address()));
|
CHECK_IMPLIES(!FLAG_enable_third_party_heap,
|
||||||
|
!first_page->Contains(keys[i]->address()));
|
||||||
}
|
}
|
||||||
Handle<JSWeakMap> weakmap = isolate->factory()->NewJSWeakMap();
|
Handle<JSWeakMap> weakmap = isolate->factory()->NewJSWeakMap();
|
||||||
for (int i = 0; i < 32; i++) {
|
for (int i = 0; i < 32; i++) {
|
||||||
|
@ -164,6 +164,7 @@ TEST(WeakSet_Shrinking) {
|
|||||||
// by other paths are correctly recorded in the slots buffer.
|
// by other paths are correctly recorded in the slots buffer.
|
||||||
TEST(WeakSet_Regress2060a) {
|
TEST(WeakSet_Regress2060a) {
|
||||||
if (i::FLAG_never_compact) return;
|
if (i::FLAG_never_compact) return;
|
||||||
|
if (i::FLAG_enable_third_party_heap) return;
|
||||||
FLAG_always_compact = true;
|
FLAG_always_compact = true;
|
||||||
FLAG_stress_concurrent_allocation = false; // For SimulateFullSpace.
|
FLAG_stress_concurrent_allocation = false; // For SimulateFullSpace.
|
||||||
LocalContext context;
|
LocalContext context;
|
||||||
@ -187,7 +188,8 @@ TEST(WeakSet_Regress2060a) {
|
|||||||
Handle<JSObject> object =
|
Handle<JSObject> object =
|
||||||
factory->NewJSObject(function, AllocationType::kOld);
|
factory->NewJSObject(function, AllocationType::kOld);
|
||||||
CHECK(!Heap::InYoungGeneration(*object));
|
CHECK(!Heap::InYoungGeneration(*object));
|
||||||
CHECK(!first_page->Contains(object->address()));
|
CHECK_IMPLIES(!FLAG_enable_third_party_heap,
|
||||||
|
!first_page->Contains(object->address()));
|
||||||
int32_t hash = key->GetOrCreateHash(isolate).value();
|
int32_t hash = key->GetOrCreateHash(isolate).value();
|
||||||
JSWeakCollection::Set(weakset, key, object, hash);
|
JSWeakCollection::Set(weakset, key, object, hash);
|
||||||
}
|
}
|
||||||
@ -203,6 +205,7 @@ TEST(WeakSet_Regress2060a) {
|
|||||||
// other strong paths are correctly recorded in the slots buffer.
|
// other strong paths are correctly recorded in the slots buffer.
|
||||||
TEST(WeakSet_Regress2060b) {
|
TEST(WeakSet_Regress2060b) {
|
||||||
if (i::FLAG_never_compact) return;
|
if (i::FLAG_never_compact) return;
|
||||||
|
if (i::FLAG_enable_third_party_heap) return;
|
||||||
FLAG_always_compact = true;
|
FLAG_always_compact = true;
|
||||||
#ifdef VERIFY_HEAP
|
#ifdef VERIFY_HEAP
|
||||||
FLAG_verify_heap = true;
|
FLAG_verify_heap = true;
|
||||||
@ -226,7 +229,8 @@ TEST(WeakSet_Regress2060b) {
|
|||||||
for (int i = 0; i < 32; i++) {
|
for (int i = 0; i < 32; i++) {
|
||||||
keys[i] = factory->NewJSObject(function, AllocationType::kOld);
|
keys[i] = factory->NewJSObject(function, AllocationType::kOld);
|
||||||
CHECK(!Heap::InYoungGeneration(*keys[i]));
|
CHECK(!Heap::InYoungGeneration(*keys[i]));
|
||||||
CHECK(!first_page->Contains(keys[i]->address()));
|
CHECK_IMPLIES(!FLAG_enable_third_party_heap,
|
||||||
|
!first_page->Contains(keys[i]->address()));
|
||||||
}
|
}
|
||||||
Handle<JSWeakSet> weakset = AllocateJSWeakSet(isolate);
|
Handle<JSWeakSet> weakset = AllocateJSWeakSet(isolate);
|
||||||
for (int i = 0; i < 32; i++) {
|
for (int i = 0; i < 32; i++) {
|
||||||
|
Loading…
Reference in New Issue
Block a user