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
18namespace tracked_objects {
19class Location;
20class Births;
21}
22
23namespace base {
24
25// This structure is copied around by value.
26struct 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 tracked_objects::TrackedTime(
40        delayed_run_time.is_null() ? time_posted : delayed_run_time);
41  }
42
43  // Record of location and thread that the task came from.
44  tracked_objects::Births* birth_tally;
45
46  // Time when the related task was posted.
47  base::TimeTicks time_posted;
48
49  // The time when the task should be run.
50  base::TimeTicks delayed_run_time;
51};
52
53}  // namespace base
54
55#endif  // BASE_TRACKING_INFO_H_
56