diff options
author | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2015-08-26 12:17:21 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2015-08-26 12:17:55 +0000 |
commit | c3d0bb5bb15d008606b18b865841e19cd9bb5847 (patch) | |
tree | 25706f444200c7c4895371e78075b98f6f4c020b /chromium/v8/src/heap | |
parent | 3a97ca8dd9b96b599ae2d33e40df0dd2f7ea5859 (diff) | |
download | qtwebengine-chromium-c3d0bb5bb15d008606b18b865841e19cd9bb5847.tar.gz |
BASELINE: Update chromium to 45.0.2454.79
Also remove third_party trace-viewer and hunspell again.
Change-Id: Iee0b3b27abcef9b1e87a0e39b71f6b785d1d19be
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
Diffstat (limited to 'chromium/v8/src/heap')
-rw-r--r-- | chromium/v8/src/heap/mark-compact.cc | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/chromium/v8/src/heap/mark-compact.cc b/chromium/v8/src/heap/mark-compact.cc index 8bbfeb173f7..9ca06cf2e64 100644 --- a/chromium/v8/src/heap/mark-compact.cc +++ b/chromium/v8/src/heap/mark-compact.cc @@ -3058,11 +3058,18 @@ bool MarkCompactCollector::TryPromoteObject(HeapObject* object, bool MarkCompactCollector::IsSlotInBlackObject(Page* p, Address slot, HeapObject** out_object) { - // This function does not support large objects right now. Space* owner = p->owner(); if (owner == heap_->lo_space() || owner == NULL) { - *out_object = NULL; - return true; + Object* large_object = heap_->lo_space()->FindObject(slot); + // This object has to exist, otherwise we would not have recorded a slot + // for it. + CHECK(large_object->IsHeapObject()); + HeapObject* large_heap_object = HeapObject::cast(large_object); + if (IsMarked(large_heap_object)) { + *out_object = large_heap_object; + return true; + } + return false; } uint32_t mark_bit_index = p->AddressToMarkbitIndex(slot); @@ -3179,13 +3186,8 @@ bool MarkCompactCollector::IsSlotInLiveObject(Address slot) { return false; } - // |object| is NULL only when the slot belongs to large object space. - DCHECK(object != NULL || - Page::FromAnyPointerAddress(heap_, slot)->owner() == - heap_->lo_space()); - // We don't need to check large objects' layout descriptor since it can't - // contain in-object fields anyway. - if (object != NULL) { + DCHECK(object != NULL); + switch (object->ContentType()) { case HeapObjectContents::kTaggedValues: return true; @@ -3214,9 +3216,7 @@ bool MarkCompactCollector::IsSlotInLiveObject(Address slot) { } } UNREACHABLE(); - } - - return true; + return true; } @@ -4444,12 +4444,10 @@ void SlotsBuffer::RemoveInvalidSlots(Heap* heap, SlotsBuffer* buffer) { ObjectSlot slot = slots[slot_idx]; if (!IsTypedSlot(slot)) { Object* object = *slot; - if (object->IsHeapObject()) { - if (heap->InNewSpace(object) || - !heap->mark_compact_collector()->IsSlotInLiveObject( - reinterpret_cast<Address>(slot))) { - slots[slot_idx] = kRemovedEntry; - } + if ((object->IsHeapObject() && heap->InNewSpace(object)) || + !heap->mark_compact_collector()->IsSlotInLiveObject( + reinterpret_cast<Address>(slot))) { + slots[slot_idx] = kRemovedEntry; } } else { ++slot_idx; @@ -4506,9 +4504,10 @@ void SlotsBuffer::VerifySlots(Heap* heap, SlotsBuffer* buffer) { if (!IsTypedSlot(slot)) { Object* object = *slot; if (object->IsHeapObject()) { + HeapObject* heap_object = HeapObject::cast(object); CHECK(!heap->InNewSpace(object)); - CHECK(heap->mark_compact_collector()->IsSlotInLiveObject( - reinterpret_cast<Address>(slot))); + heap->mark_compact_collector()->VerifyIsSlotInLiveObject( + reinterpret_cast<Address>(slot), heap_object); } } else { ++slot_idx; |