Index: base/debug/task_annotator.h |
diff --git a/base/debug/task_annotator.h b/base/debug/task_annotator.h |
index 443c71bf30169ded3042c90d07343710b4cdab42..777bc23c63009f7ddb56d577f9c64a157eda0a12 100644 |
--- a/base/debug/task_annotator.h |
+++ b/base/debug/task_annotator.h |
@@ -9,6 +9,7 @@ |
#include "base/base_export.h" |
#include "base/macros.h" |
+#include "base/trace_event/heap_profiler_allocation_context_tracker.h" |
namespace base { |
struct PendingTask; |
@@ -39,10 +40,35 @@ class BASE_EXPORT TaskAnnotator { |
DISALLOW_COPY_AND_ASSIGN(TaskAnnotator); |
}; |
+class ScopedTaskExecutionEvent { |
+ public: |
+ ScopedTaskExecutionEvent(const char* file_name, const char* function_name) |
+ : function_name_(function_name) { |
+ if (trace_event::AllocationContextTracker::capture_enabled()) { |
Sami
2016/03/17 17:06:26
Might want to add a throw an UNLIKELY() around thi
|
+ trace_event::AllocationContextTracker::SetCurrentTaskFileName(file_name); |
Sami
2016/03/17 17:06:26
Why isn't the file name also part of the pseudo st
|
+ trace_event::AllocationContextTracker::PushPseudoStackFrame( |
+ function_name_); |
+ } |
+ } |
+ |
+ ~ScopedTaskExecutionEvent() { |
+ if (trace_event::AllocationContextTracker::capture_enabled()) { |
+ trace_event::AllocationContextTracker::PopPseudoStackFrame( |
+ function_name_); |
+ trace_event::AllocationContextTracker::SetCurrentTaskFileName(nullptr); |
+ } |
+ } |
+ |
+ private: |
+ const char* function_name_; |
+}; |
+ |
#define TRACE_TASK_EXECUTION(run_function, task) \ |
TRACE_EVENT2("toplevel", (run_function), "src_file", \ |
(task).posted_from.file_name(), "src_func", \ |
- (task).posted_from.function_name()); |
+ (task).posted_from.function_name()); \ |
+ base::debug::ScopedTaskExecutionEvent scoped_task_event( \ |
+ (task).posted_from.file_name(), (task).posted_from.function_name()); |
} // namespace debug |
} // namespace base |