| // Copyright 2015 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "sql/sql_memory_dump_provider.h" | 
 |  | 
 | #include "base/trace_event/memory_dump_manager.h" | 
 | #include "base/trace_event/process_memory_dump.h" | 
 | #include "third_party/sqlite/sqlite3.h" | 
 |  | 
 | namespace sql { | 
 |  | 
 | // static | 
 | SqlMemoryDumpProvider* SqlMemoryDumpProvider::GetInstance() { | 
 |   return base::Singleton< | 
 |       SqlMemoryDumpProvider, | 
 |       base::LeakySingletonTraits<SqlMemoryDumpProvider>>::get(); | 
 | } | 
 |  | 
 | SqlMemoryDumpProvider::SqlMemoryDumpProvider() = default; | 
 |  | 
 | SqlMemoryDumpProvider::~SqlMemoryDumpProvider() = default; | 
 |  | 
 | bool SqlMemoryDumpProvider::OnMemoryDump( | 
 |     const base::trace_event::MemoryDumpArgs& args, | 
 |     base::trace_event::ProcessMemoryDump* pmd) { | 
 |   sqlite3_int64 memory_used = 0; | 
 |   sqlite3_int64 memory_high_water = 0; | 
 |   int status = sqlite3_status64(SQLITE_STATUS_MEMORY_USED, &memory_used, | 
 |                                 &memory_high_water, /* resetFlag= */ 1); | 
 |   if (status != SQLITE_OK) | 
 |     return false; | 
 |  | 
 |   base::trace_event::MemoryAllocatorDump* dump = | 
 |       pmd->CreateAllocatorDump("sqlite"); | 
 |   dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize, | 
 |                   base::trace_event::MemoryAllocatorDump::kUnitsBytes, | 
 |                   memory_used); | 
 |   dump->AddScalar("malloc_high_wmark_size", | 
 |                   base::trace_event::MemoryAllocatorDump::kUnitsBytes, | 
 |                   memory_high_water); | 
 |  | 
 |   sqlite3_int64 dummy_high_water = -1; | 
 |   sqlite3_int64 malloc_count = -1; | 
 |   status = sqlite3_status64(SQLITE_STATUS_MALLOC_COUNT, &malloc_count, | 
 |                             &dummy_high_water, /* resetFlag= */ 0); | 
 |   if (status == SQLITE_OK) { | 
 |     dump->AddScalar("malloc_count", | 
 |                     base::trace_event::MemoryAllocatorDump::kUnitsObjects, | 
 |                     malloc_count); | 
 |   } | 
 |  | 
 |   const char* system_allocator_name = | 
 |       base::trace_event::MemoryDumpManager::GetInstance() | 
 |           ->system_allocator_pool_name(); | 
 |   if (system_allocator_name) { | 
 |     pmd->AddSuballocation(dump->guid(), system_allocator_name); | 
 |   } | 
 |   return true; | 
 | } | 
 |  | 
 | }  // namespace sql |