Home | History | Annotate | Download | only in base
      1 // Copyright (c) 2012 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 // This is a simple struct with tracking information that is stored
      6 // with a PendingTask (when message_loop is handling the task).
      7 // Only the information that is shared with the profiler in tracked_objects
      8 // are included in this structure.
      9 
     10 
     11 #ifndef BASE_TRACKING_INFO_H_
     12 #define BASE_TRACKING_INFO_H_
     13 
     14 #include "base/base_export.h"
     15 #include "base/profiler/tracked_time.h"
     16 #include "base/time/time.h"
     17 
     18 namespace tracked_objects {
     19 class Location;
     20 class Births;
     21 }
     22 
     23 namespace base {
     24 
     25 // This structure is copied around by value.
     26 struct BASE_EXPORT TrackingInfo {
     27   TrackingInfo();
     28   TrackingInfo(const tracked_objects::Location& posted_from,
     29                base::TimeTicks delayed_run_time);
     30   ~TrackingInfo();
     31 
     32   // To avoid conflating our stats with the delay duration in a PostDelayedTask,
     33   // we identify such tasks, and replace their post_time with the time they
     34   // were scheduled (requested?) to emerge from the delayed task queue. This
     35   // means that queuing delay for such tasks will show how long they went
     36   // unserviced, after they *could* be serviced.  This is the same stat as we
     37   // have for non-delayed tasks, and we consistently call it queuing delay.
     38   tracked_objects::TrackedTime EffectiveTimePosted() const {
     39     return delayed_run_time.is_null()
     40                ? time_posted
     41                : tracked_objects::TrackedTime(delayed_run_time);
     42   }
     43 
     44   // Record of location and thread that the task came from.
     45   tracked_objects::Births* birth_tally;
     46 
     47   // Time when the related task was posted. Note that this value may be empty
     48   // if task profiling is disabled, and should only be used in conjunction with
     49   // profiling-related reporting.
     50   tracked_objects::TrackedTime time_posted;
     51 
     52   // The time when the task should be run.
     53   base::TimeTicks delayed_run_time;
     54 };
     55 
     56 }  // namespace base
     57 
     58 #endif  // BASE_TRACKING_INFO_H_
     59