123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- #ifndef BASE_TASK_SEQUENCE_MANAGER_TASKS_H_
- #define BASE_TASK_SEQUENCE_MANAGER_TASKS_H_
- #include "base/pending_task.h"
- #include "base/sequenced_task_runner.h"
- #include "base/task/sequence_manager/enqueue_order.h"
- namespace base {
- namespace sequence_manager {
- using TaskType = uint8_t;
- constexpr TaskType kTaskTypeNone = 0;
- namespace internal {
- enum class WakeUpResolution { kLow, kHigh };
- struct BASE_EXPORT PostedTask {
- explicit PostedTask(scoped_refptr<SequencedTaskRunner> task_runner,
- OnceClosure callback = OnceClosure(),
- Location location = Location(),
- TimeDelta delay = TimeDelta(),
- Nestable nestable = Nestable::kNestable,
- TaskType task_type = kTaskTypeNone);
- PostedTask(PostedTask&& move_from) noexcept;
- PostedTask(const PostedTask&) = delete;
- PostedTask& operator=(const PostedTask&) = delete;
- ~PostedTask();
- OnceClosure callback;
- Location location;
- TimeDelta delay;
- Nestable nestable;
- TaskType task_type;
-
-
- scoped_refptr<SequencedTaskRunner> task_runner;
-
- TimeTicks queue_time;
- };
- struct DelayedWakeUp {
- TimeTicks time;
- int sequence_num;
- bool operator!=(const DelayedWakeUp& other) const {
- return time != other.time || other.sequence_num != sequence_num;
- }
- bool operator==(const DelayedWakeUp& other) const {
- return !(*this != other);
- }
- bool operator<=(const DelayedWakeUp& other) const {
- if (time == other.time) {
-
- DCHECK(sequence_num != other.sequence_num || this == &other);
-
-
- return (sequence_num - other.sequence_num) <= 0;
- }
- return time < other.time;
- }
- };
- }
- struct BASE_EXPORT Task : public PendingTask {
- Task(internal::PostedTask posted_task,
- TimeTicks delayed_run_time,
- EnqueueOrder sequence_order,
- EnqueueOrder enqueue_order = EnqueueOrder(),
- internal::WakeUpResolution wake_up_resolution =
- internal::WakeUpResolution::kLow);
- Task(Task&& move_from);
- ~Task();
- Task& operator=(Task&& other);
- internal::DelayedWakeUp delayed_wake_up() const {
- return internal::DelayedWakeUp{delayed_run_time, sequence_num};
- }
-
-
- EnqueueOrder enqueue_order() const {
- DCHECK(enqueue_order_);
- return enqueue_order_;
- }
- void set_enqueue_order(EnqueueOrder enqueue_order) {
- DCHECK(!enqueue_order_);
- enqueue_order_ = enqueue_order;
- }
- bool enqueue_order_set() const { return enqueue_order_; }
- TaskType task_type;
-
-
- scoped_refptr<SequencedTaskRunner> task_runner;
- #if DCHECK_IS_ON()
- bool cross_thread_;
- #endif
- private:
-
-
-
-
-
- EnqueueOrder enqueue_order_;
- };
- }
- }
- #endif
|