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 |