Chromium Code Reviews| Index: base/trace_event/heap_profiler_allocation_context.h |
| diff --git a/base/trace_event/heap_profiler_allocation_context.h b/base/trace_event/heap_profiler_allocation_context.h |
| index 98d835181d014fa57a29e2b193fcd9457c17b026..70ec7596661c8b2100e6d8083dbaddab36c0a4a7 100644 |
| --- a/base/trace_event/heap_profiler_allocation_context.h |
| +++ b/base/trace_event/heap_profiler_allocation_context.h |
| @@ -35,14 +35,39 @@ namespace trace_event { |
| // |
| // See the design doc (https://goo.gl/4s7v7b) for more details. |
| -using StackFrame = const char*; |
| +// Represents (pseudo) stack frame. Used in Backtrace class below. |
| +// |
| +// Conceptually stack frame is identified by its value, and type is used |
| +// mostly to properly format the value. Value is expected to be a valid |
| +// pointer from process' address space. |
| +struct BASE_EXPORT StackFrame { |
| + enum class Type { |
| + TRACE_EVENT_NAME, // const char* string |
| + THREAD_NAME, // const char* thread name |
| + }; |
| + |
| + static StackFrame FromTraceEventName(const char* name) { |
| + return {Type::TRACE_EVENT_NAME, name}; |
| + } |
| + static StackFrame FromThreadName(const char* name) { |
| + return {Type::THREAD_NAME, name}; |
| + } |
| + |
| + Type type; |
| + const void* value; |
|
Primiano Tucci (use gerrit)
2016/04/19 19:45:06
since both of these are const char* should this al
Dmitry Skiba
2016/04/19 22:14:14
Yeah, but my next CL adds PROGRAM_COUNTER which is
Primiano Tucci (use gerrit)
2016/04/20 13:17:59
yeah I realized this too late. ignore my comment.
|
| +}; |
| + |
| +bool BASE_EXPORT operator < (const StackFrame& lhs, const StackFrame& rhs); |
| +bool BASE_EXPORT operator == (const StackFrame& lhs, const StackFrame& rhs); |
| +bool BASE_EXPORT operator != (const StackFrame& lhs, const StackFrame& rhs); |
| struct BASE_EXPORT Backtrace { |
| - // Unused backtrace frames are filled with nullptr frames. If the stack is |
| - // higher than what can be stored here, the bottom frames are stored. Based |
| - // on the data above, a depth of 12 captures the full stack in the vast |
| - // majority of the cases. |
| - StackFrame frames[12]; |
| + // If the stack is higher than what can be stored here, the bottom frames |
|
Primiano Tucci (use gerrit)
2016/04/19 19:45:06
small req, not really related with your change: ca
Dmitry Skiba
2016/04/19 22:14:14
Actually, that is not true when it comes to native
Primiano Tucci (use gerrit)
2016/04/20 13:17:59
should we keep it consistent and just bump the dep
|
| + // are stored. Based on the data above, a depth of 12 captures the full |
| + // stack in the vast majority of the cases. |
| + enum { kMaxFrameCount = 12 }; |
| + StackFrame frames[kMaxFrameCount]; |
| + size_t frame_count; |
| }; |
| // Struct to store the size and count of the allocations. |
| @@ -89,6 +114,11 @@ bool BASE_EXPORT operator==(const AllocationContext& lhs, |
| namespace BASE_HASH_NAMESPACE { |
| template <> |
| +struct BASE_EXPORT hash<base::trace_event::StackFrame> { |
| + size_t operator()(const base::trace_event::StackFrame& frame) const; |
| +}; |
| + |
| +template <> |
| struct BASE_EXPORT hash<base::trace_event::Backtrace> { |
| size_t operator()(const base::trace_event::Backtrace& backtrace) const; |
| }; |