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 714313cb0e0ee6274b1423ee1c88caf140f1279a..55daad53b36b362ff4e2188cc17b2dc058ac00f8 100644 |
--- a/services/resource_coordinator/coordination_unit/coordination_unit_manager.cc |
+++ b/services/resource_coordinator/coordination_unit/coordination_unit_manager.cc |
@@ -4,15 +4,20 @@ |
#include "services/resource_coordinator/coordination_unit/coordination_unit_manager.h" |
+#include <memory> |
+#include <utility> |
+ |
#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/service_context.h" |
namespace resource_coordinator { |
-class CoordinationUnitImpl; |
- |
CoordinationUnitManager::CoordinationUnitManager() = default; |
CoordinationUnitManager::~CoordinationUnitManager() = default; |
@@ -21,7 +26,27 @@ 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( |
+ std::unique_ptr<CoordinationUnitGraphObserver> observer) { |
+ observers_.push_back(std::move(observer)); |
+} |
+ |
+void CoordinationUnitManager::NotifyObserversCoordinationUnitCreated( |
+ CoordinationUnitImpl* coordination_unit) { |
+ for (auto& observer : observers_) { |
+ if (observer->ShouldObserve(coordination_unit)) { |
+ observer->OnCoordinationUnitCreated(coordination_unit); |
+ } |
+ } |
+} |
+ |
+void CoordinationUnitManager::NotifyObserversCoordinationUnitWillBeDestroyed( |
+ CoordinationUnitImpl* coordination_unit) { |
+ coordination_unit->WillBeDestroyed(); |
} |
} // namespace resource_coordinator |