1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- // Copyright 2018 The Chromium 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 BASE_TASK_SEQUENCE_MANAGER_SEQUENCED_TASK_SOURCE_H_
- #define BASE_TASK_SEQUENCE_MANAGER_SEQUENCED_TASK_SOURCE_H_
- #include "base/optional.h"
- #include "base/pending_task.h"
- #include "base/task/sequence_manager/lazy_now.h"
- #include "base/task/sequence_manager/tasks.h"
- namespace base {
- namespace sequence_manager {
- namespace internal {
- // Interface to pass tasks to ThreadController.
- class SequencedTaskSource {
- public:
- enum class SelectTaskOption { kDefault, kSkipDelayedTask };
- virtual ~SequencedTaskSource() = default;
- // Returns the next task to run from this source or nullptr if
- // there're no more tasks ready to run. If a task is returned,
- // DidRunTask() must be invoked before the next call to SelectNextTask().
- // |option| allows control on which kind of tasks can be selected.
- virtual Task* SelectNextTask(
- SelectTaskOption option = SelectTaskOption::kDefault) = 0;
- // Notifies this source that the task previously obtained
- // from SelectNextTask() has been completed.
- virtual void DidRunTask() = 0;
- // Returns the delay till the next task or TimeDelta::Max()
- // if there are no tasks left. |option| allows control on which kind of tasks
- // can be selected.
- virtual TimeDelta DelayTillNextTask(
- LazyNow* lazy_now,
- SelectTaskOption option = SelectTaskOption::kDefault) const = 0;
- // Return true if there are any pending tasks in the task source which require
- // high resolution timing.
- virtual bool HasPendingHighResolutionTasks() = 0;
- // Called when we have run out of immediate work. If more immediate work
- // becomes available as a result of any processing done by this callback,
- // return true to schedule a future DoWork.
- virtual bool OnSystemIdle() = 0;
- };
- } // namespace internal
- } // namespace sequence_manager
- } // namespace base
- #endif // BASE_TASK_SEQUENCE_MANAGER_SEQUENCED_TASK_SOURCE_H_
|