Revision: 14879
Author: [email protected]
Date: Wed May 29 04:44:54 2013
Log: Make more GCs in idle notification handler.
When counting GCs in idle round, count only GC that were directly triggered
by the idle notification handler.
[email protected]
BUG=241815
Review URL: https://chromiumcodereview.appspot.com/15737007
http://code.google.com/p/v8/source/detail?r=14879
Modified:
/branches/bleeding_edge/src/heap.cc
/branches/bleeding_edge/src/heap.h
=======================================
--- /branches/bleeding_edge/src/heap.cc Thu May 23 08:11:43 2013
+++ /branches/bleeding_edge/src/heap.cc Wed May 29 04:44:54 2013
@@ -152,7 +152,6 @@
last_idle_notification_gc_count_(0),
last_idle_notification_gc_count_init_(false),
mark_sweeps_since_idle_round_started_(0),
- ms_count_at_last_idle_notification_(0),
gc_count_at_last_idle_gc_(0),
scavenges_since_last_idle_round_(kIdleScavengeThreshold),
gcs_since_last_deopt_(0),
@@ -5770,6 +5769,7 @@
uncommit = true;
}
CollectAllGarbage(kNoGCFlags, "idle notification: finalize
incremental");
+ mark_sweeps_since_idle_round_started_++;
gc_count_at_last_idle_gc_ = gc_count_;
if (uncommit) {
new_space_.Shrink();
@@ -5844,19 +5844,10 @@
return true;
}
}
-
- int new_mark_sweeps = ms_count_ - ms_count_at_last_idle_notification_;
- mark_sweeps_since_idle_round_started_ += new_mark_sweeps;
- ms_count_at_last_idle_notification_ = ms_count_;
int remaining_mark_sweeps = kMaxMarkSweepsInIdleRound -
mark_sweeps_since_idle_round_started_;
- if (remaining_mark_sweeps <= 0) {
- FinishIdleRound();
- return true;
- }
-
if (incremental_marking()->IsStopped()) {
// If there are no more than two GCs left in this idle round and we are
// allowed to do a full GC, then make those GCs full in order to
compact
@@ -5866,6 +5857,7 @@
if (remaining_mark_sweeps <= 2 && hint >= kMinHintForFullGC) {
CollectAllGarbage(kReduceMemoryFootprintMask,
"idle notification: finalize idle round");
+ mark_sweeps_since_idle_round_started_++;
} else {
incremental_marking()->Start();
}
@@ -5873,6 +5865,12 @@
if (!incremental_marking()->IsStopped()) {
AdvanceIdleIncrementalMarking(step_size);
}
+
+ if (mark_sweeps_since_idle_round_started_ >= kMaxMarkSweepsInIdleRound) {
+ FinishIdleRound();
+ return true;
+ }
+
return false;
}
=======================================
--- /branches/bleeding_edge/src/heap.h Tue May 28 02:38:28 2013
+++ /branches/bleeding_edge/src/heap.h Wed May 29 04:44:54 2013
@@ -2266,7 +2266,6 @@
void StartIdleRound() {
mark_sweeps_since_idle_round_started_ = 0;
- ms_count_at_last_idle_notification_ = ms_count_;
}
void FinishIdleRound() {
@@ -2343,7 +2342,6 @@
bool last_idle_notification_gc_count_init_;
int mark_sweeps_since_idle_round_started_;
- int ms_count_at_last_idle_notification_;
unsigned int gc_count_at_last_idle_gc_;
int scavenges_since_last_idle_round_;
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.