| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_ | 5 #ifndef BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_ |
| 6 #define BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_ | 6 #define BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_ |
| 7 | 7 |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <map> | 10 #include <map> |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 namespace base { | 35 namespace base { |
| 36 | 36 |
| 37 class SequencedTaskRunner; | 37 class SequencedTaskRunner; |
| 38 class SingleThreadTaskRunner; | 38 class SingleThreadTaskRunner; |
| 39 class Thread; | 39 class Thread; |
| 40 | 40 |
| 41 namespace trace_event { | 41 namespace trace_event { |
| 42 | 42 |
| 43 class MemoryTracingObserver; | 43 class MemoryTracingObserver; |
| 44 class MemoryDumpProvider; | 44 class MemoryDumpProvider; |
| 45 class MemoryDumpSessionState; | 45 class HeapProfilerSerializationState; |
| 46 | 46 |
| 47 // This is the interface exposed to the rest of the codebase to deal with | 47 // This is the interface exposed to the rest of the codebase to deal with |
| 48 // memory tracing. The main entry point for clients is represented by | 48 // memory tracing. The main entry point for clients is represented by |
| 49 // RequestDumpPoint(). The extension by Un(RegisterDumpProvider). | 49 // RequestDumpPoint(). The extension by Un(RegisterDumpProvider). |
| 50 class BASE_EXPORT MemoryDumpManager { | 50 class BASE_EXPORT MemoryDumpManager { |
| 51 public: | 51 public: |
| 52 using RequestGlobalDumpFunction = | 52 using RequestGlobalDumpFunction = |
| 53 RepeatingCallback<void(const MemoryDumpRequestArgs& args, | 53 RepeatingCallback<void(const MemoryDumpRequestArgs& args, |
| 54 const GlobalMemoryDumpCallback& callback)>; | 54 const GlobalMemoryDumpCallback& callback)>; |
| 55 | 55 |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 // for the current process and appends it to the trace. |callback| will be | 140 // for the current process and appends it to the trace. |callback| will be |
| 141 // invoked asynchronously upon completion on the same thread on which | 141 // invoked asynchronously upon completion on the same thread on which |
| 142 // CreateProcessDump() was called. This method should only be used by the | 142 // CreateProcessDump() was called. This method should only be used by the |
| 143 // embedder while creating a global memory dump. | 143 // embedder while creating a global memory dump. |
| 144 void CreateProcessDump(const MemoryDumpRequestArgs& args, | 144 void CreateProcessDump(const MemoryDumpRequestArgs& args, |
| 145 const ProcessMemoryDumpCallback& callback); | 145 const ProcessMemoryDumpCallback& callback); |
| 146 | 146 |
| 147 // Enable heap profiling if kEnableHeapProfiling is specified. | 147 // Enable heap profiling if kEnableHeapProfiling is specified. |
| 148 void EnableHeapProfilingIfNeeded(); | 148 void EnableHeapProfilingIfNeeded(); |
| 149 | 149 |
| 150 // Returns true if the dump mode is allowed for current tracing session. | |
| 151 bool IsDumpModeAllowed(MemoryDumpLevelOfDetail dump_mode); | |
| 152 | |
| 153 // Lets tests see if a dump provider is registered. | 150 // Lets tests see if a dump provider is registered. |
| 154 bool IsDumpProviderRegisteredForTesting(MemoryDumpProvider*); | 151 bool IsDumpProviderRegisteredForTesting(MemoryDumpProvider*); |
| 155 | 152 |
| 156 // Returns the MemoryDumpSessionState object, which is shared by all the | 153 const scoped_refptr<HeapProfilerSerializationState>& |
| 157 // ProcessMemoryDump and MemoryAllocatorDump instances through all the tracing | 154 heap_profiler_serialization_state_for_testing() const { |
| 158 // session lifetime. | 155 return heap_profiler_serialization_state_; |
| 159 const scoped_refptr<MemoryDumpSessionState>& session_state_for_testing() | |
| 160 const { | |
| 161 return session_state_; | |
| 162 } | 156 } |
| 163 | 157 |
| 164 // Returns a unique id for identifying the processes. The id can be | 158 // Returns a unique id for identifying the processes. The id can be |
| 165 // retrieved by child processes only when tracing is enabled. This is | 159 // retrieved by child processes only when tracing is enabled. This is |
| 166 // intended to express cross-process sharing of memory dumps on the | 160 // intended to express cross-process sharing of memory dumps on the |
| 167 // child-process side, without having to know its own child process id. | 161 // child-process side, without having to know its own child process id. |
| 168 uint64_t GetTracingProcessId() const { return tracing_process_id_; } | 162 uint64_t GetTracingProcessId() const { return tracing_process_id_; } |
| 169 void set_tracing_process_id(uint64_t tracing_process_id) { | 163 void set_tracing_process_id(uint64_t tracing_process_id) { |
| 170 tracing_process_id_ = tracing_process_id; | 164 tracing_process_id_ = tracing_process_id; |
| 171 } | 165 } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 190 friend class memory_instrumentation::ProcessLocalDumpManagerImplTest; | 184 friend class memory_instrumentation::ProcessLocalDumpManagerImplTest; |
| 191 | 185 |
| 192 // Holds the state of a process memory dump that needs to be carried over | 186 // Holds the state of a process memory dump that needs to be carried over |
| 193 // across task runners in order to fulfil an asynchronous CreateProcessDump() | 187 // across task runners in order to fulfil an asynchronous CreateProcessDump() |
| 194 // request. At any time exactly one task runner owns a | 188 // request. At any time exactly one task runner owns a |
| 195 // ProcessMemoryDumpAsyncState. | 189 // ProcessMemoryDumpAsyncState. |
| 196 struct ProcessMemoryDumpAsyncState { | 190 struct ProcessMemoryDumpAsyncState { |
| 197 ProcessMemoryDumpAsyncState( | 191 ProcessMemoryDumpAsyncState( |
| 198 MemoryDumpRequestArgs req_args, | 192 MemoryDumpRequestArgs req_args, |
| 199 const MemoryDumpProviderInfo::OrderedSet& dump_providers, | 193 const MemoryDumpProviderInfo::OrderedSet& dump_providers, |
| 200 scoped_refptr<MemoryDumpSessionState> session_state, | 194 scoped_refptr<HeapProfilerSerializationState> |
| 195 heap_profiler_serialization_state, |
| 201 ProcessMemoryDumpCallback callback, | 196 ProcessMemoryDumpCallback callback, |
| 202 scoped_refptr<SequencedTaskRunner> dump_thread_task_runner); | 197 scoped_refptr<SequencedTaskRunner> dump_thread_task_runner); |
| 203 ~ProcessMemoryDumpAsyncState(); | 198 ~ProcessMemoryDumpAsyncState(); |
| 204 | 199 |
| 205 // Gets or creates the memory dump container for the given target process. | 200 // Gets or creates the memory dump container for the given target process. |
| 206 ProcessMemoryDump* GetOrCreateMemoryDumpContainerForProcess( | 201 ProcessMemoryDump* GetOrCreateMemoryDumpContainerForProcess( |
| 207 ProcessId pid, | 202 ProcessId pid, |
| 208 const MemoryDumpArgs& dump_args); | 203 const MemoryDumpArgs& dump_args); |
| 209 | 204 |
| 210 // A map of ProcessId -> ProcessMemoryDump, one for each target process | 205 // A map of ProcessId -> ProcessMemoryDump, one for each target process |
| 211 // being dumped from the current process. Typically each process dumps only | 206 // being dumped from the current process. Typically each process dumps only |
| 212 // for itself, unless dump providers specify a different |target_process| in | 207 // for itself, unless dump providers specify a different |target_process| in |
| 213 // MemoryDumpProvider::Options. | 208 // MemoryDumpProvider::Options. |
| 214 std::map<ProcessId, std::unique_ptr<ProcessMemoryDump>> process_dumps; | 209 std::map<ProcessId, std::unique_ptr<ProcessMemoryDump>> process_dumps; |
| 215 | 210 |
| 216 // The arguments passed to the initial CreateProcessDump() request. | 211 // The arguments passed to the initial CreateProcessDump() request. |
| 217 const MemoryDumpRequestArgs req_args; | 212 const MemoryDumpRequestArgs req_args; |
| 218 | 213 |
| 219 // An ordered sequence of dump providers that have to be invoked to complete | 214 // An ordered sequence of dump providers that have to be invoked to complete |
| 220 // the dump. This is a copy of |dump_providers_| at the beginning of a dump | 215 // the dump. This is a copy of |dump_providers_| at the beginning of a dump |
| 221 // and becomes empty at the end, when all dump providers have been invoked. | 216 // and becomes empty at the end, when all dump providers have been invoked. |
| 222 std::vector<scoped_refptr<MemoryDumpProviderInfo>> pending_dump_providers; | 217 std::vector<scoped_refptr<MemoryDumpProviderInfo>> pending_dump_providers; |
| 223 | 218 |
| 224 // The trace-global session state. | 219 // The HeapProfilerSerializationState object, which is shared by all |
| 225 scoped_refptr<MemoryDumpSessionState> session_state; | 220 // the ProcessMemoryDump and MemoryAllocatorDump instances through all the |
| 221 // tracing session lifetime. |
| 222 scoped_refptr<HeapProfilerSerializationState> |
| 223 heap_profiler_serialization_state; |
| 226 | 224 |
| 227 // Callback passed to the initial call to CreateProcessDump(). | 225 // Callback passed to the initial call to CreateProcessDump(). |
| 228 ProcessMemoryDumpCallback callback; | 226 ProcessMemoryDumpCallback callback; |
| 229 | 227 |
| 230 // The |success| field that will be passed as argument to the |callback|. | 228 // The |success| field that will be passed as argument to the |callback|. |
| 231 bool dump_successful; | 229 bool dump_successful; |
| 232 | 230 |
| 233 // The thread on which FinalizeDumpAndAddToTrace() (and hence |callback|) | 231 // The thread on which FinalizeDumpAndAddToTrace() (and hence |callback|) |
| 234 // should be invoked. This is the thread on which the initial | 232 // should be invoked. This is the thread on which the initial |
| 235 // CreateProcessDump() request was called. | 233 // CreateProcessDump() request was called. |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 286 // Fills the passed vector with the subset of dump providers which were | 284 // Fills the passed vector with the subset of dump providers which were |
| 287 // registered with is_fast_polling_supported == true. | 285 // registered with is_fast_polling_supported == true. |
| 288 void GetDumpProvidersForPolling( | 286 void GetDumpProvidersForPolling( |
| 289 std::vector<scoped_refptr<MemoryDumpProviderInfo>>*); | 287 std::vector<scoped_refptr<MemoryDumpProviderInfo>>*); |
| 290 | 288 |
| 291 // An ordererd set of registered MemoryDumpProviderInfo(s), sorted by task | 289 // An ordererd set of registered MemoryDumpProviderInfo(s), sorted by task |
| 292 // runner affinity (MDPs belonging to the same task runners are adjacent). | 290 // runner affinity (MDPs belonging to the same task runners are adjacent). |
| 293 MemoryDumpProviderInfo::OrderedSet dump_providers_; | 291 MemoryDumpProviderInfo::OrderedSet dump_providers_; |
| 294 | 292 |
| 295 // Shared among all the PMDs to keep state scoped to the tracing session. | 293 // Shared among all the PMDs to keep state scoped to the tracing session. |
| 296 scoped_refptr<MemoryDumpSessionState> session_state_; | 294 scoped_refptr<HeapProfilerSerializationState> |
| 295 heap_profiler_serialization_state_; |
| 297 | 296 |
| 298 std::unique_ptr<MemoryTracingObserver> tracing_observer_; | 297 std::unique_ptr<MemoryTracingObserver> tracing_observer_; |
| 299 | 298 |
| 300 // Function provided by the embedder to handle global dump requests. | 299 // Function provided by the embedder to handle global dump requests. |
| 301 RequestGlobalDumpFunction request_dump_function_; | 300 RequestGlobalDumpFunction request_dump_function_; |
| 302 | 301 |
| 303 // True when current process coordinates the periodic dump triggering. | 302 // True when current process coordinates the periodic dump triggering. |
| 304 bool is_coordinator_; | 303 bool is_coordinator_; |
| 305 | 304 |
| 306 // Protects from concurrent accesses to the local state, eg: to guard against | 305 // Protects from concurrent accesses to the local state, eg: to guard against |
| (...skipping 18 matching lines...) Expand all Loading... |
| 325 // Whether new memory dump providers should be told to enable heap profiling. | 324 // Whether new memory dump providers should be told to enable heap profiling. |
| 326 bool heap_profiling_enabled_; | 325 bool heap_profiling_enabled_; |
| 327 | 326 |
| 328 DISALLOW_COPY_AND_ASSIGN(MemoryDumpManager); | 327 DISALLOW_COPY_AND_ASSIGN(MemoryDumpManager); |
| 329 }; | 328 }; |
| 330 | 329 |
| 331 } // namespace trace_event | 330 } // namespace trace_event |
| 332 } // namespace base | 331 } // namespace base |
| 333 | 332 |
| 334 #endif // BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_ | 333 #endif // BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_ |
| OLD | NEW |