|  | // Copyright (c) 2012 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. | 
|  |  | 
|  | // This is a simple struct with tracking information that is stored | 
|  | // with a PendingTask (when message_loop is handling the task). | 
|  | // Only the information that is shared with the profiler in tracked_objects | 
|  | // are included in this structure. | 
|  |  | 
|  |  | 
|  | #ifndef BASE_TRACKING_INFO_H_ | 
|  | #define BASE_TRACKING_INFO_H_ | 
|  |  | 
|  | #include "base/base_export.h" | 
|  | #include "base/profiler/tracked_time.h" | 
|  | #include "base/time/time.h" | 
|  |  | 
|  | namespace tracked_objects { | 
|  | class Location; | 
|  | class Births; | 
|  | } | 
|  |  | 
|  | namespace base { | 
|  |  | 
|  | // This structure is copied around by value. | 
|  | struct BASE_EXPORT TrackingInfo { | 
|  | TrackingInfo(); | 
|  | TrackingInfo(const tracked_objects::Location& posted_from, | 
|  | base::TimeTicks delayed_run_time); | 
|  | ~TrackingInfo(); | 
|  |  | 
|  | // To avoid conflating our stats with the delay duration in a PostDelayedTask, | 
|  | // we identify such tasks, and replace their post_time with the time they | 
|  | // were scheduled (requested?) to emerge from the delayed task queue. This | 
|  | // means that queuing delay for such tasks will show how long they went | 
|  | // unserviced, after they *could* be serviced.  This is the same stat as we | 
|  | // have for non-delayed tasks, and we consistently call it queuing delay. | 
|  | tracked_objects::TrackedTime EffectiveTimePosted() const { | 
|  | return delayed_run_time.is_null() | 
|  | ? time_posted | 
|  | : tracked_objects::TrackedTime(delayed_run_time); | 
|  | } | 
|  |  | 
|  | // Record of location and thread that the task came from. | 
|  | tracked_objects::Births* birth_tally; | 
|  |  | 
|  | // Time when the related task was posted. Note that this value may be empty | 
|  | // if task profiling is disabled, and should only be used in conjunction with | 
|  | // profiling-related reporting. | 
|  | tracked_objects::TrackedTime time_posted; | 
|  |  | 
|  | // The time when the task should be run. | 
|  | base::TimeTicks delayed_run_time; | 
|  | }; | 
|  |  | 
|  | }  // namespace base | 
|  |  | 
|  | #endif  // BASE_TRACKING_INFO_H_ |