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