Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(256)

Side by Side Diff: base/trace_event/memory_dump_manager.h

Issue 2820433005: memory-infra: Start disentangling tracing from memory-infra (Closed)
Patch Set: add todo Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/BUILD.gn ('k') | base/trace_event/memory_dump_manager.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 21 matching lines...) Expand all
32 32
33 } // namespace memory_instrumentation 33 } // namespace memory_instrumentation
34 34
35 namespace base { 35 namespace base {
36 36
37 class SingleThreadTaskRunner; 37 class SingleThreadTaskRunner;
38 class Thread; 38 class Thread;
39 39
40 namespace trace_event { 40 namespace trace_event {
41 41
42 class MemoryTracingObserver;
42 class MemoryDumpManagerDelegate; 43 class MemoryDumpManagerDelegate;
43 class MemoryDumpProvider; 44 class MemoryDumpProvider;
44 class MemoryDumpSessionState; 45 class MemoryDumpSessionState;
45 46
46 // 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
47 // memory tracing. The main entry point for clients is represented by 48 // memory tracing. The main entry point for clients is represented by
48 // RequestDumpPoint(). The extension by Un(RegisterDumpProvider). 49 // RequestDumpPoint(). The extension by Un(RegisterDumpProvider).
49 class BASE_EXPORT MemoryDumpManager : public TraceLog::EnabledStateObserver { 50 class BASE_EXPORT MemoryDumpManager {
50 public: 51 public:
51 static const char* const kTraceCategory; 52 static const char* const kTraceCategory;
52 static const char* const kLogPrefix; 53 static const char* const kLogPrefix;
53 54
54 // This value is returned as the tracing id of the child processes by 55 // This value is returned as the tracing id of the child processes by
55 // GetTracingProcessId() when tracing is not enabled. 56 // GetTracingProcessId() when tracing is not enabled.
56 static const uint64_t kInvalidTracingProcessId; 57 static const uint64_t kInvalidTracingProcessId;
57 58
58 static MemoryDumpManager* GetInstance(); 59 static MemoryDumpManager* GetInstance();
59 60
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 // processes have dumped) and its success (true iff all the dumps were 113 // processes have dumped) and its success (true iff all the dumps were
113 // successful). 114 // successful).
114 void RequestGlobalDump(MemoryDumpType dump_type, 115 void RequestGlobalDump(MemoryDumpType dump_type,
115 MemoryDumpLevelOfDetail level_of_detail, 116 MemoryDumpLevelOfDetail level_of_detail,
116 const GlobalMemoryDumpCallback& callback); 117 const GlobalMemoryDumpCallback& callback);
117 118
118 // Same as above (still asynchronous), but without callback. 119 // Same as above (still asynchronous), but without callback.
119 void RequestGlobalDump(MemoryDumpType dump_type, 120 void RequestGlobalDump(MemoryDumpType dump_type,
120 MemoryDumpLevelOfDetail level_of_detail); 121 MemoryDumpLevelOfDetail level_of_detail);
121 122
122 // TraceLog::EnabledStateObserver implementation. 123 // Prepare MemoryDumpManager for RequestGlobalMemoryDump calls.
123 void OnTraceLogEnabled() override; 124 // Starts the MemoryDumpManager thread.
124 void OnTraceLogDisabled() override; 125 // Also uses the given config to initialize the peak detector,
126 // scheduler and heap profiler.
127 void Enable(const TraceConfig::MemoryDumpConfig&);
128
129 // Tearsdown the MemoryDumpManager thread and various other state set up by
130 // Enable.
131 void Disable();
125 132
126 // Enable heap profiling if kEnableHeapProfiling is specified. 133 // Enable heap profiling if kEnableHeapProfiling is specified.
127 void EnableHeapProfilingIfNeeded(); 134 void EnableHeapProfilingIfNeeded();
128 135
129 // Returns true if the dump mode is allowed for current tracing session. 136 // Returns true if the dump mode is allowed for current tracing session.
130 bool IsDumpModeAllowed(MemoryDumpLevelOfDetail dump_mode); 137 bool IsDumpModeAllowed(MemoryDumpLevelOfDetail dump_mode);
131 138
132 // Lets tests see if a dump provider is registered. 139 // Lets tests see if a dump provider is registered.
133 bool IsDumpProviderRegisteredForTesting(MemoryDumpProvider*); 140 bool IsDumpProviderRegisteredForTesting(MemoryDumpProvider*);
134 141
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 const scoped_refptr<SingleThreadTaskRunner> dump_thread_task_runner; 230 const scoped_refptr<SingleThreadTaskRunner> dump_thread_task_runner;
224 231
225 private: 232 private:
226 DISALLOW_COPY_AND_ASSIGN(ProcessMemoryDumpAsyncState); 233 DISALLOW_COPY_AND_ASSIGN(ProcessMemoryDumpAsyncState);
227 }; 234 };
228 235
229 static const int kMaxConsecutiveFailuresCount; 236 static const int kMaxConsecutiveFailuresCount;
230 static const char* const kSystemAllocatorPoolName; 237 static const char* const kSystemAllocatorPoolName;
231 238
232 MemoryDumpManager(); 239 MemoryDumpManager();
233 ~MemoryDumpManager() override; 240 virtual ~MemoryDumpManager();
234 241
235 static void SetInstanceForTesting(MemoryDumpManager* instance); 242 static void SetInstanceForTesting(MemoryDumpManager* instance);
236 static uint32_t GetDumpsSumKb(const std::string&, const ProcessMemoryDump*); 243 static uint32_t GetDumpsSumKb(const std::string&, const ProcessMemoryDump*);
237 static void FinalizeDumpAndAddToTrace( 244
245 void FinalizeDumpAndAddToTrace(
238 std::unique_ptr<ProcessMemoryDumpAsyncState> pmd_async_state); 246 std::unique_ptr<ProcessMemoryDumpAsyncState> pmd_async_state);
239 247
240 // Internal, used only by MemoryDumpManagerDelegate. 248 // Internal, used only by MemoryDumpManagerDelegate.
241 // Creates a memory dump for the current process and appends it to the trace. 249 // Creates a memory dump for the current process and appends it to the trace.
242 // |callback| will be invoked asynchronously upon completion on the same 250 // |callback| will be invoked asynchronously upon completion on the same
243 // thread on which CreateProcessDump() was called. 251 // thread on which CreateProcessDump() was called.
244 void CreateProcessDump(const MemoryDumpRequestArgs& args, 252 void CreateProcessDump(const MemoryDumpRequestArgs& args,
245 const ProcessMemoryDumpCallback& callback); 253 const ProcessMemoryDumpCallback& callback);
246 254
247 // Calls InvokeOnMemoryDump() for the next MDP on the task runner specified by 255 // Calls InvokeOnMemoryDump() for the next MDP on the task runner specified by
(...skipping 29 matching lines...) Expand all
277 285
278 // Shared among all the PMDs to keep state scoped to the tracing session. 286 // Shared among all the PMDs to keep state scoped to the tracing session.
279 scoped_refptr<MemoryDumpSessionState> session_state_; 287 scoped_refptr<MemoryDumpSessionState> session_state_;
280 288
281 // The list of names of dump providers that are blacklisted from strict thread 289 // The list of names of dump providers that are blacklisted from strict thread
282 // affinity check on unregistration. 290 // affinity check on unregistration.
283 std::unordered_set<StringPiece, StringPieceHash> 291 std::unordered_set<StringPiece, StringPieceHash>
284 strict_thread_check_blacklist_; 292 strict_thread_check_blacklist_;
285 293
286 std::unique_ptr<MemoryDumpManagerDelegate> delegate_; 294 std::unique_ptr<MemoryDumpManagerDelegate> delegate_;
295 std::unique_ptr<MemoryTracingObserver> tracing_observer_;
287 296
288 // Protects from concurrent accesses to the |dump_providers_*| and |delegate_| 297 // Protects from concurrent accesses to the |dump_providers_*| and |delegate_|
289 // to guard against disabling logging while dumping on another thread. 298 // to guard against disabling logging while dumping on another thread.
290 Lock lock_; 299 Lock lock_;
291 300
292 // Optimization to avoid attempting any memory dump (i.e. to not walk an empty 301 // Optimization to avoid attempting any memory dump (i.e. to not walk an empty
293 // dump_providers_enabled_ list) when tracing is not enabled. 302 // dump_providers_enabled_ list) when tracing is not enabled.
294 subtle::AtomicWord memory_tracing_enabled_; 303 subtle::AtomicWord memory_tracing_enabled_;
295 304
296 // Thread used for MemoryDumpProviders which don't specify a task runner 305 // Thread used for MemoryDumpProviders which don't specify a task runner
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 } 339 }
331 340
332 private: 341 private:
333 DISALLOW_COPY_AND_ASSIGN(MemoryDumpManagerDelegate); 342 DISALLOW_COPY_AND_ASSIGN(MemoryDumpManagerDelegate);
334 }; 343 };
335 344
336 } // namespace trace_event 345 } // namespace trace_event
337 } // namespace base 346 } // namespace base
338 347
339 #endif // BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_ 348 #endif // BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_
OLDNEW
« no previous file with comments | « base/BUILD.gn ('k') | base/trace_event/memory_dump_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698