diff options
author | ssid <ssid@chromium.org> | 2015-04-14 08:32:37 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-04-14 15:32:56 +0000 |
commit | 07386850164a47409d7caf56cc5cd04a0ee58fce (patch) | |
tree | 0416d73e18da8ee6780379e1b2295a3301c2ecc7 /base/trace_event/malloc_dump_provider.cc | |
parent | 0811a259dca90930c4ebe97b30a1eb9a94a554b1 (diff) | |
download | chromium_src-07386850164a47409d7caf56cc5cd04a0ee58fce.zip chromium_src-07386850164a47409d7caf56cc5cd04a0ee58fce.tar.gz chromium_src-07386850164a47409d7caf56cc5cd04a0ee58fce.tar.bz2 |
Add a dump provider to dump malloc allocation data.
This CL adds malloc_dump_provider to dump information about
allocations by using malloc(). It dumps total memory allocated
from system and total memory used by the objects from mallinfo()
function.
For more details see design doc http://goo.gl/fMR8lF.
BUG=443593
Review URL: https://codereview.chromium.org/1003113006
Cr-Commit-Position: refs/heads/master@{#325053}
Diffstat (limited to 'base/trace_event/malloc_dump_provider.cc')
-rw-r--r-- | base/trace_event/malloc_dump_provider.cc | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/base/trace_event/malloc_dump_provider.cc b/base/trace_event/malloc_dump_provider.cc new file mode 100644 index 0000000..671ac65 --- /dev/null +++ b/base/trace_event/malloc_dump_provider.cc @@ -0,0 +1,65 @@ +// 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 "base/trace_event/malloc_dump_provider.h" + +#include <malloc.h> + +#include "base/trace_event/process_memory_dump.h" + +namespace base { +namespace trace_event { + +namespace { + +const char kDumperFriendlyName[] = "Malloc"; +const char kDumperName[] = "malloc"; + +} // namespace + +// static +MallocDumpProvider* MallocDumpProvider::GetInstance() { + return Singleton<MallocDumpProvider, + LeakySingletonTraits<MallocDumpProvider>>::get(); +} + +MallocDumpProvider::MallocDumpProvider() { +} + +MallocDumpProvider::~MallocDumpProvider() { +} + +// Called at trace dump point time. Creates a snapshot the memory counters for +// the current process. +bool MallocDumpProvider::DumpInto(ProcessMemoryDump* pmd) { + struct mallinfo info = mallinfo(); + DCHECK(info.uordblks > 0); + DCHECK_GE(info.arena + info.hblkhd, info.uordblks); + + MemoryAllocatorDump* dump = pmd->CreateAllocatorDump(kDumperName); + if (!dump) + return false; + + // When the system allocator is implemented by tcmalloc, the total physical + // size is given by |arena| and |hblkhd| is 0. In case of Android's jemalloc + // |arena| is 0 and the outer pages size is reported by |hblkhd|. In case of + // dlmalloc the total is given by |arena| + |hblkhd|. + // For more details see link: http://goo.gl/fMR8lF. + dump->set_physical_size_in_bytes(info.arena + info.hblkhd); + + // mallinfo doesn't support any allocated object count. + dump->set_allocated_objects_count(0); + + // Total allocated space is given by |uordblks|. + dump->set_allocated_objects_size_in_bytes(info.uordblks); + + return true; +} + +const char* MallocDumpProvider::GetFriendlyName() const { + return kDumperFriendlyName; +} + +} // namespace trace_event +} // namespace base |