Index: services/resource_coordinator/public/cpp/memory/process_local_dump_manager_impl.cc |
diff --git a/services/resource_coordinator/public/cpp/memory/memory_dump_manager_delegate_impl.cc b/services/resource_coordinator/public/cpp/memory/process_local_dump_manager_impl.cc |
similarity index 64% |
rename from services/resource_coordinator/public/cpp/memory/memory_dump_manager_delegate_impl.cc |
rename to services/resource_coordinator/public/cpp/memory/process_local_dump_manager_impl.cc |
index 1129bae1d1146bc5e475a59c2d7523acca891fe8..8287682178d120b9d1a9182d669747808e2594aa 100644 |
--- a/services/resource_coordinator/public/cpp/memory/memory_dump_manager_delegate_impl.cc |
+++ b/services/resource_coordinator/public/cpp/memory/process_local_dump_manager_impl.cc |
@@ -2,7 +2,7 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "services/resource_coordinator/public/cpp/memory/memory_dump_manager_delegate_impl.h" |
+#include "services/resource_coordinator/public/cpp/memory/process_local_dump_manager_impl.h" |
#include "base/bind.h" |
#include "base/bind_helpers.h" |
@@ -16,10 +16,19 @@ |
namespace memory_instrumentation { |
-MemoryDumpManagerDelegateImpl::Config::~Config() {} |
+ProcessLocalDumpManagerImpl::Config::~Config() {} |
-MemoryDumpManagerDelegateImpl::MemoryDumpManagerDelegateImpl( |
- const MemoryDumpManagerDelegateImpl::Config& config) |
+// static |
+void ProcessLocalDumpManagerImpl::InitializeInstance(const Config& config) { |
Primiano Tucci (use gerrit)
2017/04/19 15:44:34
I'd s/InitializeInstance/CreateInstance/
ssid
2017/04/20 01:18:21
Done.
|
+ static ProcessLocalDumpManagerImpl* instance = nullptr; |
chiniforooshan
2017/04/18 15:11:24
Did you test this in a component build? This is pa
ssid
2017/04/18 19:11:45
I can't think of better way to manage the lifetime
Primiano Tucci (use gerrit)
2017/04/19 15:44:34
If we agree on this pattern, this seems fine to me
ssid
2017/04/20 01:18:21
Done.
|
+ if (!instance) { |
+ instance = new ProcessLocalDumpManagerImpl(config); |
+ } else { |
+ NOTREACHED(); |
+ } |
+} |
+ |
+ProcessLocalDumpManagerImpl::ProcessLocalDumpManagerImpl(const Config& config) |
: binding_(this), |
config_(config), |
task_runner_(nullptr), |
@@ -34,21 +43,25 @@ MemoryDumpManagerDelegateImpl::MemoryDumpManagerDelegateImpl( |
} |
coordinator_->RegisterProcessLocalDumpManager( |
binding_.CreateInterfacePtrAndBind()); |
-} |
-MemoryDumpManagerDelegateImpl::~MemoryDumpManagerDelegateImpl() {} |
- |
-bool MemoryDumpManagerDelegateImpl::IsCoordinator() const { |
- return task_runner_ != nullptr; |
+ // Only one process should handle periodic dumping. |
+ bool is_coordinator_process = !!config.coordinator(); |
+ base::trace_event::MemoryDumpManager::GetInstance()->Initialize( |
+ base::BindRepeating(&ProcessLocalDumpManagerImpl::RequestGlobalMemoryDump, |
+ base::Unretained(this)), |
+ is_coordinator_process); |
} |
-void MemoryDumpManagerDelegateImpl::RequestProcessMemoryDump( |
+ProcessLocalDumpManagerImpl::~ProcessLocalDumpManagerImpl() {} |
+ |
+void ProcessLocalDumpManagerImpl::RequestProcessMemoryDump( |
const base::trace_event::MemoryDumpRequestArgs& args, |
const RequestProcessMemoryDumpCallback& callback) { |
- MemoryDumpManagerDelegate::CreateProcessDump(args, callback); |
+ base::trace_event::MemoryDumpManager::GetInstance()->CreateProcessDump( |
+ args, callback); |
} |
-void MemoryDumpManagerDelegateImpl::RequestGlobalMemoryDump( |
+void ProcessLocalDumpManagerImpl::RequestGlobalMemoryDump( |
const base::trace_event::MemoryDumpRequestArgs& args, |
const base::trace_event::GlobalMemoryDumpCallback& callback) { |
// Note: This condition is here to match the old behavior. If the delegate is |
@@ -58,7 +71,7 @@ void MemoryDumpManagerDelegateImpl::RequestGlobalMemoryDump( |
// process, parallel requests will be cancelled. |
// |
// TODO(chiniforooshan): Unify the child and browser behavior. |
- if (IsCoordinator()) { |
+ if (task_runner_) { |
task_runner_->PostTask( |
FROM_HERE, |
base::Bind(&mojom::Coordinator::RequestGlobalMemoryDump, |
@@ -75,21 +88,24 @@ void MemoryDumpManagerDelegateImpl::RequestGlobalMemoryDump( |
pending_memory_dump_guid_ = args.dump_guid; |
} |
auto callback_proxy = |
- base::Bind(&MemoryDumpManagerDelegateImpl::MemoryDumpCallbackProxy, |
+ base::Bind(&ProcessLocalDumpManagerImpl::MemoryDumpCallbackProxy, |
base::Unretained(this), callback); |
coordinator_->RequestGlobalMemoryDump(args, callback_proxy); |
} |
-void MemoryDumpManagerDelegateImpl::MemoryDumpCallbackProxy( |
+void ProcessLocalDumpManagerImpl::MemoryDumpCallbackProxy( |
const base::trace_event::GlobalMemoryDumpCallback& callback, |
uint64_t dump_guid, |
bool success) { |
- DCHECK_NE(0U, pending_memory_dump_guid_); |
- pending_memory_dump_guid_ = 0; |
+ { |
+ base::AutoLock lock(pending_memory_dump_guid_lock_); |
+ DCHECK_NE(0U, pending_memory_dump_guid_); |
+ pending_memory_dump_guid_ = 0; |
+ } |
callback.Run(dump_guid, success); |
} |
-void MemoryDumpManagerDelegateImpl::SetAsNonCoordinatorForTesting() { |
+void ProcessLocalDumpManagerImpl::SetAsNonCoordinatorForTesting() { |
task_runner_ = nullptr; |
} |