1 // Copyright 2019 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 
5 #include "components/performance_manager/test_support/frame_priority.h"
6 
7 #include "testing/gtest/include/gtest/gtest.h"
8 
9 namespace performance_manager {
10 namespace frame_priority {
11 namespace test {
12 
DummyVoteConsumer()13 DummyVoteConsumer::DummyVoteConsumer() : voting_channel_factory_(this) {}
14 
15 DummyVoteConsumer::~DummyVoteConsumer() = default;
16 
SubmitVote(VoterId voter_id,const Vote & vote)17 VoteReceipt DummyVoteConsumer::SubmitVote(VoterId voter_id, const Vote& vote) {
18   // Accept the vote.
19   votes_.emplace_back(AcceptedVote(this, voter_id, vote));
20   EXPECT_FALSE(votes_.back().HasReceipt());
21   EXPECT_TRUE(votes_.back().IsValid());
22   ++valid_vote_count_;
23   EXPECT_LE(valid_vote_count_, votes_.size());
24 
25   // Issue a receipt.
26   auto receipt = votes_.back().IssueReceipt();
27   EXPECT_TRUE(votes_.back().HasReceipt());
28   EXPECT_TRUE(votes_.back().IsValid());
29   return receipt;
30 }
31 
ChangeVote(VoteReceipt receipt,AcceptedVote * old_vote,const Vote & new_vote)32 VoteReceipt DummyVoteConsumer::ChangeVote(VoteReceipt receipt,
33                                           AcceptedVote* old_vote,
34                                           const Vote& new_vote) {
35   // We should own this vote and it should be valid.
36   EXPECT_TRUE(receipt.HasVote(old_vote));
37   EXPECT_LE(votes_.data(), old_vote);
38   EXPECT_LT(old_vote, votes_.data() + votes_.size());
39   EXPECT_TRUE(old_vote->IsValid());
40   EXPECT_LT(0u, valid_vote_count_);
41 
42   // Just update the vote in-place, and return the existing receipt for it.
43   old_vote->UpdateVote(new_vote);
44   return receipt;
45 }
46 
VoteInvalidated(AcceptedVote * vote)47 void DummyVoteConsumer::VoteInvalidated(AcceptedVote* vote) {
48   // We should own this vote.
49   EXPECT_LE(votes_.data(), vote);
50   EXPECT_LT(vote, votes_.data() + votes_.size());
51   EXPECT_FALSE(vote->IsValid());
52   EXPECT_LT(0u, valid_vote_count_);
53   --valid_vote_count_;
54 }
55 
ExpectInvalidVote(size_t index)56 void DummyVoteConsumer::ExpectInvalidVote(size_t index) {
57   EXPECT_LT(index, votes_.size());
58   const AcceptedVote& accepted_vote = votes_[index];
59   EXPECT_EQ(this, accepted_vote.consumer());
60   EXPECT_FALSE(accepted_vote.IsValid());
61 }
62 
ExpectValidVote(size_t index,VoterId voter_id,const FrameNode * frame_node,base::TaskPriority priority,const char * reason)63 void DummyVoteConsumer::ExpectValidVote(size_t index,
64                                         VoterId voter_id,
65                                         const FrameNode* frame_node,
66                                         base::TaskPriority priority,
67                                         const char* reason) {
68   EXPECT_LT(index, votes_.size());
69   const AcceptedVote& accepted_vote = votes_[index];
70   EXPECT_EQ(this, accepted_vote.consumer());
71   EXPECT_TRUE(accepted_vote.IsValid());
72   EXPECT_EQ(voter_id, accepted_vote.voter_id());
73   const Vote& vote = accepted_vote.vote();
74   EXPECT_EQ(frame_node, vote.frame_node());
75   EXPECT_EQ(priority, vote.priority());
76   EXPECT_TRUE(vote.reason());
77   if (reason)
78     EXPECT_EQ(reason, vote.reason());
79 }
80 
81 // static
82 const char DummyVoter::kReason[] = "dummmy reason";
83 
84 DummyVoter::DummyVoter() = default;
85 DummyVoter::~DummyVoter() = default;
86 
SetVotingChannel(VotingChannel && voting_channel)87 void DummyVoter::SetVotingChannel(VotingChannel&& voting_channel) {
88   voting_channel_ = std::move(voting_channel);
89 }
90 
EmitVote(const FrameNode * frame_node,base::TaskPriority priority,const char * reason)91 void DummyVoter::EmitVote(const FrameNode* frame_node,
92                           base::TaskPriority priority,
93                           const char* reason) {
94   EXPECT_TRUE(voting_channel_.IsValid());
95   receipts_.emplace_back(
96       voting_channel_.SubmitVote(Vote(frame_node, priority, reason)));
97 }
98 
99 }  // namespace test
100 }  // namespace frame_priority
101 }  // namespace performance_manager
102