5 #ifndef V8_LIBPLATFORM_DEFAULT_FOREGROUND_TASK_RUNNER_H_ 6 #define V8_LIBPLATFORM_DEFAULT_FOREGROUND_TASK_RUNNER_H_ 10 #include "include/libplatform/libplatform.h" 11 #include "include/v8-platform.h" 12 #include "src/base/platform/condition-variable.h" 13 #include "src/base/platform/mutex.h" 19 :
public NON_EXPORTED_BASE(TaskRunner) {
21 using TimeFunction = double (*)();
24 TimeFunction time_function);
28 std::unique_ptr<Task> PopTaskFromQueue(MessageLoopBehavior wait_for_work);
30 std::unique_ptr<IdleTask> PopTaskFromIdleQueue();
32 void WaitForTaskLocked(
const base::MutexGuard&);
34 double MonotonicallyIncreasingTime();
37 void PostTask(std::unique_ptr<Task> task)
override;
39 void PostDelayedTask(std::unique_ptr<Task> task,
40 double delay_in_seconds)
override;
42 void PostIdleTask(std::unique_ptr<IdleTask> task)
override;
44 bool IdleTasksEnabled()
override;
49 void PostTaskLocked(std::unique_ptr<Task> task,
const base::MutexGuard&);
53 std::unique_ptr<Task> PopTaskFromDelayedQueueLocked(
const base::MutexGuard&);
55 bool terminated_ =
false;
58 std::queue<std::unique_ptr<Task>> task_queue_;
59 IdleTaskSupport idle_task_support_;
60 std::queue<std::unique_ptr<IdleTask>> idle_task_queue_;
63 using DelayedEntry = std::pair<double, std::unique_ptr<Task>>;
68 struct DelayedEntryCompare {
69 bool operator()(
const DelayedEntry& left,
const DelayedEntry& right)
const {
70 return left.first > right.first;
73 std::priority_queue<DelayedEntry, std::vector<DelayedEntry>,
77 TimeFunction time_function_;
82 #endif // V8_LIBPLATFORM_DEFAULT_FOREGROUND_TASK_RUNNER_H_