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: Task(Isolate * isolate,IncrementalMarkingJob * job)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 IncrementalMarkingJob()33 IncrementalMarkingJob() : task_pending_(false) {} 34 TaskPending()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