Index: trace_event/memory_dump_manager.h |
diff --git a/trace_event/memory_dump_manager.h b/trace_event/memory_dump_manager.h |
index 305ec5980767c0c9de9d70029b739340fdcc9cb0..b445cdb7fc60fa1cd41150e2189eba04053a910c 100644 |
--- a/trace_event/memory_dump_manager.h |
+++ b/trace_event/memory_dump_manager.h |
@@ -40,12 +40,19 @@ class BASE_EXPORT MemoryDumpManager : public TraceLog::EnabledStateObserver { |
static MemoryDumpManager* GetInstance(); |
- // Invoked once per process to register the TraceLog observer. |
- void Initialize(); |
- |
- // See the lifetime and thread-safety requirements on the delegate below in |
- // the |MemoryDumpManagerDelegate| docstring. |
- void SetDelegate(MemoryDumpManagerDelegate* delegate); |
+ // Invoked once per process to listen to trace begin / end events. |
+ // Initialization can happen after (Un)RegisterMemoryDumpProvider() calls |
+ // and the MemoryDumpManager guarantees to support this. |
+ // On the other side, the MemoryDumpManager will not be fully operational |
+ // (i.e. will NACK any RequestGlobalMemoryDump()) until initialized. |
+ // Arguments: |
+ // is_coordinator: if true this MemoryDumpManager instance will act as a |
+ // coordinator and schedule periodic dumps (if enabled via TraceConfig); |
+ // false when the MemoryDumpManager is initialized in a slave process. |
+ // delegate: inversion-of-control interface for embedder-specific behaviors |
+ // (multiprocess handshaking). See the lifetime and thread-safety |
+ // requirements in the |MemoryDumpManagerDelegate| docstring. |
+ void Initialize(MemoryDumpManagerDelegate* delegate, bool is_coordinator); |
// MemoryDumpManager does NOT take memory ownership of |mdp|, which is |
// expected to either be a singleton or unregister itself. |
@@ -60,18 +67,17 @@ class BASE_EXPORT MemoryDumpManager : public TraceLog::EnabledStateObserver { |
// Requests a memory dump. The dump might happen or not depending on the |
// filters and categories specified when enabling tracing. |
- // The |dump_args| is used to specify the dump's level of detail. |
// The optional |callback| is executed asynchronously, on an arbitrary thread, |
// to notify about the completion of the global dump (i.e. after all the |
// processes have dumped) and its success (true iff all the dumps were |
// successful). |
void RequestGlobalDump(MemoryDumpType dump_type, |
- const MemoryDumpArgs& dump_args, |
+ MemoryDumpLevelOfDetail level_of_detail, |
const MemoryDumpCallback& callback); |
// Same as above (still asynchronous), but without callback. |
void RequestGlobalDump(MemoryDumpType dump_type, |
- const MemoryDumpArgs& dump_args); |
+ MemoryDumpLevelOfDetail level_of_detail); |
// TraceLog::EnabledStateObserver implementation. |
void OnTraceLogEnabled() override; |
@@ -92,24 +98,17 @@ class BASE_EXPORT MemoryDumpManager : public TraceLog::EnabledStateObserver { |
// Returns the name for a the allocated_objects dump. Use this to declare |
// suballocator dumps from other dump providers. |
- // It should not return nullptr after the manager has been initialized. |
+ // It will return nullptr if there is no dump provider for the system |
+ // allocator registered (which is currently the case for Mac OS). |
const char* system_allocator_pool_name() const { |
- return system_allocator_pool_name_; |
+ return kSystemAllocatorPoolName; |
}; |
- // Tells the initialization phase to skip scheduling periodic memory dumps. |
- void DisablePeriodicDumpsForTesting() { |
- disable_periodic_dumps_for_testing_ = true; |
- } |
- |
private: |
friend struct DefaultDeleter<MemoryDumpManager>; // For the testing instance. |
friend struct DefaultSingletonTraits<MemoryDumpManager>; |
friend class MemoryDumpManagerDelegate; |
friend class MemoryDumpManagerTest; |
- FRIEND_TEST_ALL_PREFIXES(MemoryDumpManagerTest, DisableFailingDumpers); |
- FRIEND_TEST_ALL_PREFIXES(MemoryDumpManagerTest, |
- UnregisterDumperFromThreadWhileDumping); |
// Descriptor struct used to hold information about registered MDPs. It is |
// deliberately copyable, in order to allow it to be used as std::set value. |
@@ -174,6 +173,7 @@ class BASE_EXPORT MemoryDumpManager : public TraceLog::EnabledStateObserver { |
}; |
static const int kMaxConsecutiveFailuresCount; |
+ static const char* const kSystemAllocatorPoolName; |
MemoryDumpManager(); |
~MemoryDumpManager() override; |
@@ -206,6 +206,9 @@ class BASE_EXPORT MemoryDumpManager : public TraceLog::EnabledStateObserver { |
MemoryDumpManagerDelegate* delegate_; // Not owned. |
+ // When true, this instance is in charge of coordinating periodic dumps. |
+ bool is_coordinator_; |
+ |
// Protects from concurrent accesses to the |dump_providers_*| and |delegate_| |
// to guard against disabling logging while dumping on another thread. |
Lock lock_; |
@@ -221,17 +224,9 @@ class BASE_EXPORT MemoryDumpManager : public TraceLog::EnabledStateObserver { |
// expected to be valid only when tracing is enabled. |
uint64 tracing_process_id_; |
- // Name of the allocated_objects dump. |
- const char* system_allocator_pool_name_; |
- |
// Skips the auto-registration of the core dumpers during Initialize(). |
bool skip_core_dumpers_auto_registration_for_testing_; |
- // When true, the initialization phase does not start the periodic memory |
- // dumps. |
- // TODO(primiano): This should go into TraceConfig. https://goo.gl/5Hj3o0. |
- bool disable_periodic_dumps_for_testing_; |
- |
DISALLOW_COPY_AND_ASSIGN(MemoryDumpManager); |
}; |
@@ -242,10 +237,6 @@ class BASE_EXPORT MemoryDumpManagerDelegate { |
virtual void RequestGlobalMemoryDump(const MemoryDumpRequestArgs& args, |
const MemoryDumpCallback& callback) = 0; |
- // Determines whether the MemoryDumpManager instance should be the master |
- // (the ones which initiates and coordinates the multiprocess dumps) or not. |
- virtual bool IsCoordinatorProcess() const = 0; |
- |
// Returns tracing process id of the current process. This is used by |
// MemoryDumpManager::GetTracingProcessId. |
virtual uint64 GetTracingProcessId() const = 0; |