freezing_vote_decorator.cc 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. #include "components/performance_manager/decorators/freezing_vote_decorator.h"
  5. #include "components/performance_manager/graph/page_node_impl.h"
  6. #include "third_party/abseil-cpp/absl/types/optional.h"
  7. namespace performance_manager {
  8. FreezingVoteDecorator::FreezingVoteDecorator() {
  9. freezing_vote_aggregator_.SetUpstreamVotingChannel(
  10. freezing_voting_channel_factory_.BuildVotingChannel());
  11. }
  12. FreezingVoteDecorator::~FreezingVoteDecorator() = default;
  13. void FreezingVoteDecorator::OnPassedToGraph(Graph* graph) {
  14. graph->RegisterObject(&freezing_vote_aggregator_);
  15. freezing_vote_aggregator_.RegisterNodeDataDescriber(graph);
  16. }
  17. void FreezingVoteDecorator::OnTakenFromGraph(Graph* graph) {
  18. freezing_vote_aggregator_.UnregisterNodeDataDescriber(graph);
  19. graph->UnregisterObject(&freezing_vote_aggregator_);
  20. }
  21. void FreezingVoteDecorator::OnVoteSubmitted(
  22. freezing::FreezingVoterId voter_id,
  23. const PageNode* page_node,
  24. const freezing::FreezingVote& vote) {
  25. DCHECK_EQ(NodeState::kActiveInGraph, page_node->GetNodeState());
  26. PageNodeImpl::FromNode(page_node)->set_freezing_vote(vote);
  27. }
  28. void FreezingVoteDecorator::OnVoteChanged(
  29. freezing::FreezingVoterId voter_id,
  30. const PageNode* page_node,
  31. const freezing::FreezingVote& new_vote) {
  32. DCHECK_EQ(NodeState::kActiveInGraph, page_node->GetNodeState());
  33. PageNodeImpl::FromNode(page_node)->set_freezing_vote(new_vote);
  34. }
  35. void FreezingVoteDecorator::OnVoteInvalidated(
  36. freezing::FreezingVoterId voter_id,
  37. const PageNode* page_node) {
  38. // Don't change votes for pages that are being removed from the graph. This
  39. // causes recursive notifications and useless policy dispatches.
  40. if (page_node->GetNodeState() == NodeState::kLeavingGraph)
  41. return;
  42. PageNodeImpl::FromNode(page_node)->set_freezing_vote(absl::nullopt);
  43. }
  44. } // namespace performance_manager