Index: content/browser/dom_storage/session_storage_database.cc |
diff --git a/content/browser/dom_storage/session_storage_database.cc b/content/browser/dom_storage/session_storage_database.cc |
index d0ab442238b5817b48761a8267e5858002ba420d..ff0eb265a2665fe509bf9025fcb67692d6657465 100644 |
--- a/content/browser/dom_storage/session_storage_database.cc |
+++ b/content/browser/dom_storage/session_storage_database.cc |
@@ -12,6 +12,9 @@ |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/stringprintf.h" |
#include "base/strings/utf_string_conversions.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 "third_party/leveldatabase/env_chromium.h" |
#include "third_party/leveldatabase/src/include/leveldb/db.h" |
#include "third_party/leveldatabase/src/include/leveldb/iterator.h" |
@@ -95,9 +98,13 @@ SessionStorageDatabase::SessionStorageDatabase(const base::FilePath& file_path) |
is_inconsistent_(false), |
invalid_db_deleted_(false), |
operation_count_(0) { |
+ base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( |
+ this, base::ThreadTaskRunnerHandle::Get()); |
} |
SessionStorageDatabase::~SessionStorageDatabase() { |
+ base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( |
+ this); |
} |
void SessionStorageDatabase::ReadAreaValues(const std::string& namespace_id, |
@@ -323,6 +330,33 @@ bool SessionStorageDatabase::ReadNamespacesAndOrigins( |
return true; |
} |
+bool SessionStorageDatabase::OnMemoryDump( |
+ const base::trace_event::MemoryDumpArgs& args, |
+ base::trace_event::ProcessMemoryDump* pmd) { |
+ base::AutoLock auto_lock(db_lock_); |
+ if (!db_) |
+ return true; |
+ |
+ base::trace_event::MemoryAllocatorDump* dump = |
+ pmd->CreateAllocatorDump("leveldb/session_storage_db"); |
+ |
Primiano Tucci (use gerrit)
2015/10/15 15:27:56
why are you locking db_lock_ twice? doesn't this d
ssid
2015/10/15 15:36:27
yes removed.
|
+ base::AutoLock auto_lock(db_lock_); |
+ std::string value; |
+ uint64 size; |
+ bool res = db_->GetProperty("leveldb.approximate-memory-usage", &value); |
+ DCHECK(res); |
+ base::StringToUint64(value, &size); |
+ |
+ dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize, |
+ base::trace_event::MemoryAllocatorDump::kUnitsBytes, size); |
+ |
+ // Memory is allocated from system allocator (malloc). |
+ pmd->AddSuballocation(dump->guid(), |
+ base::trace_event::MemoryDumpManager::GetInstance() |
+ ->system_allocator_pool_name()); |
+ return true; |
+} |
+ |
bool SessionStorageDatabase::LazyOpen(bool create_if_needed) { |
base::AutoLock auto_lock(db_lock_); |
if (db_error_ || is_inconsistent_) { |