• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_MEMORY_DUMP_PROVIDER_H_
6 #define BASE_TRACE_EVENT_MEMORY_DUMP_PROVIDER_H_
7 
8 #include "base/base_export.h"
9 #include "base/macros.h"
10 #include "base/process/process_handle.h"
11 #include "base/trace_event/memory_dump_request_args.h"
12 
13 namespace base {
14 namespace trace_event {
15 
16 class ProcessMemoryDump;
17 
18 // Args passed to OnMemoryDump(). This is to avoid rewriting all the subclasses
19 // in the codebase when extending the MemoryDumpProvider API.
20 struct MemoryDumpArgs {
21   MemoryDumpLevelOfDetail level_of_detail;
22 };
23 
24 // The contract interface that memory dump providers must implement.
25 class BASE_EXPORT MemoryDumpProvider {
26  public:
27   // Optional arguments for MemoryDumpManager::RegisterDumpProvider().
28   struct Options {
OptionsOptions29     Options() : target_pid(kNullProcessId) {}
OptionsOptions30     explicit Options(ProcessId target_pid) : target_pid(target_pid) {}
31 
32     // If the dump provider generates dumps on behalf of another process,
33     // |target_process| contains the pid of that process.
34     // The default value is kNullProcessId, which means that the dump provider
35     // generates dumps for the current process.
36     ProcessId target_pid;
37   };
38 
~MemoryDumpProvider()39   virtual ~MemoryDumpProvider() {}
40 
41   // Called by the MemoryDumpManager when generating memory dumps.
42   // The |args| specify if the embedder should generate light/heavy dumps on
43   // dump requests. The embedder should return true if the |pmd| was
44   // successfully populated, false if something went wrong and the dump should
45   // be considered invalid.
46   // (Note, the MemoryDumpManager has a fail-safe logic which will disable the
47   // MemoryDumpProvider for the entire trace session if it fails consistently).
48   virtual bool OnMemoryDump(const MemoryDumpArgs& args,
49                             ProcessMemoryDump* pmd) = 0;
50 
51   // Called by the MemoryDumpManager when an allocator should start or stop
52   // collecting extensive allocation data, if supported.
OnHeapProfilingEnabled(bool)53   virtual void OnHeapProfilingEnabled(bool /* enabled */) {}
54 
55  protected:
MemoryDumpProvider()56   MemoryDumpProvider() {}
57 
58   DISALLOW_COPY_AND_ASSIGN(MemoryDumpProvider);
59 };
60 
61 }  // namespace trace_event
62 }  // namespace base
63 
64 #endif  // BASE_TRACE_EVENT_MEMORY_DUMP_PROVIDER_H_
65