Commit a37f809a authored by hpayer@chromium.org's avatar hpayer@chromium.org

Removed IdleGlobalGC and just perform IdleNotification when incremental marking is on.

BUG=397026
LOG=n
R=mstarzinger@chromium.org

Review URL: https://codereview.chromium.org/422013002

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22647 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent e251f91f
......@@ -4250,6 +4250,9 @@ void Heap::AdvanceIdleIncrementalMarking(intptr_t step_size) {
bool Heap::IdleNotification(int hint) {
// If incremental marking is off, we do not perform idle notification.
if (!FLAG_incremental_marking) return true;
// Hints greater than this value indicate that
// the embedder is requesting a lot of GC work.
const int kMaxHint = 1000;
......@@ -4286,10 +4289,6 @@ bool Heap::IdleNotification(int hint) {
return false;
}
if (!FLAG_incremental_marking || isolate_->serializer_enabled()) {
return IdleGlobalGC();
}
// By doing small chunks of GC work in each IdleNotification,
// perform a round of incremental GCs and after that wait until
// the mutator creates enough garbage to justify a new round.
......@@ -4344,66 +4343,6 @@ bool Heap::IdleNotification(int hint) {
}
bool Heap::IdleGlobalGC() {
static const int kIdlesBeforeScavenge = 4;
static const int kIdlesBeforeMarkSweep = 7;
static const int kIdlesBeforeMarkCompact = 8;
static const int kMaxIdleCount = kIdlesBeforeMarkCompact + 1;
static const unsigned int kGCsBetweenCleanup = 4;
if (!last_idle_notification_gc_count_init_) {
last_idle_notification_gc_count_ = gc_count_;
last_idle_notification_gc_count_init_ = true;
}
bool uncommit = true;
bool finished = false;
// Reset the number of idle notifications received when a number of
// GCs have taken place. This allows another round of cleanup based
// on idle notifications if enough work has been carried out to
// provoke a number of garbage collections.
if (gc_count_ - last_idle_notification_gc_count_ < kGCsBetweenCleanup) {
number_idle_notifications_ =
Min(number_idle_notifications_ + 1, kMaxIdleCount);
} else {
number_idle_notifications_ = 0;
last_idle_notification_gc_count_ = gc_count_;
}
if (number_idle_notifications_ == kIdlesBeforeScavenge) {
CollectGarbage(NEW_SPACE, "idle notification");
new_space_.Shrink();
last_idle_notification_gc_count_ = gc_count_;
} else if (number_idle_notifications_ == kIdlesBeforeMarkSweep) {
// Before doing the mark-sweep collections we clear the
// compilation cache to avoid hanging on to source code and
// generated code for cached functions.
isolate_->compilation_cache()->Clear();
CollectAllGarbage(kReduceMemoryFootprintMask, "idle notification");
new_space_.Shrink();
last_idle_notification_gc_count_ = gc_count_;
} else if (number_idle_notifications_ == kIdlesBeforeMarkCompact) {
CollectAllGarbage(kReduceMemoryFootprintMask, "idle notification");
new_space_.Shrink();
last_idle_notification_gc_count_ = gc_count_;
number_idle_notifications_ = 0;
finished = true;
} else if (number_idle_notifications_ > kIdlesBeforeMarkCompact) {
// If we have received more than kIdlesBeforeMarkCompact idle
// notifications we do not perform any cleanup because we don't
// expect to gain much by doing so.
finished = true;
}
if (uncommit) UncommitFromSpace();
return finished;
}
#ifdef DEBUG
void Heap::Print() {
......
......@@ -2078,9 +2078,6 @@ class Heap {
return heap_size_mb / kMbPerMs;
}
// Returns true if no more GC work is left.
bool IdleGlobalGC();
void AdvanceIdleIncrementalMarking(intptr_t step_size);
void ClearObjectStats(bool clear_last_time_stats = false);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment