| // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // 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/tracked_objects.h" |
| |
| namespace base { |
| |
| PendingTask::PendingTask(const tracked_objects::Location& posted_from, |
| base::Closure task) |
| : base::TrackingInfo(posted_from, TimeTicks()), |
| task(std::move(task)), |
| posted_from(posted_from), |
| sequence_num(0), |
| nestable(true), |
| is_high_res(false) { |
| } |
| |
| PendingTask::PendingTask(const tracked_objects::Location& posted_from, |
| base::Closure task, |
| TimeTicks delayed_run_time, |
| bool nestable) |
| : base::TrackingInfo(posted_from, delayed_run_time), |
| task(std::move(task)), |
| posted_from(posted_from), |
| sequence_num(0), |
| nestable(nestable), |
| is_high_res(false) { |
| } |
| |
| PendingTask::PendingTask(PendingTask&& other) = default; |
| |
| PendingTask::~PendingTask() { |
| } |
| |
| PendingTask& PendingTask::operator=(PendingTask&& other) = default; |
| |
| bool PendingTask::operator<(const PendingTask& other) const { |
| // Since the top of a priority queue is defined as the "greatest" element, we |
| // need to invert the comparison here. We want the smaller time to be at the |
| // top of the heap. |
| |
| if (delayed_run_time < other.delayed_run_time) |
| return false; |
| |
| if (delayed_run_time > other.delayed_run_time) |
| return true; |
| |
| // If the times happen to match, then we use the sequence number to decide. |
| // Compare the difference to support integer roll-over. |
| return (sequence_num - other.sequence_num) > 0; |
| } |
| |
| } // namespace base |