| Index: src/heap/gc-tracer.cc
|
| diff --git a/src/heap/gc-tracer.cc b/src/heap/gc-tracer.cc
|
| index 0368f40ed67c760428d49f4167af2375e9788eba..12de0e457e500d47ca8e77b1dffff435b53fd12a 100644
|
| --- a/src/heap/gc-tracer.cc
|
| +++ b/src/heap/gc-tracer.cc
|
| @@ -38,6 +38,8 @@ GCTracer::Event::Event(Type type, const char* gc_reason,
|
| incremental_marking_bytes(0),
|
| cumulative_incremental_marking_duration(0.0),
|
| incremental_marking_duration(0.0),
|
| + cumulative_pure_incremental_marking_duration(0.0),
|
| + pure_incremental_marking_duration(0.0),
|
| longest_incremental_marking_step(0.0) {
|
| for (int i = 0; i < Scope::NUMBER_OF_SCOPES; i++) {
|
| scopes[i] = 0;
|
| @@ -75,6 +77,7 @@ GCTracer::GCTracer(Heap* heap)
|
| cumulative_incremental_marking_steps_(0),
|
| cumulative_incremental_marking_bytes_(0),
|
| cumulative_incremental_marking_duration_(0.0),
|
| + cumulative_pure_incremental_marking_duration_(0.0),
|
| longest_incremental_marking_step_(0.0),
|
| cumulative_marking_duration_(0.0),
|
| cumulative_sweeping_duration_(0.0) {
|
| @@ -107,6 +110,8 @@ void GCTracer::Start(GarbageCollector collector, const char* gc_reason,
|
| cumulative_incremental_marking_bytes_;
|
| current_.cumulative_incremental_marking_duration =
|
| cumulative_incremental_marking_duration_;
|
| + current_.cumulative_pure_incremental_marking_duration =
|
| + cumulative_pure_incremental_marking_duration_;
|
| current_.longest_incremental_marking_step = longest_incremental_marking_step_;
|
|
|
| for (int i = 0; i < Scope::NUMBER_OF_SCOPES; i++) {
|
| @@ -131,6 +136,9 @@ void GCTracer::Stop() {
|
| current_.incremental_marking_duration =
|
| current_.cumulative_incremental_marking_duration -
|
| previous_.cumulative_incremental_marking_duration;
|
| + current_.pure_incremental_marking_duration =
|
| + current_.cumulative_pure_incremental_marking_duration -
|
| + previous_.cumulative_pure_incremental_marking_duration;
|
| scavenger_events_.push_front(current_);
|
| } else {
|
| current_.incremental_marking_steps =
|
| @@ -142,6 +150,10 @@ void GCTracer::Stop() {
|
| current_.incremental_marking_duration =
|
| current_.cumulative_incremental_marking_duration -
|
| previous_mark_compactor_event_.cumulative_incremental_marking_duration;
|
| + current_.pure_incremental_marking_duration =
|
| + current_.cumulative_pure_incremental_marking_duration -
|
| + previous_mark_compactor_event_
|
| + .cumulative_pure_incremental_marking_duration;
|
| longest_incremental_marking_step_ = 0.0;
|
| mark_compactor_events_.push_front(current_);
|
| }
|
| @@ -177,6 +189,9 @@ void GCTracer::AddIncrementalMarkingStep(double duration, intptr_t bytes) {
|
| longest_incremental_marking_step_ =
|
| Max(longest_incremental_marking_step_, duration);
|
| cumulative_marking_duration_ += duration;
|
| + if (bytes > 0) {
|
| + cumulative_pure_incremental_marking_duration_ += duration;
|
| + }
|
| }
|
|
|
|
|
| @@ -367,7 +382,7 @@ intptr_t GCTracer::IncrementalMarkingSpeedInBytesPerMillisecond() const {
|
| // Use data from GCTracer instead of data from event buffers.
|
| if (mark_compactor_events_.empty()) {
|
| return static_cast<intptr_t>(cumulative_incremental_marking_bytes_ /
|
| - cumulative_incremental_marking_duration_);
|
| + cumulative_pure_incremental_marking_duration_);
|
| }
|
|
|
| intptr_t bytes = 0;
|
| @@ -375,7 +390,7 @@ intptr_t GCTracer::IncrementalMarkingSpeedInBytesPerMillisecond() const {
|
| EventBuffer::const_iterator iter = mark_compactor_events_.begin();
|
| while (iter != mark_compactor_events_.end()) {
|
| bytes += iter->incremental_marking_bytes;
|
| - durations += iter->incremental_marking_duration;
|
| + durations += iter->pure_incremental_marking_duration;
|
| ++iter;
|
| }
|
|
|
|
|