Line data Source code
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 : enum class TaskType { kNormal, kDelayed };
22 :
23 62441 : IncrementalMarkingJob() V8_NOEXCEPT = default;
24 :
25 : void Start(Heap* heap);
26 :
27 : void ScheduleTask(Heap* heap, TaskType task_type = TaskType::kNormal);
28 :
29 : private:
30 : class Task;
31 : static constexpr double kDelayInSeconds = 10.0 / 1000.0;
32 :
33 : bool IsTaskPending(TaskType task_type) {
34 : return task_type == TaskType::kNormal ? normal_task_pending_
35 1085329 : : delayed_task_pending_;
36 : }
37 : void SetTaskPending(TaskType task_type, bool value) {
38 63460 : if (task_type == TaskType::kNormal) {
39 57506 : normal_task_pending_ = value;
40 : } else {
41 5954 : delayed_task_pending_ = value;
42 : }
43 : }
44 :
45 : bool normal_task_pending_ = false;
46 : bool delayed_task_pending_ = false;
47 : };
48 : } // namespace internal
49 : } // namespace v8
50 :
51 : #endif // V8_HEAP_INCREMENTAL_MARKING_JOB_H_
|