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