Chromium Code Reviews| Index: extensions/browser/value_store/leveldb_value_store.cc |
| diff --git a/extensions/browser/value_store/leveldb_value_store.cc b/extensions/browser/value_store/leveldb_value_store.cc |
| index 39a1346df7d2c2ca41d92585254cf4401e397436..869d714e86321924790040d3075c740f1ec4be36 100644 |
| --- a/extensions/browser/value_store/leveldb_value_store.cc |
| +++ b/extensions/browser/value_store/leveldb_value_store.cc |
| @@ -8,9 +8,13 @@ |
| #include "base/json/json_reader.h" |
| #include "base/json/json_writer.h" |
| #include "base/logging.h" |
| +#include "base/strings/string_number_conversions.h" |
| #include "base/strings/string_util.h" |
| #include "base/strings/stringprintf.h" |
| #include "base/strings/sys_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 "content/public/browser/browser_thread.h" |
| #include "extensions/browser/value_store/value_store_util.h" |
| #include "third_party/leveldatabase/env_chromium.h" |
| @@ -59,10 +63,14 @@ LeveldbValueStore::LeveldbValueStore(const std::string& uma_client_name, |
| "Extensions.Database.Open." + uma_client_name, 1, |
| leveldb_env::LEVELDB_STATUS_MAX, leveldb_env::LEVELDB_STATUS_MAX + 1, |
| base::Histogram::kUmaTargetedHistogramFlag); |
| + base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( |
| + this, base::ThreadTaskRunnerHandle::Get()); |
| } |
| LeveldbValueStore::~LeveldbValueStore() { |
| DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
| + base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( |
| + this); |
| // Delete the database from disk if it's empty (but only if we managed to |
| // open it!). This is safe on destruction, assuming that we have exclusive |
| @@ -325,6 +333,31 @@ bool LeveldbValueStore::WriteToDbForTest(leveldb::WriteBatch* batch) { |
| return !WriteToDb(batch).get(); |
| } |
| +bool LeveldbValueStore::OnMemoryDump( |
| + const base::trace_event::MemoryDumpArgs& args, |
| + base::trace_event::ProcessMemoryDump* pmd) { |
| + DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
| + if (!db_) |
| + return true; |
|
cmumford
2015/10/15 18:35:44
Should you be returning false here?
ssid
2015/11/04 11:41:49
This has to return true for temporary failures and
|
| + |
| + std::string value; |
| + uint64 size; |
| + bool res = db_->GetProperty("leveldb.approximate-memory-usage", &value); |
| + DCHECK(res); |
|
cmumford
2015/10/15 18:35:44
What about returning false if GetProperty returns
ssid
2015/11/04 11:41:49
The DCHECK is placed so that if in future the api
|
| + base::StringToUint64(value, &size); |
|
cmumford
2015/10/15 18:35:44
I guess not super important to check this, but mig
ssid
2015/11/04 11:41:49
Done.
|
| + |
| + base::trace_event::MemoryAllocatorDump* dump = pmd->CreateAllocatorDump( |
|
cmumford
2015/10/15 18:35:44
You could make this "auto" if you want - but perfe
ssid
2015/11/04 11:41:49
Done.
|
| + "leveldb/value_store/" + open_histogram_->histogram_name()); |
| + 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; |
| +} |
| + |
| scoped_ptr<ValueStore::Error> LeveldbValueStore::EnsureDbIsOpen() { |
| DCHECK_CURRENTLY_ON(BrowserThread::FILE); |