Chromium Code Reviews| Index: services/resource_coordinator/coordination_unit/coordination_unit_manager.cc |
| diff --git a/services/resource_coordinator/coordination_unit/coordination_unit_manager.cc b/services/resource_coordinator/coordination_unit/coordination_unit_manager.cc |
| index 4eca58767eeb3174725d51177d10ad7b67428785..90865cb5c15e5e8e50906c8308124b3b72a4124a 100644 |
| --- a/services/resource_coordinator/coordination_unit/coordination_unit_manager.cc |
| +++ b/services/resource_coordinator/coordination_unit/coordination_unit_manager.cc |
| @@ -4,25 +4,59 @@ |
| #include "services/resource_coordinator/coordination_unit/coordination_unit_manager.h" |
| +#include <memory> |
| + |
| #include "base/bind.h" |
| #include "base/bind_helpers.h" |
| +#include "base/macros.h" |
| +#include "services/resource_coordinator/coordination_unit/coordination_unit_graph_observer.h" |
| +#include "services/resource_coordinator/coordination_unit/coordination_unit_impl.h" |
| #include "services/resource_coordinator/coordination_unit/coordination_unit_provider_impl.h" |
| +#include "services/resource_coordinator/public/cpp/coordination_unit_types.h" |
| #include "services/service_manager/public/cpp/binder_registry.h" |
| #include "services/service_manager/public/cpp/service_context.h" |
| namespace resource_coordinator { |
| -class CoordinationUnitImpl; |
| - |
| CoordinationUnitManager::CoordinationUnitManager() = default; |
| -CoordinationUnitManager::~CoordinationUnitManager() = default; |
| +CoordinationUnitManager::~CoordinationUnitManager() { |
| + for (CoordinationUnitGraphObserver* observer : observers_) { |
| + delete observer; |
| + } |
| +} |
| void CoordinationUnitManager::OnStart( |
| service_manager::BinderRegistry* registry, |
| service_manager::ServiceContextRefFactory* service_ref_factory) { |
| registry->AddInterface(base::Bind(&CoordinationUnitProviderImpl::Create, |
| - base::Unretained(service_ref_factory))); |
| + base::Unretained(service_ref_factory), |
| + base::Unretained(this))); |
| +} |
| + |
| +void CoordinationUnitManager::RegisterObserver( |
| + CoordinationUnitGraphObserver* observer) { |
| + observers_.push_back(observer); |
| +} |
| + |
| +void CoordinationUnitManager::NotifyObserversCoordinationUnitCreated( |
| + CoordinationUnitImpl* coordination_unit) { |
| + for (CoordinationUnitGraphObserver* observer : observers_) { |
| + if (observer->filter() == coordination_unit->id().type || |
| + // CoordinationUnitType::kInvalidType overrides filtering. |
| + observer->filter() == CoordinationUnitType::kInvalidType) { |
|
Zhen Wang
2017/06/15 20:07:53
This is not intuitive. See comments in CUGraphObse
|
| + observer->CoordinationUnitCreated(coordination_unit); |
| + } |
| + } |
| +} |
| + |
| +void CoordinationUnitManager::NotifyObserversCoordinationUnitWillBeDestroyed( |
| + CoordinationUnitImpl* coordination_unit) { |
| + coordination_unit->WillBeDestroyed(); |
| +} |
| + |
| +void CoordinationUnitManager::UnregisterAllObserversForTesting() { |
| + observers_.clear(); |
| } |
| } // namespace resource_coordinator |