summaryrefslogtreecommitdiffstats
path: root/base/trace_event/malloc_dump_provider.cc
diff options
context:
space:
mode:
authorssid <ssid@chromium.org>2015-04-14 08:32:37 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-14 15:32:56 +0000
commit07386850164a47409d7caf56cc5cd04a0ee58fce (patch)
tree0416d73e18da8ee6780379e1b2295a3301c2ecc7 /base/trace_event/malloc_dump_provider.cc
parent0811a259dca90930c4ebe97b30a1eb9a94a554b1 (diff)
downloadchromium_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.cc65
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