| // Copyright 2011 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "base/pending_task.h" |
| |
| #include "base/task/task_features.h" |
| |
| namespace base { |
| |
| TaskMetadata::TaskMetadata() = default; |
| |
| TaskMetadata::TaskMetadata(const Location& posted_from, |
| TimeTicks queue_time, |
| TimeTicks delayed_run_time, |
| TimeDelta leeway, |
| subtle::DelayPolicy delay_policy) |
| : posted_from(posted_from), |
| queue_time(queue_time), |
| delayed_run_time(delayed_run_time), |
| leeway(leeway), |
| delay_policy(delay_policy) {} |
| |
| TaskMetadata::TaskMetadata(TaskMetadata&& other) = default; |
| TaskMetadata::TaskMetadata(const TaskMetadata& other) = default; |
| |
| TaskMetadata::~TaskMetadata() = default; |
| |
| TaskMetadata& TaskMetadata::operator=(TaskMetadata&& other) = default; |
| TaskMetadata& TaskMetadata::operator=(const TaskMetadata& other) = default; |
| |
| PendingTask::PendingTask() = default; |
| |
| PendingTask::PendingTask(const Location& posted_from, |
| OnceClosure task, |
| TimeTicks queue_time, |
| TimeTicks delayed_run_time, |
| TimeDelta leeway, |
| subtle::DelayPolicy delay_policy) |
| : TaskMetadata(posted_from, |
| queue_time, |
| delayed_run_time, |
| leeway, |
| delay_policy), |
| task(std::move(task)) {} |
| |
| PendingTask::PendingTask(const TaskMetadata& metadata, OnceClosure task) |
| : TaskMetadata(metadata), task(std::move(task)) {} |
| |
| PendingTask::PendingTask(PendingTask&& other) = default; |
| |
| PendingTask::~PendingTask() = default; |
| |
| PendingTask& PendingTask::operator=(PendingTask&& other) = default; |
| |
| TimeTicks TaskMetadata::GetDesiredExecutionTime() const { |
| if (!delayed_run_time.is_null()) |
| return delayed_run_time; |
| return queue_time; |
| } |
| |
| TimeTicks TaskMetadata::earliest_delayed_run_time() const { |
| DCHECK(!delayed_run_time.is_null()); |
| if (delay_policy == subtle::DelayPolicy::kFlexiblePreferEarly) |
| return delayed_run_time - leeway; |
| return delayed_run_time; |
| } |
| |
| TimeTicks TaskMetadata::latest_delayed_run_time() const { |
| DCHECK(!delayed_run_time.is_null()); |
| if (delay_policy == subtle::DelayPolicy::kFlexibleNoSooner) |
| return delayed_run_time + leeway; |
| return delayed_run_time; |
| } |
| |
| } // namespace base |