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.
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.
11 #ifndef BASE_TRACKING_INFO_H_
12 #define BASE_TRACKING_INFO_H_
14 #include "base/profiler/tracked_time.h"
15 #include "base/time/time.h"
17 namespace tracked_objects
{
24 // This structure is copied around by value.
25 struct BASE_EXPORT TrackingInfo
{
27 TrackingInfo(const tracked_objects::Location
& posted_from
,
28 base::TimeTicks delayed_run_time
);
31 // To avoid conflating our stats with the delay duration in a PostDelayedTask,
32 // we identify such tasks, and replace their post_time with the time they
33 // were scheduled (requested?) to emerge from the delayed task queue. This
34 // means that queuing delay for such tasks will show how long they went
35 // unserviced, after they *could* be serviced. This is the same stat as we
36 // have for non-delayed tasks, and we consistently call it queuing delay.
37 tracked_objects::TrackedTime
EffectiveTimePosted() const {
38 return tracked_objects::TrackedTime(
39 delayed_run_time
.is_null() ? time_posted
: delayed_run_time
);
42 // Record of location and thread that the task came from.
43 tracked_objects::Births
* birth_tally
;
45 // Time when the related task was posted.
46 base::TimeTicks time_posted
;
48 // The time when the task should be run.
49 base::TimeTicks delayed_run_time
;
54 #endif // BASE_TRACKING_INFO_H_