| 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 764712f38aae352bd6f7eb3f246fcc48a78c07ec..98d835181d014fa57a29e2b193fcd9457c17b026 100644
|
| --- a/base/trace_event/heap_profiler_allocation_context.h
|
| +++ b/base/trace_event/heap_profiler_allocation_context.h
|
| @@ -35,50 +35,32 @@
|
| //
|
| // See the design doc (https://goo.gl/4s7v7b) for more details.
|
|
|
| -// 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
|
| - };
|
| +using StackFrame = const char*;
|
|
|
| - 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;
|
| +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];
|
| };
|
|
|
| -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 {
|
| - Backtrace();
|
| -
|
| - // If the stack is higher than what can be stored here, the bottom frames
|
| - // (the ones closer to main()) 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.
|
| +struct AllocationMetrics {
|
| + size_t size;
|
| + size_t count;
|
| };
|
|
|
| bool BASE_EXPORT operator==(const Backtrace& lhs, const Backtrace& rhs);
|
|
|
| // The |AllocationContext| is context metadata that is kept for every allocation
|
| // when heap profiling is enabled. To simplify memory management for book-
|
| -// keeping, this struct has a fixed size.
|
| +// keeping, this struct has a fixed size. All |const char*|s here must have
|
| +// static lifetime.
|
| struct BASE_EXPORT AllocationContext {
|
| - AllocationContext();
|
| + public:
|
| + // An allocation context with empty backtrace and unknown type.
|
| + static AllocationContext Empty();
|
|
|
| Backtrace backtrace;
|
|
|
| @@ -87,26 +69,24 @@
|
| // deep string comparison. In a component build, where a type name can have a
|
| // string literal in several dynamic libraries, this may distort grouping.
|
| const char* type_name;
|
| +
|
| + private:
|
| + friend class AllocationContextTracker;
|
| +
|
| + // Don't allow uninitialized instances except inside the allocation context
|
| + // tracker. Except in tests, an |AllocationContext| should only be obtained
|
| + // from the tracker. In tests, paying the overhead of initializing the struct
|
| + // to |Empty| and then overwriting the members is not such a big deal.
|
| + AllocationContext();
|
| };
|
|
|
| bool BASE_EXPORT operator==(const AllocationContext& lhs,
|
| const AllocationContext& rhs);
|
|
|
| -// Struct to store the size and count of the allocations.
|
| -struct AllocationMetrics {
|
| - size_t size;
|
| - size_t count;
|
| -};
|
| -
|
| } // namespace trace_event
|
| } // namespace base
|
|
|
| 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> {
|
|
|