// Copyright 2015 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_TASKS_CANCELABLE_TASK_H_ #define V8_TASKS_CANCELABLE_TASK_H_ #include <atomic> #include <unordered_map> #include "include/v8-platform.h" #include "src/base/macros.h" #include "src/base/platform/condition-variable.h" namespace v8 { namespace internal { class Cancelable; class Isolate; // The possible outcomes of trying to abort a job are: // (1) The task is already finished running or was canceled before and // thus has been removed from the manager. // (2) The task is currently running and cannot be canceled anymore. // (3) The task is not yet running (or finished) so it is canceled and // removed. enum class TryAbortResult { … }; // Keeps track of cancelable tasks. It is possible to register and remove tasks // from any fore- and background task/thread. class V8_EXPORT_PRIVATE CancelableTaskManager { … }; class V8_EXPORT_PRIVATE Cancelable { … }; // Multiple inheritance can be used because Task is a pure interface. class V8_EXPORT_PRIVATE CancelableTask : public Cancelable, NON_EXPORTED_BASE(public Task) { … }; // Multiple inheritance can be used because IdleTask is a pure interface. class CancelableIdleTask : public Cancelable, public IdleTask { … }; } // namespace internal } // namespace v8 #endif // V8_TASKS_CANCELABLE_TASK_H_