xref: /third_party/node/deps/v8/src/tasks/task-utils.cc (revision 1cb0ef41)
1// Copyright 2018 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#include "src/tasks/task-utils.h"
6
7#include "src/tasks/cancelable-task.h"
8
9namespace v8 {
10namespace internal {
11
12namespace {
13
14class CancelableFuncTask final : public CancelableTask {
15 public:
16  CancelableFuncTask(Isolate* isolate, std::function<void()> func)
17      : CancelableTask(isolate), func_(std::move(func)) {}
18  CancelableFuncTask(CancelableTaskManager* manager, std::function<void()> func)
19      : CancelableTask(manager), func_(std::move(func)) {}
20  void RunInternal() final { func_(); }
21
22 private:
23  const std::function<void()> func_;
24};
25
26class CancelableIdleFuncTask final : public CancelableIdleTask {
27 public:
28  CancelableIdleFuncTask(Isolate* isolate, std::function<void(double)> func)
29      : CancelableIdleTask(isolate), func_(std::move(func)) {}
30  CancelableIdleFuncTask(CancelableTaskManager* manager,
31                         std::function<void(double)> func)
32      : CancelableIdleTask(manager), func_(std::move(func)) {}
33  void RunInternal(double deadline_in_seconds) final {
34    func_(deadline_in_seconds);
35  }
36
37 private:
38  const std::function<void(double)> func_;
39};
40
41}  // namespace
42
43std::unique_ptr<CancelableTask> MakeCancelableTask(Isolate* isolate,
44                                                   std::function<void()> func) {
45  return std::make_unique<CancelableFuncTask>(isolate, std::move(func));
46}
47
48std::unique_ptr<CancelableTask> MakeCancelableTask(
49    CancelableTaskManager* manager, std::function<void()> func) {
50  return std::make_unique<CancelableFuncTask>(manager, std::move(func));
51}
52
53std::unique_ptr<CancelableIdleTask> MakeCancelableIdleTask(
54    Isolate* isolate, std::function<void(double)> func) {
55  return std::make_unique<CancelableIdleFuncTask>(isolate, std::move(func));
56}
57
58std::unique_ptr<CancelableIdleTask> MakeCancelableIdleTask(
59    CancelableTaskManager* manager, std::function<void(double)> func) {
60  return std::make_unique<CancelableIdleFuncTask>(manager, std::move(func));
61}
62
63}  // namespace internal
64}  // namespace v8
65