| Index: src/heap/gc-tracer.cc
 | 
| diff --git a/src/heap/gc-tracer.cc b/src/heap/gc-tracer.cc
 | 
| index 49f687990b8689e446f6192ae6c9a5f3e6e0777d..703b57b2b3c6672f16a4ddfdf090a2b52e86f5b8 100644
 | 
| --- a/src/heap/gc-tracer.cc
 | 
| +++ b/src/heap/gc-tracer.cc
 | 
| @@ -84,28 +84,17 @@ GCTracer::Event::Event(Type type, GarbageCollectionReason gc_reason,
 | 
|    }
 | 
|  }
 | 
|  
 | 
| -
 | 
|  const char* GCTracer::Event::TypeName(bool short_name) const {
 | 
|    switch (type) {
 | 
|      case SCAVENGER:
 | 
| -      if (short_name) {
 | 
| -        return "s";
 | 
| -      } else {
 | 
| -        return "Scavenge";
 | 
| -      }
 | 
| +      return (short_name) ? "s" : "Scavenge";
 | 
|      case MARK_COMPACTOR:
 | 
|      case INCREMENTAL_MARK_COMPACTOR:
 | 
| -      if (short_name) {
 | 
| -        return "ms";
 | 
| -      } else {
 | 
| -        return "Mark-sweep";
 | 
| -      }
 | 
| +      return (short_name) ? "ms" : "Mark-sweep";
 | 
| +    case MINOR_MARK_COMPACTOR:
 | 
| +      return (short_name) ? "mmc" : "Minor Mark-Compact";
 | 
|      case START:
 | 
| -      if (short_name) {
 | 
| -        return "st";
 | 
| -      } else {
 | 
| -        return "Start";
 | 
| -      }
 | 
| +      return (short_name) ? "st" : "Start";
 | 
|    }
 | 
|    return "Unknown Event Type";
 | 
|  }
 | 
| @@ -116,6 +105,7 @@ GCTracer::GCTracer(Heap* heap)
 | 
|        previous_(current_),
 | 
|        incremental_marking_bytes_(0),
 | 
|        incremental_marking_duration_(0.0),
 | 
| +      incremental_marking_start_time_(0.0),
 | 
|        recorded_incremental_marking_speed_(0.0),
 | 
|        allocation_time_ms_(0.0),
 | 
|        new_space_allocation_counter_bytes_(0),
 | 
| @@ -140,8 +130,8 @@ void GCTracer::ResetForTesting() {
 | 
|    new_space_allocation_in_bytes_since_gc_ = 0.0;
 | 
|    old_generation_allocation_in_bytes_since_gc_ = 0.0;
 | 
|    combined_mark_compact_speed_cache_ = 0.0;
 | 
| -  recorded_scavenges_total_.Reset();
 | 
| -  recorded_scavenges_survived_.Reset();
 | 
| +  recorded_minor_gcs_total_.Reset();
 | 
| +  recorded_minor_gcs_survived_.Reset();
 | 
|    recorded_compactions_.Reset();
 | 
|    recorded_mark_compacts_.Reset();
 | 
|    recorded_incremental_mark_compacts_.Reset();
 | 
| @@ -163,15 +153,22 @@ void GCTracer::Start(GarbageCollector collector,
 | 
|    SampleAllocation(start_time, heap_->NewSpaceAllocationCounter(),
 | 
|                     heap_->OldGenerationAllocationCounter());
 | 
|  
 | 
| -  if (collector == SCAVENGER) {
 | 
| -    current_ = Event(Event::SCAVENGER, gc_reason, collector_reason);
 | 
| -  } else if (collector == MARK_COMPACTOR) {
 | 
| -    if (heap_->incremental_marking()->WasActivated()) {
 | 
| +  switch (collector) {
 | 
| +    case SCAVENGER:
 | 
| +      current_ = Event(Event::SCAVENGER, gc_reason, collector_reason);
 | 
| +      break;
 | 
| +    case MINOR_MARK_COMPACTOR:
 | 
|        current_ =
 | 
| -          Event(Event::INCREMENTAL_MARK_COMPACTOR, gc_reason, collector_reason);
 | 
| -    } else {
 | 
| -      current_ = Event(Event::MARK_COMPACTOR, gc_reason, collector_reason);
 | 
| -    }
 | 
| +          Event(Event::MINOR_MARK_COMPACTOR, gc_reason, collector_reason);
 | 
| +      break;
 | 
| +    case MARK_COMPACTOR:
 | 
| +      if (heap_->incremental_marking()->WasActivated()) {
 | 
| +        current_ = Event(Event::INCREMENTAL_MARK_COMPACTOR, gc_reason,
 | 
| +                         collector_reason);
 | 
| +      } else {
 | 
| +        current_ = Event(Event::MARK_COMPACTOR, gc_reason, collector_reason);
 | 
| +      }
 | 
| +      break;
 | 
|    }
 | 
|  
 | 
|    current_.reduce_memory = heap_->ShouldReduceMemory();
 | 
| @@ -194,7 +191,7 @@ void GCTracer::Start(GarbageCollector collector,
 | 
|  
 | 
|    Counters* counters = heap_->isolate()->counters();
 | 
|  
 | 
| -  if (collector == SCAVENGER) {
 | 
| +  if (Heap::IsYoungGenerationCollector(collector)) {
 | 
|      counters->scavenge_reason()->AddSample(static_cast<int>(gc_reason));
 | 
|    } else {
 | 
|      counters->mark_compact_reason()->AddSample(static_cast<int>(gc_reason));
 | 
| @@ -220,15 +217,16 @@ void GCTracer::ResetIncrementalMarkingCounters() {
 | 
|  void GCTracer::Stop(GarbageCollector collector) {
 | 
|    start_counter_--;
 | 
|    if (start_counter_ != 0) {
 | 
| -    heap_->isolate()->PrintWithTimestamp(
 | 
| -        "[Finished reentrant %s during %s.]\n",
 | 
| -        collector == SCAVENGER ? "Scavenge" : "Mark-sweep",
 | 
| -        current_.TypeName(false));
 | 
| +    heap_->isolate()->PrintWithTimestamp("[Finished reentrant %s during %s.]\n",
 | 
| +                                         Heap::CollectorName(collector),
 | 
| +                                         current_.TypeName(false));
 | 
|      return;
 | 
|    }
 | 
|  
 | 
|    DCHECK(start_counter_ >= 0);
 | 
|    DCHECK((collector == SCAVENGER && current_.type == Event::SCAVENGER) ||
 | 
| +         (collector == MINOR_MARK_COMPACTOR &&
 | 
| +          current_.type == Event::MINOR_MARK_COMPACTOR) ||
 | 
|           (collector == MARK_COMPACTOR &&
 | 
|            (current_.type == Event::MARK_COMPACTOR ||
 | 
|             current_.type == Event::INCREMENTAL_MARK_COMPACTOR)));
 | 
| @@ -250,36 +248,45 @@ void GCTracer::Stop(GarbageCollector collector) {
 | 
|  
 | 
|    double duration = current_.end_time - current_.start_time;
 | 
|  
 | 
| -  if (current_.type == Event::SCAVENGER) {
 | 
| -    recorded_scavenges_total_.Push(
 | 
| -        MakeBytesAndDuration(current_.new_space_object_size, duration));
 | 
| -    recorded_scavenges_survived_.Push(MakeBytesAndDuration(
 | 
| -        current_.survived_new_space_object_size, duration));
 | 
| -  } else if (current_.type == Event::INCREMENTAL_MARK_COMPACTOR) {
 | 
| -    current_.incremental_marking_bytes = incremental_marking_bytes_;
 | 
| -    current_.incremental_marking_duration = incremental_marking_duration_;
 | 
| -    for (int i = 0; i < Scope::NUMBER_OF_INCREMENTAL_SCOPES; i++) {
 | 
| -      current_.incremental_marking_scopes[i] = incremental_marking_scopes_[i];
 | 
| -      current_.scopes[i] = incremental_marking_scopes_[i].duration;
 | 
| -    }
 | 
| -    RecordIncrementalMarkingSpeed(current_.incremental_marking_bytes,
 | 
| -                                  current_.incremental_marking_duration);
 | 
| -    recorded_incremental_mark_compacts_.Push(
 | 
| -        MakeBytesAndDuration(current_.start_object_size, duration));
 | 
| -    ResetIncrementalMarkingCounters();
 | 
| -    combined_mark_compact_speed_cache_ = 0.0;
 | 
| -  } else {
 | 
| -    DCHECK_EQ(0u, current_.incremental_marking_bytes);
 | 
| -    DCHECK_EQ(0, current_.incremental_marking_duration);
 | 
| -    recorded_mark_compacts_.Push(
 | 
| -        MakeBytesAndDuration(current_.start_object_size, duration));
 | 
| -    ResetIncrementalMarkingCounters();
 | 
| -    combined_mark_compact_speed_cache_ = 0.0;
 | 
| +  switch (current_.type) {
 | 
| +    case Event::SCAVENGER:
 | 
| +    case Event::MINOR_MARK_COMPACTOR:
 | 
| +      recorded_minor_gcs_total_.Push(
 | 
| +          MakeBytesAndDuration(current_.new_space_object_size, duration));
 | 
| +      recorded_minor_gcs_survived_.Push(MakeBytesAndDuration(
 | 
| +          current_.survived_new_space_object_size, duration));
 | 
| +      break;
 | 
| +    case Event::INCREMENTAL_MARK_COMPACTOR:
 | 
| +      current_.incremental_marking_bytes = incremental_marking_bytes_;
 | 
| +      current_.incremental_marking_duration = incremental_marking_duration_;
 | 
| +      for (int i = 0; i < Scope::NUMBER_OF_INCREMENTAL_SCOPES; i++) {
 | 
| +        current_.incremental_marking_scopes[i] = incremental_marking_scopes_[i];
 | 
| +        current_.scopes[i] = incremental_marking_scopes_[i].duration;
 | 
| +      }
 | 
| +      RecordIncrementalMarkingSpeed(current_.incremental_marking_bytes,
 | 
| +                                    current_.incremental_marking_duration);
 | 
| +      recorded_incremental_mark_compacts_.Push(
 | 
| +          MakeBytesAndDuration(current_.start_object_size, duration));
 | 
| +      ResetIncrementalMarkingCounters();
 | 
| +      combined_mark_compact_speed_cache_ = 0.0;
 | 
| +      break;
 | 
| +    case Event::MARK_COMPACTOR:
 | 
| +      DCHECK_EQ(0u, current_.incremental_marking_bytes);
 | 
| +      DCHECK_EQ(0, current_.incremental_marking_duration);
 | 
| +      recorded_mark_compacts_.Push(
 | 
| +          MakeBytesAndDuration(current_.start_object_size, duration));
 | 
| +      ResetIncrementalMarkingCounters();
 | 
| +      combined_mark_compact_speed_cache_ = 0.0;
 | 
| +      break;
 | 
| +    case Event::START:
 | 
| +      UNREACHABLE();
 | 
|    }
 | 
|  
 | 
|    heap_->UpdateTotalGCTime(duration);
 | 
|  
 | 
| -  if (current_.type == Event::SCAVENGER && FLAG_trace_gc_ignore_scavenger)
 | 
| +  if ((current_.type == Event::SCAVENGER ||
 | 
| +       current_.type == Event::MINOR_MARK_COMPACTOR) &&
 | 
| +      FLAG_trace_gc_ignore_scavenger)
 | 
|      return;
 | 
|  
 | 
|    if (FLAG_trace_gc_nvp) {
 | 
| @@ -500,6 +507,15 @@ void GCTracer::PrintNVP() const {
 | 
|            NewSpaceAllocationThroughputInBytesPerMillisecond(),
 | 
|            ContextDisposalRateInMilliseconds());
 | 
|        break;
 | 
| +    case Event::MINOR_MARK_COMPACTOR:
 | 
| +      heap_->isolate()->PrintWithTimestamp(
 | 
| +          "pause=%.1f "
 | 
| +          "mutator=%.1f "
 | 
| +          "gc=%s "
 | 
| +          "reduce_memory=%d\n",
 | 
| +          duration, spent_in_mutator, current_.TypeName(true),
 | 
| +          current_.reduce_memory);
 | 
| +      break;
 | 
|      case Event::MARK_COMPACTOR:
 | 
|      case Event::INCREMENTAL_MARK_COMPACTOR:
 | 
|        heap_->isolate()->PrintWithTimestamp(
 | 
| @@ -721,9 +737,9 @@ double GCTracer::IncrementalMarkingSpeedInBytesPerMillisecond() const {
 | 
|  double GCTracer::ScavengeSpeedInBytesPerMillisecond(
 | 
|      ScavengeSpeedMode mode) const {
 | 
|    if (mode == kForAllObjects) {
 | 
| -    return AverageSpeed(recorded_scavenges_total_);
 | 
| +    return AverageSpeed(recorded_minor_gcs_total_);
 | 
|    } else {
 | 
| -    return AverageSpeed(recorded_scavenges_survived_);
 | 
| +    return AverageSpeed(recorded_minor_gcs_survived_);
 | 
|    }
 | 
|  }
 | 
|  
 | 
| 
 |