summaryrefslogtreecommitdiffstats
path: root/base/trace_event
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
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')
-rw-r--r--base/trace_event/BUILD.gn7
-rw-r--r--base/trace_event/malloc_dump_provider.cc65
-rw-r--r--base/trace_event/malloc_dump_provider.h37
-rw-r--r--base/trace_event/trace_event.gypi8
4 files changed, 117 insertions, 0 deletions
diff --git a/base/trace_event/BUILD.gn b/base/trace_event/BUILD.gn
index c0c6a05..d32bd28 100644
--- a/base/trace_event/BUILD.gn
+++ b/base/trace_event/BUILD.gn
@@ -46,6 +46,13 @@ source_set("trace_event") {
]
}
+ if (is_linux || is_android) {
+ sources += [
+ "malloc_dump_provider.cc",
+ "malloc_dump_provider.h",
+ ]
+ }
+
configs += [ "//base:base_implementation" ]
deps = [
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
diff --git a/base/trace_event/malloc_dump_provider.h b/base/trace_event/malloc_dump_provider.h
new file mode 100644
index 0000000..b6f69736
--- /dev/null
+++ b/base/trace_event/malloc_dump_provider.h
@@ -0,0 +1,37 @@
+// 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.
+
+#ifndef BASE_TRACE_EVENT_MALLOC_DUMP_PROVIDER_H_
+#define BASE_TRACE_EVENT_MALLOC_DUMP_PROVIDER_H_
+
+#include <istream>
+
+#include "base/memory/singleton.h"
+#include "base/trace_event/memory_dump_provider.h"
+
+namespace base {
+namespace trace_event {
+
+// Dump provider which collects process-wide memory stats.
+class BASE_EXPORT MallocDumpProvider : public MemoryDumpProvider {
+ public:
+ static MallocDumpProvider* GetInstance();
+
+ // MemoryDumpProvider implementation.
+ bool DumpInto(ProcessMemoryDump* pmd) override;
+ const char* GetFriendlyName() const override;
+
+ private:
+ friend struct DefaultSingletonTraits<MallocDumpProvider>;
+
+ MallocDumpProvider();
+ ~MallocDumpProvider() override;
+
+ DISALLOW_COPY_AND_ASSIGN(MallocDumpProvider);
+};
+
+} // namespace trace_event
+} // namespace base
+
+#endif // BASE_TRACE_EVENT_MALLOC_DUMP_PROVIDER_H_
diff --git a/base/trace_event/trace_event.gypi b/base/trace_event/trace_event.gypi
index 36e3ab3..9be9149 100644
--- a/base/trace_event/trace_event.gypi
+++ b/base/trace_event/trace_event.gypi
@@ -38,6 +38,14 @@
'trace_event/trace_event_win.cc',
'trace_event/trace_event_win.h',
],
+ 'conditions': [
+ ['OS == "linux" or OS == "android"', {
+ 'trace_event_sources': [
+ 'trace_event/malloc_dump_provider.cc',
+ 'trace_event/malloc_dump_provider.h',
+ ],
+ }],
+ ],
'trace_event_test_sources' : [
'trace_event/memory_allocator_dump_unittest.cc',
'trace_event/memory_dump_manager_unittest.cc',