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