| // Copyright 2018 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. |
| |
| #include "src/tasks/task-utils.h" |
| |
| #include "src/tasks/cancelable-task.h" |
| |
| namespace v8 { |
| namespace internal { |
| |
| namespace { |
| |
| class CancelableFuncTask final : public CancelableTask { |
| public: |
| CancelableFuncTask(Isolate* isolate, std::function<void()> func) |
| : CancelableTask(isolate), func_(std::move(func)) {} |
| CancelableFuncTask(CancelableTaskManager* manager, std::function<void()> func) |
| : CancelableTask(manager), func_(std::move(func)) {} |
| void RunInternal() final { func_(); } |
| |
| private: |
| const std::function<void()> func_; |
| }; |
| |
| class CancelableIdleFuncTask final : public CancelableIdleTask { |
| public: |
| CancelableIdleFuncTask(Isolate* isolate, std::function<void(double)> func) |
| : CancelableIdleTask(isolate), func_(std::move(func)) {} |
| CancelableIdleFuncTask(CancelableTaskManager* manager, |
| std::function<void(double)> func) |
| : CancelableIdleTask(manager), func_(std::move(func)) {} |
| void RunInternal(double deadline_in_seconds) final { |
| func_(deadline_in_seconds); |
| } |
| |
| private: |
| const std::function<void(double)> func_; |
| }; |
| |
| } // namespace |
| |
| std::unique_ptr<CancelableTask> MakeCancelableTask(Isolate* isolate, |
| std::function<void()> func) { |
| return std::make_unique<CancelableFuncTask>(isolate, std::move(func)); |
| } |
| |
| std::unique_ptr<CancelableTask> MakeCancelableTask( |
| CancelableTaskManager* manager, std::function<void()> func) { |
| return std::make_unique<CancelableFuncTask>(manager, std::move(func)); |
| } |
| |
| std::unique_ptr<CancelableIdleTask> MakeCancelableIdleTask( |
| Isolate* isolate, std::function<void(double)> func) { |
| return std::make_unique<CancelableIdleFuncTask>(isolate, std::move(func)); |
| } |
| |
| std::unique_ptr<CancelableIdleTask> MakeCancelableIdleTask( |
| CancelableTaskManager* manager, std::function<void(double)> func) { |
| return std::make_unique<CancelableIdleFuncTask>(manager, std::move(func)); |
| } |
| |
| } // namespace internal |
| } // namespace v8 |