1 // Copyright 2018 The Chromium 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 "base/task/sequence_manager/tasks.h"
6
7 namespace base {
8 namespace sequence_manager {
9
Task(internal::PostedTask posted_task,TimeTicks delayed_run_time,EnqueueOrder sequence_order,EnqueueOrder enqueue_order,internal::WakeUpResolution resolution)10 Task::Task(internal::PostedTask posted_task,
11 TimeTicks delayed_run_time,
12 EnqueueOrder sequence_order,
13 EnqueueOrder enqueue_order,
14 internal::WakeUpResolution resolution)
15 : PendingTask(posted_task.location,
16 std::move(posted_task.callback),
17 delayed_run_time,
18 posted_task.nestable),
19 task_type(posted_task.task_type),
20 task_runner(std::move(posted_task.task_runner)),
21 enqueue_order_(enqueue_order) {
22 // We use |sequence_num| in DelayedWakeUp for ordering purposes and it
23 // may wrap around to a negative number during the static cast, hence,
24 // the relevant code is especially sensitive to a potential change of
25 // |PendingTask::sequence_num|'s type.
26 static_assert(std::is_same<decltype(sequence_num), int>::value, "");
27 sequence_num = static_cast<int>(sequence_order);
28 this->is_high_res = resolution == internal::WakeUpResolution::kHigh;
29 queue_time = posted_task.queue_time;
30 }
31
32 Task::Task(Task&& move_from) = default;
33
34 Task::~Task() = default;
35
36 Task& Task::operator=(Task&& other) = default;
37
38 namespace internal {
PostedTask(scoped_refptr<SequencedTaskRunner> task_runner,OnceClosure callback,Location location,TimeDelta delay,Nestable nestable,TaskType task_type)39 PostedTask::PostedTask(scoped_refptr<SequencedTaskRunner> task_runner,
40 OnceClosure callback,
41 Location location,
42 TimeDelta delay,
43 Nestable nestable,
44 TaskType task_type)
45 : callback(std::move(callback)),
46 location(location),
47 delay(delay),
48 nestable(nestable),
49 task_type(task_type),
50 task_runner(std::move(task_runner)) {}
51
PostedTask(PostedTask && move_from)52 PostedTask::PostedTask(PostedTask&& move_from) noexcept
53 : callback(std::move(move_from.callback)),
54 location(move_from.location),
55 delay(move_from.delay),
56 nestable(move_from.nestable),
57 task_type(move_from.task_type),
58 task_runner(std::move(move_from.task_runner)),
59 queue_time(move_from.queue_time) {}
60
61 PostedTask::~PostedTask() = default;
62
63 } // namespace internal
64 } // namespace sequence_manager
65 } // namespace base
66