Index: content/common/host_shared_bitmap_manager.cc |
diff --git a/content/common/host_shared_bitmap_manager.cc b/content/common/host_shared_bitmap_manager.cc |
index b95820c2f32c44867d7b3abba5f2b05d70f1d00d..3e499d648d03fc0666186a4f8e9ecffbceb9093f 100644 |
--- a/content/common/host_shared_bitmap_manager.cc |
+++ b/content/common/host_shared_bitmap_manager.cc |
@@ -6,6 +6,10 @@ |
#include "base/lazy_instance.h" |
#include "base/memory/ref_counted.h" |
+#include "base/strings/stringprintf.h" |
+#include "base/thread_task_runner_handle.h" |
+#include "base/trace_event/memory_dump_manager.h" |
+#include "base/trace_event/process_memory_dump.h" |
#include "content/common/view_messages.h" |
#include "ui/gfx/geometry/size.h" |
@@ -50,6 +54,8 @@ class HostSharedBitmap : public cc::SharedBitmap { |
HostSharedBitmapManager* manager_; |
}; |
+const char kMemoryAllocatorName[] = "sharedbitmap"; |
+ |
} // namespace |
base::LazyInstance<HostSharedBitmapManager> g_shared_memory_manager = |
@@ -90,9 +96,15 @@ void HostSharedBitmapManagerClient::ChildDeletedSharedBitmap( |
owned_bitmaps_.erase(id); |
} |
-HostSharedBitmapManager::HostSharedBitmapManager() {} |
+HostSharedBitmapManager::HostSharedBitmapManager() { |
+ base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( |
+ this); |
Primiano Tucci (use gerrit)
2015/04/28 21:40:06
I think you want a task_runner (IIRC the HostSBM i
reveman
2015/04/29 01:45:58
This is a singleton. See HostSharedBitmapManager::
|
+} |
+ |
HostSharedBitmapManager::~HostSharedBitmapManager() { |
DCHECK(handle_map_.empty()); |
+ base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( |
+ this); |
Primiano Tucci (use gerrit)
2015/04/28 21:40:06
Hmm if you unregister you should specify a task_ru
reveman
2015/04/29 01:45:58
Makes sense. I moved RegisterDumpProvider() call t
|
} |
HostSharedBitmapManager* HostSharedBitmapManager::current() { |
@@ -146,6 +158,29 @@ scoped_ptr<cc::SharedBitmap> HostSharedBitmapManager::GetSharedBitmapFromId( |
static_cast<uint8*>(data->memory->memory()), data, id, nullptr)); |
} |
+bool HostSharedBitmapManager::OnMemoryDump( |
+ base::trace_event::ProcessMemoryDump* pmd) { |
+ base::AutoLock lock(lock_); |
+ |
+ for (const auto& bitmap_it : handle_map_) { |
+ std::string heap_name; |
+ |
+ for (size_t i = 0; i < sizeof(bitmap_it.first.name); ++i) |
+ base::StringAppendF(&heap_name, "%02x", bitmap_it.first.name[i]); |
+ |
+ base::trace_event::MemoryAllocatorDump* dump = pmd->CreateAllocatorDump( |
+ base::StringPrintf("%s/%s", kMemoryAllocatorName, heap_name.c_str())); |
+ if (!dump) |
+ return false; |
+ |
+ dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameOuterSize, |
+ base::trace_event::MemoryAllocatorDump::kUnitsBytes, |
+ bitmap_it.second->buffer_size); |
+ } |
+ |
+ return true; |
+} |
+ |
void HostSharedBitmapManager::ChildAllocatedSharedBitmap( |
size_t buffer_size, |
const base::SharedMemoryHandle& handle, |