| Index: src/heap/mark-compact.h
 | 
| diff --git a/src/heap/mark-compact.h b/src/heap/mark-compact.h
 | 
| index 7203ad05c0eda3e9afb309149d725cc066930191..a5d4b0e64282f1e0354993ca99978c07db8e8f21 100644
 | 
| --- a/src/heap/mark-compact.h
 | 
| +++ b/src/heap/mark-compact.h
 | 
| @@ -316,25 +316,24 @@ class MarkCompactCollector {
 | 
|          : heap_(heap),
 | 
|            pending_sweeper_tasks_semaphore_(0),
 | 
|            sweeping_in_progress_(false),
 | 
| +          late_pages_(false),
 | 
|            num_sweeping_tasks_(0) {}
 | 
|  
 | 
|      bool sweeping_in_progress() { return sweeping_in_progress_; }
 | 
| +    bool contains_late_pages() { return late_pages_; }
 | 
|  
 | 
|      void AddPage(AllocationSpace space, Page* page);
 | 
| +    void AddLatePage(AllocationSpace space, Page* page);
 | 
|  
 | 
|      int ParallelSweepSpace(AllocationSpace identity, int required_freed_bytes,
 | 
|                             int max_pages = 0);
 | 
|      int ParallelSweepPage(Page* page, AllocationSpace identity);
 | 
|  
 | 
| -    // After calling this function sweeping is considered to be in progress
 | 
| -    // and the main thread can sweep lazily, but the background sweeper tasks
 | 
| -    // are not running yet.
 | 
|      void StartSweeping();
 | 
| -    void StartSweeperTasks();
 | 
| +    void StartSweepingHelper(AllocationSpace space_to_start);
 | 
|      void EnsureCompleted();
 | 
|      void EnsureNewSpaceCompleted();
 | 
| -    bool AreSweeperTasksRunning();
 | 
| -    bool IsSweepingCompleted(AllocationSpace space);
 | 
| +    bool IsSweepingCompleted();
 | 
|      void SweepOrWaitUntilSweepingCompleted(Page* page);
 | 
|  
 | 
|      void AddSweptPageSafe(PagedSpace* space, Page* page);
 | 
| @@ -363,6 +362,7 @@ class MarkCompactCollector {
 | 
|      SweptList swept_list_[kAllocationSpaces];
 | 
|      SweepingList sweeping_list_[kAllocationSpaces];
 | 
|      bool sweeping_in_progress_;
 | 
| +    bool late_pages_;
 | 
|      base::AtomicNumber<intptr_t> num_sweeping_tasks_;
 | 
|    };
 | 
|  
 | 
| @@ -637,10 +637,21 @@ class MarkCompactCollector {
 | 
|  
 | 
|    void AbortTransitionArrays();
 | 
|  
 | 
| -  // Starts sweeping of spaces by contributing on the main thread and setting
 | 
| -  // up other pages for sweeping. Does not start sweeper tasks.
 | 
| -  void StartSweepSpaces();
 | 
| -  void StartSweepSpace(PagedSpace* space);
 | 
| +  // -----------------------------------------------------------------------
 | 
| +  // Phase 2: Sweeping to clear mark bits and free non-live objects for
 | 
| +  // a non-compacting collection.
 | 
| +  //
 | 
| +  //  Before: Live objects are marked and non-live objects are unmarked.
 | 
| +  //
 | 
| +  //   After: Live objects are unmarked, non-live regions have been added to
 | 
| +  //          their space's free list. Active eden semispace is compacted by
 | 
| +  //          evacuation.
 | 
| +  //
 | 
| +
 | 
| +  // If we are not compacting the heap, we simply sweep the spaces except
 | 
| +  // for the large object space, clearing mark bits and adding unmarked
 | 
| +  // regions to each space's free list.
 | 
| +  void SweepSpaces();
 | 
|  
 | 
|    void EvacuateNewSpacePrologue();
 | 
|  
 | 
| @@ -663,6 +674,9 @@ class MarkCompactCollector {
 | 
|  
 | 
|    void ReleaseEvacuationCandidates();
 | 
|  
 | 
| +  // Starts sweeping of a space by contributing on the main thread and setting
 | 
| +  // up other pages for sweeping.
 | 
| +  void StartSweepSpace(PagedSpace* space);
 | 
|  
 | 
|  #ifdef DEBUG
 | 
|    friend class MarkObjectVisitor;
 | 
| 
 |