| ssid | 0738685 | 2015-04-14 15:32:37 | [diff] [blame] | 1 | // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #include "base/trace_event/malloc_dump_provider.h" |
| 6 | |
| 7 | #include <malloc.h> |
| 8 | |
| 9 | #include "base/trace_event/process_memory_dump.h" |
| 10 | |
| 11 | namespace base { |
| 12 | namespace trace_event { |
| 13 | |
| ssid | 0738685 | 2015-04-14 15:32:37 | [diff] [blame] | 14 | // static |
| primiano | fadec05e | 2015-06-03 16:57:32 | [diff] [blame^] | 15 | const char MallocDumpProvider::kAllocatedObjects[] = "malloc/allocated_objects"; |
| 16 | |
| 17 | // static |
| ssid | 0738685 | 2015-04-14 15:32:37 | [diff] [blame] | 18 | MallocDumpProvider* MallocDumpProvider::GetInstance() { |
| 19 | return Singleton<MallocDumpProvider, |
| 20 | LeakySingletonTraits<MallocDumpProvider>>::get(); |
| 21 | } |
| 22 | |
| 23 | MallocDumpProvider::MallocDumpProvider() { |
| 24 | } |
| 25 | |
| 26 | MallocDumpProvider::~MallocDumpProvider() { |
| 27 | } |
| 28 | |
| 29 | // Called at trace dump point time. Creates a snapshot the memory counters for |
| 30 | // the current process. |
| primiano | 2d56df1b | 2015-04-28 10:06:26 | [diff] [blame] | 31 | bool MallocDumpProvider::OnMemoryDump(ProcessMemoryDump* pmd) { |
| ssid | 0738685 | 2015-04-14 15:32:37 | [diff] [blame] | 32 | struct mallinfo info = mallinfo(); |
| ssid | 0738685 | 2015-04-14 15:32:37 | [diff] [blame] | 33 | DCHECK_GE(info.arena + info.hblkhd, info.uordblks); |
| 34 | |
| ssid | 0738685 | 2015-04-14 15:32:37 | [diff] [blame] | 35 | // When the system allocator is implemented by tcmalloc, the total physical |
| 36 | // size is given by |arena| and |hblkhd| is 0. In case of Android's jemalloc |
| 37 | // |arena| is 0 and the outer pages size is reported by |hblkhd|. In case of |
| 38 | // dlmalloc the total is given by |arena| + |hblkhd|. |
| 39 | // For more details see link: http://goo.gl/fMR8lF. |
| primiano | fadec05e | 2015-06-03 16:57:32 | [diff] [blame^] | 40 | MemoryAllocatorDump* outer_dump = pmd->CreateAllocatorDump("malloc"); |
| 41 | outer_dump->AddScalar(MemoryAllocatorDump::kNameSize, |
| 42 | MemoryAllocatorDump::kUnitsBytes, |
| 43 | info.arena + info.hblkhd); |
| ssid | 0738685 | 2015-04-14 15:32:37 | [diff] [blame] | 44 | |
| 45 | // Total allocated space is given by |uordblks|. |
| primiano | fadec05e | 2015-06-03 16:57:32 | [diff] [blame^] | 46 | MemoryAllocatorDump* inner_dump = pmd->CreateAllocatorDump(kAllocatedObjects); |
| 47 | inner_dump->AddScalar(MemoryAllocatorDump::kNameSize, |
| 48 | MemoryAllocatorDump::kUnitsBytes, info.uordblks); |
| ssid | 0738685 | 2015-04-14 15:32:37 | [diff] [blame] | 49 | |
| 50 | return true; |
| 51 | } |
| 52 | |
| ssid | 0738685 | 2015-04-14 15:32:37 | [diff] [blame] | 53 | } // namespace trace_event |
| 54 | } // namespace base |