[heap] Always use getter when accessing MarkingDeque
BUG=chromium:651354 Review-Url: https://codereview.chromium.org/2377273002 Cr-Commit-Position: refs/heads/master@{#39859}
This commit is contained in:
parent
4baa8d86f0
commit
9b7264e30d
@ -962,7 +962,7 @@ bool Heap::CollectGarbage(GarbageCollector collector,
|
||||
!incremental_marking()->should_hurry() && FLAG_incremental_marking &&
|
||||
OldGenerationSpaceAvailable() <= 0) {
|
||||
if (!incremental_marking()->IsComplete() &&
|
||||
!mark_compact_collector()->marking_deque_.IsEmpty() &&
|
||||
!mark_compact_collector()->marking_deque()->IsEmpty() &&
|
||||
!FLAG_gc_global) {
|
||||
if (FLAG_trace_incremental_marking) {
|
||||
isolate()->PrintWithTimestamp(
|
||||
|
@ -14,7 +14,7 @@ namespace internal {
|
||||
|
||||
void MarkCompactCollector::PushBlack(HeapObject* obj) {
|
||||
DCHECK(Marking::IsBlack(ObjectMarking::MarkBitFrom(obj)));
|
||||
if (marking_deque_.Push(obj)) {
|
||||
if (marking_deque()->Push(obj)) {
|
||||
MemoryChunk::IncrementLiveBytesFromGC(obj, obj->Size());
|
||||
} else {
|
||||
MarkBit mark_bit = ObjectMarking::MarkBitFrom(obj);
|
||||
@ -25,7 +25,7 @@ void MarkCompactCollector::PushBlack(HeapObject* obj) {
|
||||
|
||||
void MarkCompactCollector::UnshiftBlack(HeapObject* obj) {
|
||||
DCHECK(Marking::IsBlack(ObjectMarking::MarkBitFrom(obj)));
|
||||
if (!marking_deque_.Unshift(obj)) {
|
||||
if (!marking_deque()->Unshift(obj)) {
|
||||
MemoryChunk::IncrementLiveBytesFromGC(obj, -obj->Size());
|
||||
MarkBit mark_bit = ObjectMarking::MarkBitFrom(obj);
|
||||
Marking::BlackToGrey(mark_bit);
|
||||
|
@ -1977,7 +1977,7 @@ void MarkCompactCollector::MarkRoots(RootMarkingVisitor* visitor) {
|
||||
MarkStringTable(visitor);
|
||||
|
||||
// There may be overflowed objects in the heap. Visit them now.
|
||||
while (marking_deque_.overflowed()) {
|
||||
while (marking_deque()->overflowed()) {
|
||||
RefillMarkingDeque();
|
||||
EmptyMarkingDeque();
|
||||
}
|
||||
@ -2020,8 +2020,8 @@ void MarkCompactCollector::MarkImplicitRefGroups(
|
||||
// After: the marking stack is empty, and all objects reachable from the
|
||||
// marking stack have been marked, or are overflowed in the heap.
|
||||
void MarkCompactCollector::EmptyMarkingDeque() {
|
||||
while (!marking_deque_.IsEmpty()) {
|
||||
HeapObject* object = marking_deque_.Pop();
|
||||
while (!marking_deque()->IsEmpty()) {
|
||||
HeapObject* object = marking_deque()->Pop();
|
||||
|
||||
DCHECK(!object->IsFiller());
|
||||
DCHECK(object->IsHeapObject());
|
||||
@ -2044,25 +2044,25 @@ void MarkCompactCollector::EmptyMarkingDeque() {
|
||||
// is cleared.
|
||||
void MarkCompactCollector::RefillMarkingDeque() {
|
||||
isolate()->CountUsage(v8::Isolate::UseCounterFeature::kMarkDequeOverflow);
|
||||
DCHECK(marking_deque_.overflowed());
|
||||
DCHECK(marking_deque()->overflowed());
|
||||
|
||||
DiscoverGreyObjectsInNewSpace();
|
||||
if (marking_deque_.IsFull()) return;
|
||||
if (marking_deque()->IsFull()) return;
|
||||
|
||||
DiscoverGreyObjectsInSpace(heap()->old_space());
|
||||
if (marking_deque_.IsFull()) return;
|
||||
if (marking_deque()->IsFull()) return;
|
||||
|
||||
DiscoverGreyObjectsInSpace(heap()->code_space());
|
||||
if (marking_deque_.IsFull()) return;
|
||||
if (marking_deque()->IsFull()) return;
|
||||
|
||||
DiscoverGreyObjectsInSpace(heap()->map_space());
|
||||
if (marking_deque_.IsFull()) return;
|
||||
if (marking_deque()->IsFull()) return;
|
||||
|
||||
LargeObjectIterator lo_it(heap()->lo_space());
|
||||
DiscoverGreyObjectsWithIterator(&lo_it);
|
||||
if (marking_deque_.IsFull()) return;
|
||||
if (marking_deque()->IsFull()) return;
|
||||
|
||||
marking_deque_.ClearOverflowed();
|
||||
marking_deque()->ClearOverflowed();
|
||||
}
|
||||
|
||||
|
||||
@ -2072,7 +2072,7 @@ void MarkCompactCollector::RefillMarkingDeque() {
|
||||
// objects in the heap.
|
||||
void MarkCompactCollector::ProcessMarkingDeque() {
|
||||
EmptyMarkingDeque();
|
||||
while (marking_deque_.overflowed()) {
|
||||
while (marking_deque()->overflowed()) {
|
||||
RefillMarkingDeque();
|
||||
EmptyMarkingDeque();
|
||||
}
|
||||
@ -2082,7 +2082,7 @@ void MarkCompactCollector::ProcessMarkingDeque() {
|
||||
// stack including references only considered in the atomic marking pause.
|
||||
void MarkCompactCollector::ProcessEphemeralMarking(
|
||||
ObjectVisitor* visitor, bool only_process_harmony_weak_collections) {
|
||||
DCHECK(marking_deque_.IsEmpty() && !marking_deque_.overflowed());
|
||||
DCHECK(marking_deque()->IsEmpty() && !marking_deque()->overflowed());
|
||||
bool work_to_do = true;
|
||||
while (work_to_do) {
|
||||
if (heap_->UsingEmbedderHeapTracer()) {
|
||||
@ -2099,7 +2099,7 @@ void MarkCompactCollector::ProcessEphemeralMarking(
|
||||
MarkImplicitRefGroups(&MarkCompactMarkingVisitor::MarkObject);
|
||||
}
|
||||
ProcessWeakCollections();
|
||||
work_to_do = !marking_deque_.IsEmpty();
|
||||
work_to_do = !marking_deque()->IsEmpty();
|
||||
ProcessMarkingDeque();
|
||||
}
|
||||
}
|
||||
@ -2123,7 +2123,7 @@ void MarkCompactCollector::ProcessTopOptimizedFrame(ObjectVisitor* visitor) {
|
||||
|
||||
|
||||
void MarkCompactCollector::EnsureMarkingDequeIsReserved() {
|
||||
DCHECK(!marking_deque_.in_use());
|
||||
DCHECK(!marking_deque()->in_use());
|
||||
if (marking_deque_memory_ == NULL) {
|
||||
marking_deque_memory_ = new base::VirtualMemory(kMaxMarkingDequeSize);
|
||||
marking_deque_memory_committed_ = 0;
|
||||
@ -2137,7 +2137,7 @@ void MarkCompactCollector::EnsureMarkingDequeIsReserved() {
|
||||
void MarkCompactCollector::EnsureMarkingDequeIsCommitted(size_t max_size) {
|
||||
// If the marking deque is too small, we try to allocate a bigger one.
|
||||
// If that fails, make do with a smaller one.
|
||||
CHECK(!marking_deque_.in_use());
|
||||
CHECK(!marking_deque()->in_use());
|
||||
for (size_t size = max_size; size >= kMinMarkingDequeSize; size >>= 1) {
|
||||
base::VirtualMemory* memory = marking_deque_memory_;
|
||||
size_t currently_committed = marking_deque_memory_committed_;
|
||||
@ -2169,12 +2169,12 @@ void MarkCompactCollector::EnsureMarkingDequeIsCommitted(size_t max_size) {
|
||||
|
||||
|
||||
void MarkCompactCollector::InitializeMarkingDeque() {
|
||||
DCHECK(!marking_deque_.in_use());
|
||||
DCHECK(!marking_deque()->in_use());
|
||||
DCHECK(marking_deque_memory_committed_ > 0);
|
||||
Address addr = static_cast<Address>(marking_deque_memory_->address());
|
||||
size_t size = marking_deque_memory_committed_;
|
||||
if (FLAG_force_marking_deque_overflows) size = 64 * kPointerSize;
|
||||
marking_deque_.Initialize(addr, addr + size);
|
||||
marking_deque()->Initialize(addr, addr + size);
|
||||
}
|
||||
|
||||
|
||||
@ -2270,8 +2270,8 @@ void MarkCompactCollector::MarkLiveObjects() {
|
||||
} else {
|
||||
// Abort any pending incremental activities e.g. incremental sweeping.
|
||||
incremental_marking->Stop();
|
||||
if (marking_deque_.in_use()) {
|
||||
marking_deque_.Uninitialize(true);
|
||||
if (marking_deque()->in_use()) {
|
||||
marking_deque()->Uninitialize(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -467,7 +467,7 @@ class MarkCompactCollector {
|
||||
static const size_t kMinMarkingDequeSize = 256 * KB;
|
||||
|
||||
void EnsureMarkingDequeIsCommittedAndInitialize(size_t max_size) {
|
||||
if (!marking_deque_.in_use()) {
|
||||
if (!marking_deque()->in_use()) {
|
||||
EnsureMarkingDequeIsCommitted(max_size);
|
||||
InitializeMarkingDeque();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user