Fix incremental marking speed accelleration and start incremental marking when old space is almost full when pretenuring objects.
BUG= Review URL: https://codereview.chromium.org/14714004 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14559 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
4c1782022a
commit
c74ee804b3
@ -566,7 +566,11 @@ void IncrementalMarking::Start() {
|
|||||||
PrintF("[IncrementalMarking] Start\n");
|
PrintF("[IncrementalMarking] Start\n");
|
||||||
}
|
}
|
||||||
ASSERT(FLAG_incremental_marking);
|
ASSERT(FLAG_incremental_marking);
|
||||||
|
ASSERT(FLAG_incremental_marking_steps);
|
||||||
ASSERT(state_ == STOPPED);
|
ASSERT(state_ == STOPPED);
|
||||||
|
ASSERT(heap_->gc_state() == Heap::NOT_IN_GC);
|
||||||
|
ASSERT(!Serializer::enabled());
|
||||||
|
ASSERT(heap_->isolate()->IsInitialized());
|
||||||
|
|
||||||
ResetStepCounters();
|
ResetStepCounters();
|
||||||
|
|
||||||
@ -860,6 +864,25 @@ void IncrementalMarking::MarkingComplete(CompletionAction action) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void IncrementalMarking::OldSpaceStep(intptr_t allocated) {
|
||||||
|
if (IsStopped() && WorthActivating() && heap_->NextGCIsLikelyToBeFull()) {
|
||||||
|
// Only start incremental marking in a save state: 1) when we are not in
|
||||||
|
// a GC, 2) when we turned-on incremental marking, 3) when we are
|
||||||
|
// currently not serializing or deserializing the heap.
|
||||||
|
if (heap_->gc_state() != Heap::NOT_IN_GC ||
|
||||||
|
!FLAG_incremental_marking ||
|
||||||
|
!FLAG_incremental_marking_steps ||
|
||||||
|
Serializer::enabled() ||
|
||||||
|
!heap_->isolate()->IsInitialized()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Start();
|
||||||
|
} else {
|
||||||
|
Step(allocated * kFastMarking / kInitialMarkingSpeed, GC_VIA_STACK_GUARD);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void IncrementalMarking::Step(intptr_t allocated_bytes,
|
void IncrementalMarking::Step(intptr_t allocated_bytes,
|
||||||
CompletionAction action) {
|
CompletionAction action) {
|
||||||
if (heap_->gc_state() != Heap::NOT_IN_GC ||
|
if (heap_->gc_state() != Heap::NOT_IN_GC ||
|
||||||
@ -965,7 +988,7 @@ void IncrementalMarking::Step(intptr_t allocated_bytes,
|
|||||||
PrintPID("Postponing speeding up marking until marking starts\n");
|
PrintPID("Postponing speeding up marking until marking starts\n");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
marking_speed_ += kMarkingSpeedAccellerationInterval;
|
marking_speed_ += kMarkingSpeedAccelleration;
|
||||||
marking_speed_ = static_cast<int>(
|
marking_speed_ = static_cast<int>(
|
||||||
Min(kMaxMarkingSpeed,
|
Min(kMaxMarkingSpeed,
|
||||||
static_cast<intptr_t>(marking_speed_ * 1.3)));
|
static_cast<intptr_t>(marking_speed_ * 1.3)));
|
||||||
|
@ -110,10 +110,7 @@ class IncrementalMarking {
|
|||||||
static const intptr_t kMarkingSpeedAccelleration = 2;
|
static const intptr_t kMarkingSpeedAccelleration = 2;
|
||||||
static const intptr_t kMaxMarkingSpeed = 1000;
|
static const intptr_t kMaxMarkingSpeed = 1000;
|
||||||
|
|
||||||
void OldSpaceStep(intptr_t allocated) {
|
void OldSpaceStep(intptr_t allocated);
|
||||||
Step(allocated * kFastMarking / kInitialMarkingSpeed,
|
|
||||||
GC_VIA_STACK_GUARD);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Step(intptr_t allocated, CompletionAction action);
|
void Step(intptr_t allocated, CompletionAction action);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user