Index: content/child/child_discardable_shared_memory_manager.cc |
diff --git a/content/child/child_discardable_shared_memory_manager.cc b/content/child/child_discardable_shared_memory_manager.cc |
index 961733170d578d2a5e23057504a4f822be513589..c7fe3a21d333fec3924af0a41557d65e2a43491a 100644 |
--- a/content/child/child_discardable_shared_memory_manager.cc |
+++ b/content/child/child_discardable_shared_memory_manager.cc |
@@ -13,6 +13,8 @@ |
#include "base/process/memory.h" |
#include "base/process/process_metrics.h" |
#include "base/strings/string_number_conversions.h" |
+#include "base/thread_task_runner_handle.h" |
+#include "base/trace_event/memory_dump_manager.h" |
#include "base/trace_event/trace_event.h" |
#include "content/common/child_process_messages.h" |
@@ -27,6 +29,8 @@ const size_t kAllocationSize = 32 * 1024 * 1024; |
const size_t kAllocationSize = 4 * 1024 * 1024; |
#endif |
+const char kMemoryDumperFriendlyName[] = "Discardable"; |
+ |
// Global atomic to generate unique discardable shared memory IDs. |
base::StaticAtomicSequenceNumber g_next_discardable_shared_memory_id; |
@@ -82,10 +86,16 @@ void SendDeletedDiscardableSharedMemoryMessage( |
ChildDiscardableSharedMemoryManager::ChildDiscardableSharedMemoryManager( |
ThreadSafeSender* sender) |
- : heap_(base::GetPageSize()), sender_(sender) { |
+ : MemoryDumpProvider(base::ThreadTaskRunnerHandle::Get()), |
+ heap_(base::GetPageSize()), |
+ sender_(sender) { |
+ base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( |
+ this); |
} |
ChildDiscardableSharedMemoryManager::~ChildDiscardableSharedMemoryManager() { |
+ base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( |
+ this); |
// TODO(reveman): Determine if this DCHECK can be enabled. crbug.com/430533 |
// DCHECK_EQ(heap_.GetSize(), heap_.GetSizeOfFreeLists()); |
if (heap_.GetSize()) |
@@ -170,7 +180,7 @@ ChildDiscardableSharedMemoryManager::AllocateLockedDiscardableMemory( |
// Create span for allocated memory. |
scoped_ptr<DiscardableSharedMemoryHeap::Span> new_span(heap_.Grow( |
- shared_memory.Pass(), allocation_size_in_bytes, |
+ shared_memory.Pass(), allocation_size_in_bytes, new_id, |
base::Bind(&SendDeletedDiscardableSharedMemoryMessage, sender_, new_id))); |
// Unlock and insert any left over memory into free lists. |
@@ -189,6 +199,16 @@ ChildDiscardableSharedMemoryManager::AllocateLockedDiscardableMemory( |
return make_scoped_ptr(new DiscardableMemoryImpl(this, new_span.Pass())); |
} |
+bool ChildDiscardableSharedMemoryManager::DumpInto( |
+ base::trace_event::ProcessMemoryDump* pmd) { |
+ heap_.DumpInto(pmd); |
+ return true; |
+} |
+ |
+const char* ChildDiscardableSharedMemoryManager::GetFriendlyName() const { |
+ return kMemoryDumperFriendlyName; |
+} |
+ |
void ChildDiscardableSharedMemoryManager::ReleaseFreeMemory() { |
base::AutoLock lock(lock_); |