%PDF- %PDF-
Direktori : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/heap/ |
Current File : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/heap/incremental-marking-job.h |
// Copyright 2012 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_HEAP_INCREMENTAL_MARKING_JOB_H_ #define V8_HEAP_INCREMENTAL_MARKING_JOB_H_ #include "include/v8-platform.h" #include "src/base/optional.h" #include "src/base/platform/mutex.h" #include "src/base/platform/time.h" namespace v8::internal { class Heap; class Isolate; // The incremental marking job uses platform tasks to perform incremental // marking actions (start, step, finalize). The job posts regular foreground // tasks or delayed foreground tasks if marking progress allows. class IncrementalMarkingJob final { public: enum class TaskType { kNormal, kPending, }; explicit IncrementalMarkingJob(Heap* heap); IncrementalMarkingJob(const IncrementalMarkingJob&) = delete; IncrementalMarkingJob& operator=(const IncrementalMarkingJob&) = delete; // Schedules a task with a given `task_type`. Safe to be called from any // thread. void ScheduleTask(TaskType task_type = TaskType::kNormal); // Returns a weighted average of time to task. For delayed tasks the time to // task is only recorded after the initial delay. In case a task is currently // running, it is added to the average. base::Optional<v8::base::TimeDelta> AverageTimeToTask() const; base::Optional<v8::base::TimeDelta> CurrentTimeToTask() const; private: class Task; Heap* const heap_; const std::shared_ptr<v8::TaskRunner> foreground_task_runner_; mutable base::Mutex mutex_; v8::base::TimeTicks scheduled_time_; base::Optional<TaskType> pending_task_; }; constexpr const char* ToString(IncrementalMarkingJob::TaskType task_type) { switch (task_type) { case IncrementalMarkingJob::TaskType::kNormal: return "normal"; case IncrementalMarkingJob::TaskType::kPending: return "pending"; } } } // namespace v8::internal #endif // V8_HEAP_INCREMENTAL_MARKING_JOB_H_