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#ifndef BASE_TRACE_EVENT_MALLOC_DUMP_PROVIDER_H_
6#define BASE_TRACE_EVENT_MALLOC_DUMP_PROVIDER_H_
7
8#include <istream>
9
10#include "base/macros.h"
11#include "base/memory/singleton.h"
12#include "base/trace_event/memory_dump_provider.h"
13#include "build/build_config.h"
14
15#if defined(OS_LINUX) || defined(OS_ANDROID) || \
16    (defined(OS_MACOSX) && !defined(OS_IOS))
17#define MALLOC_MEMORY_TRACING_SUPPORTED
18#endif
19
20namespace base {
21namespace trace_event {
22
23// Dump provider which collects process-wide memory stats.
24class BASE_EXPORT MallocDumpProvider : public MemoryDumpProvider {
25 public:
26  // Name of the allocated_objects dump. Use this to declare suballocator dumps
27  // from other dump providers.
28  static const char kAllocatedObjects[];
29
30  static MallocDumpProvider* GetInstance();
31
32  // MemoryDumpProvider implementation.
33  bool OnMemoryDump(const MemoryDumpArgs& args,
34                    ProcessMemoryDump* pmd) override;
35
36 private:
37  friend struct DefaultSingletonTraits<MallocDumpProvider>;
38
39  MallocDumpProvider();
40  ~MallocDumpProvider() override;
41
42  DISALLOW_COPY_AND_ASSIGN(MallocDumpProvider);
43};
44
45}  // namespace trace_event
46}  // namespace base
47
48#endif  // BASE_TRACE_EVENT_MALLOC_DUMP_PROVIDER_H_
49