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 8544c78eb2cd34c3f7693fa4063ccdcf85f837a1..ef89ea6e459134414562969df069205f155cd52d 100644 |
| --- a/base/trace_event/heap_profiler_allocation_context.h |
| +++ b/base/trace_event/heap_profiler_allocation_context.h |
| @@ -35,10 +35,40 @@ namespace trace_event { |
| // |
| // See the design doc (https://goo.gl/4s7v7b) for more details. |
| -using StackFrame = const char*; |
| +// TODO: description |
|
Primiano Tucci (use gerrit)
2016/04/07 15:51:56
:)
|
| +struct BASE_EXPORT StackFrame { |
| + enum Type { |
|
Primiano Tucci (use gerrit)
2016/04/07 15:51:56
enum class (thanks c++11), so we can get the right
|
| + TYPE_SYMBOL, // const char* string |
|
Primiano Tucci (use gerrit)
2016/04/07 15:51:56
Is this for the pseudo stack?
In this case I think
|
| + TYPE_THREAD_NAME, // const char* thread name |
| + TYPE_PC, // as returned by stack tracing (e.g. by StackTrace) |
|
Primiano Tucci (use gerrit)
2016/04/07 15:51:56
Let's call it explicitly PROGRAM_COUNTER (or NATIV
|
| + }; |
| + |
| + bool empty() const { return value == nullptr; } |
| + |
| + static StackFrame Empty() { |
| + return {TYPE_SYMBOL, nullptr}; |
| + } |
| + |
| + static StackFrame FromSymbol(const void* symbol) { |
| + return {TYPE_SYMBOL, symbol}; |
| + } |
| + static StackFrame FromPC(const void* pc) { |
| + return {TYPE_PC, pc}; |
| + } |
| + static StackFrame FromThreadName(const char* name) { |
| + return {TYPE_THREAD_NAME, name}; |
| + } |
| + |
| + Type type; |
| + const void* value; |
| +}; |
| + |
| +bool BASE_EXPORT operator < (const StackFrame& lhs, const StackFrame& rhs); |
|
Primiano Tucci (use gerrit)
2016/04/07 15:51:56
what do we need these operators for?
Dmitry Skiba
2016/04/12 18:22:10
For inserting StackFrame in a map, deduplicator do
|
| +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 |
| + // Unused backtrace frames are filled with empty 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. |
| @@ -83,6 +113,11 @@ bool BASE_EXPORT operator==(const AllocationContext& lhs, |
| namespace BASE_HASH_NAMESPACE { |
| template <> |
| +struct BASE_EXPORT hash<base::trace_event::StackFrame>: hash<const void*> { |
|
Primiano Tucci (use gerrit)
2016/04/07 15:51:56
where do we hash StackFrame objects? Don't we keep
Dmitry Skiba
2016/04/12 18:22:10
Just in case someone decides to put it into a hash
|
| + 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; |
| }; |