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 <stdint.h>
      9 
     10 #include "base/base_export.h"
     11 #include "base/macros.h"
     12 
     13 namespace base {
     14 struct PendingTask;
     15 namespace debug {
     16 
     17 // Implements common debug annotations for posted tasks. This includes data
     18 // such as task origins, queueing durations and memory usage.
     19 class 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