Home | History | Annotate | Download | only in heap
      1 // Copyright 2012 the V8 project authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef V8_HEAP_INCREMENTAL_MARKING_JOB_H_
      6 #define V8_HEAP_INCREMENTAL_MARKING_JOB_H_
      7 
      8 #include "src/cancelable-task.h"
      9 
     10 namespace v8 {
     11 namespace internal {
     12 
     13 class Heap;
     14 class Isolate;
     15 
     16 // The incremental marking job uses platform tasks to perform incremental
     17 // marking steps. The job posts a foreground task that makes a small (~1ms)
     18 // step and posts another task until the marking is completed.
     19 class IncrementalMarkingJob {
     20  public:
     21   class Task : public CancelableTask {
     22    public:
     23     explicit Task(Isolate* isolate, IncrementalMarkingJob* job)
     24         : CancelableTask(isolate), job_(job) {}
     25     static void Step(Heap* heap);
     26     // CancelableTask overrides.
     27     void RunInternal() override;
     28 
     29    private:
     30     IncrementalMarkingJob* job_;
     31   };
     32 
     33   IncrementalMarkingJob() : task_pending_(false) {}
     34 
     35   bool TaskPending() { return task_pending_; }
     36 
     37   void Start(Heap* heap);
     38 
     39   void NotifyTask();
     40 
     41   void ScheduleTask(Heap* heap);
     42 
     43  private:
     44   bool task_pending_;
     45 };
     46 }  // namespace internal
     47 }  // namespace v8
     48 
     49 #endif  // V8_HEAP_INCREMENTAL_MARKING_JOB_H_
     50