// 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/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.
  base::TimeTicks EffectiveTimePosted() const {
    return delayed_run_time.is_null() ? time_posted : 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.
  base::TimeTicks time_posted;

  // The time when the task should be run.
  base::TimeTicks delayed_run_time;
};

}  // namespace base

#endif  // BASE_TRACKING_INFO_H_
