freezing_vote_decorator.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef COMPONENTS_PERFORMANCE_MANAGER_DECORATORS_FREEZING_VOTE_DECORATOR_H_
  5. #define COMPONENTS_PERFORMANCE_MANAGER_DECORATORS_FREEZING_VOTE_DECORATOR_H_
  6. #include "components/performance_manager/freezing/freezing_vote_aggregator.h"
  7. #include "components/performance_manager/public/freezing/freezing.h"
  8. #include "components/performance_manager/public/graph/graph.h"
  9. namespace performance_manager {
  10. class PageNode;
  11. // Decorator that adorns PageNodes with a FreezingVote.
  12. //
  13. // This decorator owns a GraphRegistered FreezingVoteAggregator instance that
  14. // can be used to submit votes for a given PageNode. Components interested in
  15. // submitting a freezing vote should do the following:
  16. // voting::VotingChannelWrapper<FreezingVote> voter;
  17. // voter.SetVotingChannel(
  18. // graph()->GetRegisteredObjectAs<freezing::FreezingVoteAggregator>()
  19. // ->GetVotingChannel());
  20. // voter.SubmitVote(page_node,
  21. // FreezingVote(FreezingVoteValue::kCannotFreeze, "reason"));
  22. //
  23. // The aggregator is responsible for upstreaming the final vote to this
  24. // decorator.
  25. class FreezingVoteDecorator : public GraphOwnedDefaultImpl,
  26. public freezing::FreezingVoteObserver {
  27. public:
  28. FreezingVoteDecorator();
  29. ~FreezingVoteDecorator() override;
  30. FreezingVoteDecorator(const FreezingVoteDecorator&) = delete;
  31. FreezingVoteDecorator& operator=(const FreezingVoteDecorator&) = delete;
  32. private:
  33. // GraphOwned:
  34. void OnPassedToGraph(Graph* graph) override;
  35. void OnTakenFromGraph(Graph* graph) override;
  36. // FreezingVoteObserver implementation:
  37. void OnVoteSubmitted(freezing::FreezingVoterId voter_id,
  38. const PageNode* page_node,
  39. const freezing::FreezingVote& vote) override;
  40. void OnVoteChanged(freezing::FreezingVoterId voter_id,
  41. const PageNode* page_node,
  42. const freezing::FreezingVote& new_vote) override;
  43. void OnVoteInvalidated(freezing::FreezingVoterId voter_id,
  44. const PageNode* page_node) override;
  45. freezing::FreezingVotingChannelFactory freezing_voting_channel_factory_{this};
  46. freezing::FreezingVoteAggregator freezing_vote_aggregator_;
  47. };
  48. } // namespace performance_manager
  49. #endif // COMPONENTS_PERFORMANCE_MANAGER_DECORATORS_FREEZING_VOTE_DECORATOR_H_