Home | History | Annotate | Download | only in base
      1 // Copyright (c) 2011 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 #ifndef PENDING_TASK_H_
      6 #define PENDING_TASK_H_
      7 
      8 #include <queue>
      9 
     10 #include "base/base_export.h"
     11 #include "base/callback.h"
     12 #include "base/location.h"
     13 #include "base/time/time.h"
     14 #include "base/tracking_info.h"
     15 
     16 namespace base {
     17 
     18 // Contains data about a pending task. Stored in TaskQueue and DelayedTaskQueue
     19 // for use by classes that queue and execute tasks.
     20 struct BASE_EXPORT PendingTask : public TrackingInfo {
     21   PendingTask(const tracked_objects::Location& posted_from,
     22               const Closure& task);
     23   PendingTask(const tracked_objects::Location& posted_from,
     24               const Closure& task,
     25               TimeTicks delayed_run_time,
     26               bool nestable);
     27   ~PendingTask();
     28 
     29   // Used to support sorting.
     30   bool operator<(const PendingTask& other) const;
     31 
     32   // The task to run.
     33   Closure task;
     34 
     35   // The site this PendingTask was posted from.
     36   tracked_objects::Location posted_from;
     37 
     38   // Secondary sort key for run time.
     39   int sequence_num;
     40 
     41   // OK to dispatch from a nested loop.
     42   bool nestable;
     43 
     44   // Needs high resolution timers.
     45   bool is_high_res;
     46 };
     47 
     48 // Wrapper around std::queue specialized for PendingTask which adds a Swap
     49 // helper method.
     50 class BASE_EXPORT TaskQueue : public std::queue<PendingTask> {
     51  public:
     52   void Swap(TaskQueue* queue);
     53 };
     54 
     55 // PendingTasks are sorted by their |delayed_run_time| property.
     56 typedef std::priority_queue<base::PendingTask> DelayedTaskQueue;
     57 
     58 }  // namespace base
     59 
     60 #endif  // PENDING_TASK_H_
     61