1 // Copyright 2011 The Chromium Authors
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/pending_task.h"
6
7 #include "base/task/task_features.h"
8
9 namespace base {
10
11 TaskMetadata::TaskMetadata() = default;
12
TaskMetadata(const Location & posted_from,TimeTicks queue_time,TimeTicks delayed_run_time,TimeDelta leeway,subtle::DelayPolicy delay_policy)13 TaskMetadata::TaskMetadata(const Location& posted_from,
14 TimeTicks queue_time,
15 TimeTicks delayed_run_time,
16 TimeDelta leeway,
17 subtle::DelayPolicy delay_policy)
18 : posted_from(posted_from),
19 queue_time(queue_time),
20 delayed_run_time(delayed_run_time),
21 leeway(leeway),
22 delay_policy(delay_policy) {}
23
24 TaskMetadata::TaskMetadata(TaskMetadata&& other) = default;
25 TaskMetadata::TaskMetadata(const TaskMetadata& other) = default;
26
27 TaskMetadata::~TaskMetadata() = default;
28
29 TaskMetadata& TaskMetadata::operator=(TaskMetadata&& other) = default;
30 TaskMetadata& TaskMetadata::operator=(const TaskMetadata& other) = default;
31
32 PendingTask::PendingTask() = default;
33
PendingTask(const Location & posted_from,OnceClosure task,TimeTicks queue_time,TimeTicks delayed_run_time,TimeDelta leeway,subtle::DelayPolicy delay_policy)34 PendingTask::PendingTask(const Location& posted_from,
35 OnceClosure task,
36 TimeTicks queue_time,
37 TimeTicks delayed_run_time,
38 TimeDelta leeway,
39 subtle::DelayPolicy delay_policy)
40 : TaskMetadata(posted_from,
41 queue_time,
42 delayed_run_time,
43 leeway,
44 delay_policy),
45 task(std::move(task)) {}
46
PendingTask(const TaskMetadata & metadata,OnceClosure task)47 PendingTask::PendingTask(const TaskMetadata& metadata, OnceClosure task)
48 : TaskMetadata(metadata), task(std::move(task)) {}
49
50 PendingTask::PendingTask(PendingTask&& other) = default;
51
52 PendingTask::~PendingTask() = default;
53
54 PendingTask& PendingTask::operator=(PendingTask&& other) = default;
55
GetDesiredExecutionTime() const56 TimeTicks TaskMetadata::GetDesiredExecutionTime() const {
57 if (!delayed_run_time.is_null())
58 return delayed_run_time;
59 return queue_time;
60 }
61
earliest_delayed_run_time() const62 TimeTicks TaskMetadata::earliest_delayed_run_time() const {
63 DCHECK(!delayed_run_time.is_null());
64 if (delay_policy == subtle::DelayPolicy::kFlexiblePreferEarly)
65 return delayed_run_time - leeway;
66 return delayed_run_time;
67 }
68
latest_delayed_run_time() const69 TimeTicks TaskMetadata::latest_delayed_run_time() const {
70 DCHECK(!delayed_run_time.is_null());
71 if (delay_policy == subtle::DelayPolicy::kFlexibleNoSooner)
72 return delayed_run_time + leeway;
73 return delayed_run_time;
74 }
75
76 } // namespace base
77