Index: base/trace_event/memory_dump_manager.h |
diff --git a/base/trace_event/memory_dump_manager.h b/base/trace_event/memory_dump_manager.h |
index a5037cfcef21aa1afa42f3196ce550ddec6a9034..97427212a9c1cb11db349ed55af630e95d409175 100644 |
--- a/base/trace_event/memory_dump_manager.h |
+++ b/base/trace_event/memory_dump_manager.h |
@@ -8,6 +8,7 @@ |
#include <map> |
#include <memory> |
#include <set> |
+#include <vector> |
#include "base/atomicops.h" |
#include "base/containers/hash_tables.h" |
@@ -80,6 +81,15 @@ class BASE_EXPORT MemoryDumpManager : public TraceLog::EnabledStateObserver { |
const MemoryDumpProvider::Options& options); |
void UnregisterDumpProvider(MemoryDumpProvider* mdp); |
+ // Unregisters an unbound (no task_runner affinity) dump provider and takes |
+ // care about its deletion asynchronously. |
+ // Can be used only for for dump providers with no task-runner affinity. |
+ // This method takes ownership of the dump provider and guarantees that: |
+ // - The |mdp| will be deleted at some point in the near future. |
+ // - Its deletion will not happen concurrently with the OnMemoryDump() call. |
Ruud van Asseldonk
2015/12/14 16:25:49
/s/concurrently/in parallel/?
|
+ // Note that OnMemoryDump() calls can still happen after this method returns. |
+ void UnregisterAndDeleteDumpProviderAsync(scoped_ptr<MemoryDumpProvider> mdp); |
Ruud van Asseldonk
2015/12/14 16:25:48
This feels like an awkward API. It looks like what
|
+ |
// Requests a memory dump. The dump might happen or not depending on the |
// filters and categories specified when enabling tracing. |
// The optional |callback| is executed asynchronously, on an arbitrary thread, |
@@ -226,9 +236,6 @@ class BASE_EXPORT MemoryDumpManager : public TraceLog::EnabledStateObserver { |
static void SetInstanceForTesting(MemoryDumpManager* instance); |
static void FinalizeDumpAndAddToTrace( |
scoped_ptr<ProcessMemoryDumpAsyncState> pmd_async_state); |
- static void AbortDumpLocked(MemoryDumpCallback callback, |
- scoped_refptr<SingleThreadTaskRunner> task_runner, |
- uint64_t dump_guid); |
// Internal, used only by MemoryDumpManagerDelegate. |
// Creates a memory dump for the current process and appends it to the trace. |
@@ -240,7 +247,10 @@ class BASE_EXPORT MemoryDumpManager : public TraceLog::EnabledStateObserver { |
// Continues the ProcessMemoryDump started by CreateProcessDump(), hopping |
// across threads as needed as specified by MDPs in RegisterDumpProvider(). |
void ContinueAsyncProcessDump( |
- scoped_ptr<ProcessMemoryDumpAsyncState> pmd_async_state); |
+ ProcessMemoryDumpAsyncState* owned_pmd_async_state); |
+ |
+ void UnregisterDumpProviderInternal(MemoryDumpProvider* mdp, |
+ bool delete_async); |
Ruud van Asseldonk
2015/12/14 16:25:48
This is ambiguous; does |delete_async = false| mea
|
// An ordererd set of registered MemoryDumpProviderInfo(s), sorted by thread |
// affinity (MDPs belonging to the same thread are adjacent). |
@@ -254,6 +264,12 @@ class BASE_EXPORT MemoryDumpManager : public TraceLog::EnabledStateObserver { |
// When true, this instance is in charge of coordinating periodic dumps. |
bool is_coordinator_; |
+ // Contains one entry per each dump that has been started (via |
Ruud van Asseldonk
2015/12/14 16:25:49
Nit: "per" or "for each", not "per each".
|
+ // CreateProcessDump()) and is not completed yet. |
+ // Only the const members of the stores ProcessMemoryDumpAsyncState are safe |
Ruud van Asseldonk
2015/12/14 16:25:49
/s/stores/stored/?
|
+ // to read and only while holding the |lock_|. |
Ruud van Asseldonk
2015/12/14 16:25:49
That is a violation of the general |const| contrac
|
+ std::vector<const ProcessMemoryDumpAsyncState*> outstanding_dumps_; |
+ |
// Protects from concurrent accesses to the |dump_providers_*| and |delegate_| |
// to guard against disabling logging while dumping on another thread. |
Lock lock_; |