| 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)
|
| + 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;
|
| }
|
|
|