// Copyright 2019 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_PERFORMANCE_MANAGER_GRAPH_PROPERTIES_H_ #define COMPONENTS_PERFORMANCE_MANAGER_GRAPH_PROPERTIES_H_ #include <utility> #include "base/check.h" #include "components/performance_manager/public/graph/node_state.h" namespace performance_manager { // Helper classes for setting properties and invoking observer callbacks based // on the value change. This is templated on the observer type to allow // easy testing. // // Objects of NodeImplType are expected to fulfill the contract: // // IterableCollection GetObservers() const; // bool NodeImplType::CanSetProperty() const; // bool NodeImplType::CanSetAndNotifyProperty() const; // // These are used in DCHECKs to assert that properties are only being modified // at appropriate moments. If your code is blowing up in one of these DCHECKS // you are trying to change a property while a node is being added or removed // from the graph. When adding to the graph property changes should be done in a // separate posted task. When removing from the graph, they should simply not be // done. See class comments on node observers, NodeState, and NodeBase for full // details. template <typename NodeImplType, typename NodeType, typename ObserverType> class ObservedPropertyImpl { … }; } // namespace performance_manager #endif // COMPONENTS_PERFORMANCE_MANAGER_GRAPH_PROPERTIES_H_