| 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) {
|
| + observer->CoordinationUnitCreated(coordination_unit);
|
| + }
|
| + }
|
| +}
|
| +
|
| +void CoordinationUnitManager::NotifyObserversCoordinationUnitWillBeDestroyed(
|
| + CoordinationUnitImpl* coordination_unit) {
|
| + coordination_unit->WillBeDestroyed();
|
| +}
|
| +
|
| +void CoordinationUnitManager::UnregisterAllObserversForTesting() {
|
| + observers_.clear();
|
| }
|
|
|
| } // namespace resource_coordinator
|
|
|