1014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Copyright 2012 the V8 project authors. All rights reserved. 2014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// found in the LICENSE file. 4014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 5014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#ifndef V8_HEAP_INCREMENTAL_MARKING_JOB_H_ 6014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define V8_HEAP_INCREMENTAL_MARKING_JOB_H_ 7014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 8014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/cancelable-task.h" 9014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 10014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace v8 { 11014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace internal { 12014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 13014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass Heap; 14014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass Isolate; 15014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 16014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// The incremental marking job uses platform tasks to perform incremental 17f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch// marking steps. The job posts a foreground task that makes a small (~1ms) 18f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch// step and posts another task until the marking is completed. 19014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass IncrementalMarkingJob { 20014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch public: 21f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch class Task : public CancelableTask { 22014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch public: 23f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch explicit Task(Isolate* isolate, IncrementalMarkingJob* job) 24014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch : CancelableTask(isolate), job_(job) {} 25014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch static void Step(Heap* heap); 26014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // CancelableTask overrides. 27014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void RunInternal() override; 28014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 29014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch private: 30014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch IncrementalMarkingJob* job_; 31014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch }; 32014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 33f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch IncrementalMarkingJob() : task_pending_(false) {} 34014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 35f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch bool TaskPending() { return task_pending_; } 36014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 37014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void Start(Heap* heap); 38014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 39f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch void NotifyTask(); 40f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 41f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch void ScheduleTask(Heap* heap); 42014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 43014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch private: 44f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch bool task_pending_; 45014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}; 46014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace internal 47014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace v8 48014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 49014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#endif // V8_HEAP_INCREMENTAL_MARKING_JOB_H_ 50