Chromium Code Reviews| Index: base/trace_event/heap_profiler_allocation_context_tracker.cc |
| diff --git a/base/trace_event/heap_profiler_allocation_context_tracker.cc b/base/trace_event/heap_profiler_allocation_context_tracker.cc |
| index 0aa54a84ed380f8ee7e8f669bd78532041943e14..518792c4a5034b448eb364d13c3b223da147a4dd 100644 |
| --- a/base/trace_event/heap_profiler_allocation_context_tracker.cc |
| +++ b/base/trace_event/heap_profiler_allocation_context_tracker.cc |
| @@ -19,6 +19,7 @@ subtle::Atomic32 AllocationContextTracker::capture_enabled_ = 0; |
| namespace { |
| const size_t kMaxStackDepth = 128u; |
| +const size_t kMaxTaskDepth = 16u; |
| AllocationContextTracker* const kInitializingSentinel = |
| reinterpret_cast<AllocationContextTracker*>(-1); |
| @@ -51,6 +52,7 @@ AllocationContextTracker::GetInstanceForCurrentThread() { |
| AllocationContextTracker::AllocationContextTracker() : thread_name_(nullptr) { |
| pseudo_stack_.reserve(kMaxStackDepth); |
| + task_contexts_.reserve(kMaxTaskDepth); |
| } |
| AllocationContextTracker::~AllocationContextTracker() {} |
| @@ -99,6 +101,20 @@ void AllocationContextTracker::PopPseudoStackFrame(StackFrame frame) { |
| pseudo_stack_.pop_back(); |
| } |
| +void AllocationContextTracker::PushCurrentTaskContext(const char* context) { |
| + DCHECK(context); |
| + if (task_contexts_.size() < kMaxTaskDepth) |
|
oystein (OOO til 10th of July)
2016/03/29 21:28:35
Shouldn't this be a DCHECK(task_contexts.size() <
ssid
2016/03/29 23:04:19
if the code was:
DCHECK(task_contexts.size() < kMa
oystein (OOO til 10th of July)
2016/03/29 23:44:51
Makes sense; thanks!
|
| + task_contexts_.push_back(context); |
| + else |
| + NOTREACHED(); |
| +} |
| + |
| +void AllocationContextTracker::PopCurrentTaskContext(const char* context) { |
| + DCHECK_EQ(context, task_contexts_.back()) |
| + << "Encountered an unmatched context end"; |
| + task_contexts_.pop_back(); |
| +} |
| + |
| // static |
| AllocationContext AllocationContextTracker::GetContextSnapshot() { |
| AllocationContext ctx; |
| @@ -125,7 +141,9 @@ AllocationContext AllocationContextTracker::GetContextSnapshot() { |
| std::fill(dst, dst_end, nullptr); |
| } |
| - ctx.type_name = nullptr; |
| + // TODO(ssid): Fix crbug.com/594803 to add file name as 3rd dimension |
| + // (component name) in the heap profiler and not piggy back on the type name. |
| + ctx.type_name = task_contexts_.empty() ? nullptr : task_contexts_.back(); |
| return ctx; |
| } |