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

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

Issue 2006943003: [tracing] Sanitize process memory dumps for background mode (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@whitelist_mdp
Patch Set: Fixes. Created 4 years, 6 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
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 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 // allocator registered (which is currently the case for Mac OS). 134 // allocator registered (which is currently the case for Mac OS).
135 const char* system_allocator_pool_name() const { 135 const char* system_allocator_pool_name() const {
136 return kSystemAllocatorPoolName; 136 return kSystemAllocatorPoolName;
137 }; 137 };
138 138
139 // When set to true, calling |RegisterMemoryDumpProvider| is a no-op. 139 // When set to true, calling |RegisterMemoryDumpProvider| is a no-op.
140 void set_dumper_registrations_ignored_for_testing(bool ignored) { 140 void set_dumper_registrations_ignored_for_testing(bool ignored) {
141 dumper_registrations_ignored_for_testing_ = ignored; 141 dumper_registrations_ignored_for_testing_ = ignored;
142 } 142 }
143 143
144 // Resets the dump provider whitelist to the list given.
145 void set_dump_provider_whitelist_for_testing(const char* const* list) {
146 dump_provider_whitelist_ = list;
147 }
148
149 private: 144 private:
150 friend std::default_delete<MemoryDumpManager>; // For the testing instance. 145 friend std::default_delete<MemoryDumpManager>; // For the testing instance.
151 friend struct DefaultSingletonTraits<MemoryDumpManager>; 146 friend struct DefaultSingletonTraits<MemoryDumpManager>;
152 friend class MemoryDumpManagerDelegate; 147 friend class MemoryDumpManagerDelegate;
153 friend class MemoryDumpManagerTest; 148 friend class MemoryDumpManagerTest;
154 149
155 // Descriptor used to hold information about registered MDPs. 150 // Descriptor used to hold information about registered MDPs.
156 // Some important considerations about lifetime of this object: 151 // Some important considerations about lifetime of this object:
157 // - In nominal conditions, all the MemoryDumpProviderInfo instances live in 152 // - In nominal conditions, all the MemoryDumpProviderInfo instances live in
158 // the |dump_providers_| collection (% unregistration while dumping). 153 // the |dump_providers_| collection (% unregistration while dumping).
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 struct ProcessMemoryDumpAsyncState { 218 struct ProcessMemoryDumpAsyncState {
224 ProcessMemoryDumpAsyncState( 219 ProcessMemoryDumpAsyncState(
225 MemoryDumpRequestArgs req_args, 220 MemoryDumpRequestArgs req_args,
226 const MemoryDumpProviderInfo::OrderedSet& dump_providers, 221 const MemoryDumpProviderInfo::OrderedSet& dump_providers,
227 scoped_refptr<MemoryDumpSessionState> session_state, 222 scoped_refptr<MemoryDumpSessionState> session_state,
228 MemoryDumpCallback callback, 223 MemoryDumpCallback callback,
229 scoped_refptr<SingleThreadTaskRunner> dump_thread_task_runner); 224 scoped_refptr<SingleThreadTaskRunner> dump_thread_task_runner);
230 ~ProcessMemoryDumpAsyncState(); 225 ~ProcessMemoryDumpAsyncState();
231 226
232 // Gets or creates the memory dump container for the given target process. 227 // Gets or creates the memory dump container for the given target process.
233 ProcessMemoryDump* GetOrCreateMemoryDumpContainerForProcess(ProcessId pid); 228 ProcessMemoryDump* GetOrCreateMemoryDumpContainerForProcess(
229 ProcessId pid,
230 const MemoryDumpArgs& dump_args);
234 231
235 // A map of ProcessId -> ProcessMemoryDump, one for each target process 232 // A map of ProcessId -> ProcessMemoryDump, one for each target process
236 // being dumped from the current process. Typically each process dumps only 233 // being dumped from the current process. Typically each process dumps only
237 // for itself, unless dump providers specify a different |target_process| in 234 // for itself, unless dump providers specify a different |target_process| in
238 // MemoryDumpProvider::Options. 235 // MemoryDumpProvider::Options.
239 std::map<ProcessId, std::unique_ptr<ProcessMemoryDump>> process_dumps; 236 std::map<ProcessId, std::unique_ptr<ProcessMemoryDump>> process_dumps;
240 237
241 // The arguments passed to the initial CreateProcessDump() request. 238 // The arguments passed to the initial CreateProcessDump() request.
242 const MemoryDumpRequestArgs req_args; 239 const MemoryDumpRequestArgs req_args;
243 240
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 // dump_providers_enabled_ list) when tracing is not enabled. 355 // dump_providers_enabled_ list) when tracing is not enabled.
359 subtle::AtomicWord memory_tracing_enabled_; 356 subtle::AtomicWord memory_tracing_enabled_;
360 357
361 // For time-triggered periodic dumps. 358 // For time-triggered periodic dumps.
362 PeriodicGlobalDumpTimer periodic_dump_timer_; 359 PeriodicGlobalDumpTimer periodic_dump_timer_;
363 360
364 // Thread used for MemoryDumpProviders which don't specify a task runner 361 // Thread used for MemoryDumpProviders which don't specify a task runner
365 // affinity. 362 // affinity.
366 std::unique_ptr<Thread> dump_thread_; 363 std::unique_ptr<Thread> dump_thread_;
367 364
368 // List of names of the dump providers whitelisted for background mode.
369 const char* const* dump_provider_whitelist_;
370
371 // The unique id of the child process. This is created only for tracing and is 365 // The unique id of the child process. This is created only for tracing and is
372 // expected to be valid only when tracing is enabled. 366 // expected to be valid only when tracing is enabled.
373 uint64_t tracing_process_id_; 367 uint64_t tracing_process_id_;
374 368
375 // When true, calling |RegisterMemoryDumpProvider| is a no-op. 369 // When true, calling |RegisterMemoryDumpProvider| is a no-op.
376 bool dumper_registrations_ignored_for_testing_; 370 bool dumper_registrations_ignored_for_testing_;
377 371
378 // Whether new memory dump providers should be told to enable heap profiling. 372 // Whether new memory dump providers should be told to enable heap profiling.
379 bool heap_profiling_enabled_; 373 bool heap_profiling_enabled_;
380 374
(...skipping 21 matching lines...) Expand all
402 } 396 }
403 397
404 private: 398 private:
405 DISALLOW_COPY_AND_ASSIGN(MemoryDumpManagerDelegate); 399 DISALLOW_COPY_AND_ASSIGN(MemoryDumpManagerDelegate);
406 }; 400 };
407 401
408 } // namespace trace_event 402 } // namespace trace_event
409 } // namespace base 403 } // namespace base
410 404
411 #endif // BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_ 405 #endif // BASE_TRACE_EVENT_MEMORY_DUMP_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698