Home | History | Annotate | Download | only in trace_event
      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 {
     29     Options() : target_pid(kNullProcessId) {}
     30     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 
     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.
     53   virtual void OnHeapProfilingEnabled(bool /* enabled */) {}
     54 
     55  protected:
     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