| // Copyright 2020 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_PERFORMANCE_MANAGER_DECORATORS_FREEZING_VOTE_DECORATOR_H_ |
| #define COMPONENTS_PERFORMANCE_MANAGER_DECORATORS_FREEZING_VOTE_DECORATOR_H_ |
| |
| #include <memory> |
| |
| #include "components/performance_manager/freezing/freezing_vote_aggregator.h" |
| #include "components/performance_manager/public/freezing/freezing.h" |
| #include "components/performance_manager/public/graph/graph.h" |
| |
| namespace performance_manager { |
| |
| class PageNode; |
| |
| // Decorator that adorns PageNodes with a FreezingVote. |
| // |
| // This decorator owns a GraphRegistered FreezingVoteAggregator instance that |
| // can be used to submit votes for a given PageNode. Components interested in |
| // submitting a freezing vote should do the following: |
| // voting::VotingChannelWrapper<FreezingVote> voter; |
| // voter.SetVotingChannel( |
| // graph()->GetRegisteredObjectAs<freezing::FreezingVoteAggregator>() |
| // ->GetVotingChannel()); |
| // voter.SubmitVote(page_node, |
| // FreezingVote(FreezingVoteValue::kCannotFreeze, "reason")); |
| // |
| // The aggregator is responsible for upstreaming the final vote to this |
| // decorator. |
| class FreezingVoteDecorator : public GraphOwnedDefaultImpl, |
| public freezing::FreezingVoteObserver { |
| public: |
| FreezingVoteDecorator(); |
| ~FreezingVoteDecorator() override; |
| |
| FreezingVoteDecorator(const FreezingVoteDecorator&) = delete; |
| FreezingVoteDecorator& operator=(const FreezingVoteDecorator&) = delete; |
| |
| private: |
| // GraphOwned: |
| void OnPassedToGraph(Graph* graph) override; |
| void OnTakenFromGraph(Graph* graph) override; |
| |
| // FreezingVoteObserver implementation: |
| void OnVoteSubmitted(freezing::FreezingVoterId voter_id, |
| const PageNode* page_node, |
| const freezing::FreezingVote& vote) override; |
| void OnVoteChanged(freezing::FreezingVoterId voter_id, |
| const PageNode* page_node, |
| const freezing::FreezingVote& new_vote) override; |
| void OnVoteInvalidated(freezing::FreezingVoterId voter_id, |
| const PageNode* page_node) override; |
| |
| freezing::FreezingVoteConsumerDefaultImpl vote_consumer_default_impl_{this}; |
| freezing::FreezingVoteAggregator freezing_vote_aggregator_; |
| }; |
| |
| } // namespace performance_manager |
| |
| #endif // COMPONENTS_PERFORMANCE_MANAGER_DECORATORS_FREEZING_VOTE_DECORATOR_H_ |