[heap] Inline record slot methods.
BUG=chromium:532784 LOG=n Review URL: https://codereview.chromium.org/1347363002 Cr-Commit-Position: refs/heads/master@{#30789}
This commit is contained in:
parent
7a0a0b8b85
commit
1eeb41692a
@ -6,6 +6,7 @@
|
||||
#define V8_HEAP_MARK_COMPACT_INL_H_
|
||||
|
||||
#include "src/heap/mark-compact.h"
|
||||
#include "src/heap/slots-buffer.h"
|
||||
#include "src/isolate.h"
|
||||
|
||||
namespace v8 {
|
||||
@ -55,6 +56,32 @@ bool MarkCompactCollector::IsMarked(Object* obj) {
|
||||
}
|
||||
|
||||
|
||||
void MarkCompactCollector::RecordSlot(HeapObject* object, Object** slot,
|
||||
Object* target) {
|
||||
Page* target_page = Page::FromAddress(reinterpret_cast<Address>(target));
|
||||
if (target_page->IsEvacuationCandidate() &&
|
||||
!ShouldSkipEvacuationSlotRecording(object)) {
|
||||
if (!SlotsBuffer::AddTo(slots_buffer_allocator_,
|
||||
target_page->slots_buffer_address(), slot,
|
||||
SlotsBuffer::FAIL_ON_OVERFLOW)) {
|
||||
EvictPopularEvacuationCandidate(target_page);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void MarkCompactCollector::ForceRecordSlot(HeapObject* object, Object** slot,
|
||||
Object* target) {
|
||||
Page* target_page = Page::FromAddress(reinterpret_cast<Address>(target));
|
||||
if (target_page->IsEvacuationCandidate() &&
|
||||
!ShouldSkipEvacuationSlotRecording(object)) {
|
||||
CHECK(SlotsBuffer::AddTo(slots_buffer_allocator_,
|
||||
target_page->slots_buffer_address(), slot,
|
||||
SlotsBuffer::IGNORE_OVERFLOW));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CodeFlusher::AddCandidate(SharedFunctionInfo* shared_info) {
|
||||
if (GetNextCandidate(shared_info) == NULL) {
|
||||
SetNextCandidate(shared_info, shared_function_info_candidates_head_);
|
||||
|
@ -2581,32 +2581,6 @@ void MarkCompactCollector::RecordMigratedSlot(Object* value, Address slot) {
|
||||
}
|
||||
|
||||
|
||||
void MarkCompactCollector::RecordSlot(HeapObject* object, Object** slot,
|
||||
Object* target) {
|
||||
Page* target_page = Page::FromAddress(reinterpret_cast<Address>(target));
|
||||
if (target_page->IsEvacuationCandidate() &&
|
||||
!ShouldSkipEvacuationSlotRecording(object)) {
|
||||
if (!SlotsBuffer::AddTo(slots_buffer_allocator_,
|
||||
target_page->slots_buffer_address(), slot,
|
||||
SlotsBuffer::FAIL_ON_OVERFLOW)) {
|
||||
EvictPopularEvacuationCandidate(target_page);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void MarkCompactCollector::ForceRecordSlot(HeapObject* object, Object** slot,
|
||||
Object* target) {
|
||||
Page* target_page = Page::FromAddress(reinterpret_cast<Address>(target));
|
||||
if (target_page->IsEvacuationCandidate() &&
|
||||
!ShouldSkipEvacuationSlotRecording(object)) {
|
||||
CHECK(SlotsBuffer::AddTo(slots_buffer_allocator_,
|
||||
target_page->slots_buffer_address(), slot,
|
||||
SlotsBuffer::IGNORE_OVERFLOW));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void MarkCompactCollector::RecordMigratedCodeEntrySlot(
|
||||
Address code_entry, Address code_entry_slot) {
|
||||
if (Page::FromAddress(code_entry)->IsEvacuationCandidate()) {
|
||||
|
@ -419,8 +419,9 @@ class MarkCompactCollector {
|
||||
void RecordRelocSlot(RelocInfo* rinfo, Object* target);
|
||||
void RecordCodeEntrySlot(HeapObject* object, Address slot, Code* target);
|
||||
void RecordCodeTargetPatch(Address pc, Code* target);
|
||||
void RecordSlot(HeapObject* object, Object** slot, Object* target);
|
||||
void ForceRecordSlot(HeapObject* object, Object** slot, Object* target);
|
||||
INLINE(void RecordSlot(HeapObject* object, Object** slot, Object* target));
|
||||
INLINE(void ForceRecordSlot(HeapObject* object, Object** slot,
|
||||
Object* target));
|
||||
|
||||
void UpdateSlots(SlotsBuffer* buffer);
|
||||
void UpdateSlotsRecordedIn(SlotsBuffer* buffer);
|
||||
|
Loading…
Reference in New Issue
Block a user