Index: trace_event/memory_dump_manager.h |
diff --git a/trace_event/memory_dump_manager.h b/trace_event/memory_dump_manager.h |
index 5c75e4e82e882b3e0f49b63f72ffc094496106e8..dfaf3a1fc9e0e16a226a5f833c50d648e4629fde 100644 |
--- a/trace_event/memory_dump_manager.h |
+++ b/trace_event/memory_dump_manager.h |
@@ -97,12 +97,19 @@ class BASE_EXPORT MemoryDumpManager : public TraceLog::EnabledStateObserver { |
return system_allocator_pool_name_; |
}; |
+ // 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. |
@@ -123,6 +130,11 @@ class BASE_EXPORT MemoryDumpManager : public TraceLog::EnabledStateObserver { |
// as can be safely changed without impacting the order within the set. |
mutable int consecutive_failures; |
mutable bool disabled; |
+ |
+ // When a dump provider unregisters, it is flagged as |unregistered| and it |
+ // is removed only upon the next memory dump. This is to avoid altering the |
+ // |dump_providers_| collection while a dump is in progress. |
+ mutable bool unregistered; |
}; |
using MemoryDumpProviderInfoSet = std::set<MemoryDumpProviderInfo>; |
@@ -189,10 +201,6 @@ class BASE_EXPORT MemoryDumpManager : public TraceLog::EnabledStateObserver { |
// affinity (MDPs belonging to the same thread are adjacent). |
MemoryDumpProviderInfoSet dump_providers_; |
- // Flag used to signal that some provider was removed from |dump_providers_| |
- // and therefore the current memory dump (if any) should be aborted. |
- bool did_unregister_dump_provider_; |
- |
// Shared among all the PMDs to keep state scoped to the tracing session. |
scoped_refptr<MemoryDumpSessionState> session_state_; |
@@ -219,6 +227,11 @@ class BASE_EXPORT MemoryDumpManager : public TraceLog::EnabledStateObserver { |
// 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); |
}; |