| Index: content/browser/memory/memory_coordinator.cc
|
| diff --git a/content/browser/memory/memory_coordinator.cc b/content/browser/memory/memory_coordinator.cc
|
| index 52ee2ece71f8a47def79edd5401bd9c791680b49..8cf5697577a3d8e8b6de4a17a55348802f7ea5d3 100644
|
| --- a/content/browser/memory/memory_coordinator.cc
|
| +++ b/content/browser/memory/memory_coordinator.cc
|
| @@ -5,7 +5,6 @@
|
| #include "content/browser/memory/memory_coordinator.h"
|
|
|
| #include "base/memory/memory_coordinator_client_registry.h"
|
| -#include "content/public/common/content_features.h"
|
|
|
| namespace content {
|
|
|
| @@ -13,32 +12,43 @@ namespace content {
|
| // for the role of this class.
|
| class MemoryCoordinatorHandleImpl : public mojom::MemoryCoordinatorHandle {
|
| public:
|
| - MemoryCoordinatorHandleImpl(mojom::MemoryCoordinatorHandleRequest request)
|
| - : binding_(this, std::move(request)) {
|
| - }
|
| + MemoryCoordinatorHandleImpl(mojom::MemoryCoordinatorHandleRequest request,
|
| + MemoryCoordinator* coordinator,
|
| + int render_process_id);
|
| + ~MemoryCoordinatorHandleImpl() override;
|
|
|
| // mojom::MemoryCoordinatorHandle:
|
| - void AddChild(mojom::ChildMemoryCoordinatorPtr child) override {
|
| - DCHECK(!child_.is_bound());
|
| - child_ = std::move(child);
|
| - }
|
| + void AddChild(mojom::ChildMemoryCoordinatorPtr child) override;
|
|
|
| mojom::ChildMemoryCoordinatorPtr& child() { return child_; }
|
| mojo::Binding<mojom::MemoryCoordinatorHandle>& binding() { return binding_; }
|
|
|
| private:
|
| + MemoryCoordinator* coordinator_;
|
| + int render_process_id_;
|
| mojom::ChildMemoryCoordinatorPtr child_;
|
| mojo::Binding<mojom::MemoryCoordinatorHandle> binding_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(MemoryCoordinatorHandleImpl);
|
| };
|
|
|
| -// static
|
| -MemoryCoordinator* MemoryCoordinator::GetInstance() {
|
| - if (!base::FeatureList::IsEnabled(features::kMemoryCoordinator))
|
| - return nullptr;
|
| - return base::Singleton<MemoryCoordinator,
|
| - base::LeakySingletonTraits<MemoryCoordinator>>::get();
|
| +MemoryCoordinatorHandleImpl::MemoryCoordinatorHandleImpl(
|
| + mojom::MemoryCoordinatorHandleRequest request,
|
| + MemoryCoordinator* coordinator,
|
| + int render_process_id)
|
| + : coordinator_(coordinator),
|
| + render_process_id_(render_process_id),
|
| + binding_(this, std::move(request)) {
|
| + DCHECK(coordinator_);
|
| +}
|
| +
|
| +MemoryCoordinatorHandleImpl::~MemoryCoordinatorHandleImpl() {}
|
| +
|
| +void MemoryCoordinatorHandleImpl::AddChild(
|
| + mojom::ChildMemoryCoordinatorPtr child) {
|
| + DCHECK(!child_.is_bound());
|
| + child_ = std::move(child);
|
| + coordinator_->OnChildAdded(render_process_id_);
|
| }
|
|
|
| MemoryCoordinator::MemoryCoordinator() {}
|
| @@ -49,7 +59,8 @@ void MemoryCoordinator::CreateHandle(
|
| int render_process_id,
|
| mojom::MemoryCoordinatorHandleRequest request) {
|
| std::unique_ptr<MemoryCoordinatorHandleImpl> handle(
|
| - new MemoryCoordinatorHandleImpl(std::move(request)));
|
| + new MemoryCoordinatorHandleImpl(std::move(request), this,
|
| + render_process_id));
|
| handle->binding().set_connection_error_handler(
|
| base::Bind(&MemoryCoordinator::OnConnectionError, base::Unretained(this),
|
| render_process_id));
|
| @@ -71,6 +82,10 @@ bool MemoryCoordinator::SetMemoryState(int render_process_id,
|
| if (iter == children_.end())
|
| return false;
|
|
|
| + // Can't send a message to a child that isn't bound.
|
| + if (!iter->second.handle->child().is_bound())
|
| + return false;
|
| +
|
| // A nop doesn't need to be sent, but is considered successful.
|
| if (iter->second.memory_state == memory_state)
|
| return true;
|
| @@ -94,7 +109,8 @@ void MemoryCoordinator::AddChildForTesting(
|
| mojom::MemoryCoordinatorHandlePtr mch;
|
| auto request = mojo::GetProxy(&mch);
|
| std::unique_ptr<MemoryCoordinatorHandleImpl> handle(
|
| - new MemoryCoordinatorHandleImpl(std::move(request)));
|
| + new MemoryCoordinatorHandleImpl(std::move(request), this,
|
| + dummy_render_process_id));
|
| handle->AddChild(std::move(child));
|
| CreateChildInfoMapEntry(dummy_render_process_id, std::move(handle));
|
| }
|
|
|