1// Copyright 2014 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#ifndef BASE_DEBUG_TASK_ANNOTATOR_H_
6#define BASE_DEBUG_TASK_ANNOTATOR_H_
7
8#include <stdint.h>
9
10#include "base/base_export.h"
11#include "base/macros.h"
12
13namespace base {
14struct PendingTask;
15namespace debug {
16
17// Implements common debug annotations for posted tasks. This includes data
18// such as task origins, queueing durations and memory usage.
19class BASE_EXPORT TaskAnnotator {
20 public:
21  TaskAnnotator();
22  ~TaskAnnotator();
23
24  // Called to indicate that a task has been queued to run in the future.
25  // |queue_function| is used as the trace flow event name.
26  void DidQueueTask(const char* queue_function,
27                    const PendingTask& pending_task);
28
29  // Run a previously queued task. |queue_function| should match what was
30  // passed into |DidQueueTask| for this task.
31  void RunTask(const char* queue_function, PendingTask* pending_task);
32
33 private:
34  // Creates a process-wide unique ID to represent this task in trace events.
35  // This will be mangled with a Process ID hash to reduce the likelyhood of
36  // colliding with TaskAnnotator pointers on other processes.
37  uint64_t GetTaskTraceID(const PendingTask& task) const;
38
39  DISALLOW_COPY_AND_ASSIGN(TaskAnnotator);
40};
41
42}  // namespace debug
43}  // namespace base
44
45#endif  // BASE_DEBUG_TASK_ANNOTATOR_H_
46