• 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_REQUEST_ARGS_H_
6 #define BASE_TRACE_EVENT_MEMORY_DUMP_REQUEST_ARGS_H_
7 
8 // This file defines the types and structs used to issue memory dump requests.
9 // These are also used in the IPCs for coordinating inter-process memory dumps.
10 
11 #include <stdint.h>
12 #include <string>
13 
14 #include "base/base_export.h"
15 #include "base/callback.h"
16 
17 namespace base {
18 namespace trace_event {
19 
20 // Captures the reason why a memory dump is being requested. This is to allow
21 // selective enabling of dumps, filtering and post-processing.
22 enum class MemoryDumpType {
23   TASK_BEGIN,         // Dumping memory at the beginning of a message-loop task.
24   TASK_END,           // Dumping memory at the ending of a message-loop task.
25   PERIODIC_INTERVAL,  // Dumping memory at periodic intervals.
26   EXPLICITLY_TRIGGERED,  // Non maskable dump request.
27   LAST = EXPLICITLY_TRIGGERED // For IPC macros.
28 };
29 
30 // Tells the MemoryDumpProvider(s) how much detailed their dumps should be.
31 enum class MemoryDumpLevelOfDetail : uint32_t {
32   FIRST,
33 
34   // For background tracing mode. The dump time is quick, and typically just the
35   // totals are expected. Suballocations need not be specified. Dump name must
36   // contain only pre-defined strings and string arguments cannot be added.
37   BACKGROUND = FIRST,
38 
39   // For the levels below, MemoryDumpProvider instances must guarantee that the
40   // total size reported in the root node is consistent. Only the granularity of
41   // the child MemoryAllocatorDump(s) differs with the levels.
42 
43   // Few entries, typically a fixed number, per dump.
44   LIGHT,
45 
46   // Unrestricted amount of entries per dump.
47   DETAILED,
48 
49   LAST = DETAILED
50 };
51 
52 // Initial request arguments for a global memory dump. (see
53 // MemoryDumpManager::RequestGlobalMemoryDump()).
54 struct BASE_EXPORT MemoryDumpRequestArgs {
55   // Globally unique identifier. In multi-process dumps, all processes issue a
56   // local dump with the same guid. This allows the trace importers to
57   // reconstruct the global dump.
58   uint64_t dump_guid;
59 
60   MemoryDumpType dump_type;
61   MemoryDumpLevelOfDetail level_of_detail;
62 };
63 
64 // Args for ProcessMemoryDump and passed to OnMemoryDump calls for memory dump
65 // providers. Dump providers are expected to read the args for creating dumps.
66 struct MemoryDumpArgs {
67   // Specifies how detailed the dumps should be.
68   MemoryDumpLevelOfDetail level_of_detail;
69 };
70 
71 using MemoryDumpCallback = Callback<void(uint64_t dump_guid, bool success)>;
72 
73 BASE_EXPORT const char* MemoryDumpTypeToString(const MemoryDumpType& dump_type);
74 
75 BASE_EXPORT const char* MemoryDumpLevelOfDetailToString(
76     const MemoryDumpLevelOfDetail& level_of_detail);
77 
78 BASE_EXPORT MemoryDumpLevelOfDetail
79 StringToMemoryDumpLevelOfDetail(const std::string& str);
80 
81 }  // namespace trace_event
82 }  // namespace base
83 
84 #endif  // BASE_TRACE_EVENT_MEMORY_DUMP_REQUEST_ARGS_H_
85