| 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> {
 | 
| 
 |