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 BASE_PENDING_TASK_H_
      6 #define BASE_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               Closure task);
     23   PendingTask(const tracked_objects::Location& posted_from,
     24               Closure task,
     25               TimeTicks delayed_run_time,
     26               bool nestable);
     27   PendingTask(PendingTask&& other);
     28   ~PendingTask();
     29 
     30   PendingTask& operator=(PendingTask&& other);
     31 
     32   // Used to support sorting.
     33   bool operator<(const PendingTask& other) const;
     34 
     35   // The task to run.
     36   Closure task;
     37 
     38   // The site this PendingTask was posted from.
     39   tracked_objects::Location posted_from;
     40 
     41   // Secondary sort key for run time.
     42   int sequence_num;
     43 
     44   // OK to dispatch from a nested loop.
     45   bool nestable;
     46 
     47   // Needs high resolution timers.
     48   bool is_high_res;
     49 };
     50 
     51 using TaskQueue = std::queue<PendingTask>;
     52 
     53 // PendingTasks are sorted by their |delayed_run_time| property.
     54 using DelayedTaskQueue = std::priority_queue<base::PendingTask>;
     55 
     56 }  // namespace base
     57 
     58 #endif  // BASE_PENDING_TASK_H_
     59