Index: base/trace_event/process_memory_dump.h |
diff --git a/base/trace_event/process_memory_dump.h b/base/trace_event/process_memory_dump.h |
index df6cc827ff4cb051ba2a1aed5dc925154198323f..bd9c5434ddabfc624b0a804c1c5744104a180f5d 100644 |
--- a/base/trace_event/process_memory_dump.h |
+++ b/base/trace_event/process_memory_dump.h |
@@ -8,8 +8,10 @@ |
#include "base/base_export.h" |
#include "base/containers/hash_tables.h" |
#include "base/containers/small_map.h" |
+#include "base/memory/ref_counted.h" |
#include "base/memory/scoped_vector.h" |
#include "base/trace_event/memory_allocator_dump.h" |
+#include "base/trace_event/memory_dump_session_state.h" |
#include "base/trace_event/process_memory_maps.h" |
#include "base/trace_event/process_memory_totals.h" |
@@ -18,19 +20,22 @@ namespace trace_event { |
class ConvertableToTraceFormat; |
class MemoryDumpManager; |
+class MemoryDumpSessionState; |
// ProcessMemoryDump is as a strongly typed container which enforces the data |
-// model for each memory dump point and holds the dumps produced by the |
+// model for each memory dump and holds the dumps produced by the |
// MemoryDumpProvider(s) for a specific process. |
// At trace generation time (i.e. when AsValue() is called), ProcessMemoryDump |
// will compose a key-value dictionary of the various dumps obtained at trace |
// dump point time. |
class BASE_EXPORT ProcessMemoryDump { |
public: |
+ // Maps allocator dumps absolute names (allocator_name/heap/subheap) to |
+ // MemoryAllocatorDump instances. |
using AllocatorDumpsMap = |
SmallMap<hash_map<std::string, MemoryAllocatorDump*>>; |
- ProcessMemoryDump(); |
+ ProcessMemoryDump(const scoped_refptr<MemoryDumpSessionState>& session_state); |
~ProcessMemoryDump(); |
// Called at trace generation time to populate the TracedValue. |
@@ -45,20 +50,34 @@ class BASE_EXPORT ProcessMemoryDump { |
void set_has_process_mmaps() { has_process_mmaps_ = true; } |
// Creates a new MemoryAllocatorDump with the given name and returns the |
- // empty object back to the caller. The |name| must be unique in the dump. |
- // ProcessMemoryDump handles the memory ownership of the created object. |
- // |parent| can be used to specify a hierarchical relationship of the |
- // allocator dumps. |
- MemoryAllocatorDump* CreateAllocatorDump(const std::string& name); |
- MemoryAllocatorDump* CreateAllocatorDump(const std::string& name, |
- MemoryAllocatorDump* parent); |
- |
- // Returns a MemoryAllocatorDump given its name or nullptr if not found. |
- MemoryAllocatorDump* GetAllocatorDump(const std::string& name) const; |
+ // empty object back to the caller. |
+ // Arguments: |
+ // allocator_name: a name that univocally identifies allocator dumps |
+ // produced by this provider. It acts as a type w.r.t. the allocator |
+ // attributes, in the sense that all the MAD with the same allocator_name |
+ // are expected to have the same attributes. |
+ // heap_name, either: |
+ // - kRootHeap: if the allocator has only one default heap. |
+ // - a string identifing a heap name (e.g., isolate1, isolate2 ...). It is |
+ // possible to specify nesting by using a path-like string (e.g., |
+ // isolate1/heap_spaceX, isolate1/heap_spaceY, isolate2/heap_spaceX). |
+ // The tuple (|allocator_name|, |heap_name|) is unique inside a PMD. |
+ // ProcessMemoryDump handles the memory ownership of its MemoryAllocatorDumps. |
+ MemoryAllocatorDump* CreateAllocatorDump(const std::string& allocator_name, |
+ const std::string& heap_name); |
+ |
+ // Looks up a MemoryAllocatorDump given its allocator and heap names, or |
+ // nullptr if not found. |
+ MemoryAllocatorDump* GetAllocatorDump(const std::string& allocator_name, |
+ const std::string& heap_name) const; |
// Returns the map of the MemoryAllocatorDumps added to this dump. |
const AllocatorDumpsMap& allocator_dumps() const { return allocator_dumps_; } |
+ const scoped_refptr<MemoryDumpSessionState>& session_state() const { |
+ return session_state_; |
+ } |
+ |
private: |
ProcessMemoryTotals process_totals_; |
bool has_process_totals_; |
@@ -66,13 +85,14 @@ class BASE_EXPORT ProcessMemoryDump { |
ProcessMemoryMaps process_mmaps_; |
bool has_process_mmaps_; |
- // A maps of "allocator_name" -> MemoryAllocatorDump populated by |
- // allocator dump providers. |
AllocatorDumpsMap allocator_dumps_; |
// ProcessMemoryDump handles the memory ownership of all its belongings. |
ScopedVector<MemoryAllocatorDump> allocator_dumps_storage_; |
+ // State shared among all PMDs instances created in a given trace session. |
+ scoped_refptr<MemoryDumpSessionState> session_state_; |
+ |
DISALLOW_COPY_AND_ASSIGN(ProcessMemoryDump); |
}; |