blob: c9757b537f31fb09bbbc41ffd2a82d6e6f848500 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
// 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.
#include "components/performance_manager/execution_context_priority/frame_visibility_voter.h"
#include <utility>
#include "components/performance_manager/public/execution_context/execution_context_registry.h"
#include "url/gurl.h"
namespace performance_manager {
namespace execution_context_priority {
namespace {
const execution_context::ExecutionContext* GetExecutionContext5(
const FrameNode* frame_node) {
return execution_context::ExecutionContextRegistry::GetFromGraph(
frame_node->GetGraph())
->GetExecutionContextForFrameNode(frame_node);
}
// Returns a vote with the appropriate priority depending on the frame's
// |visibility|.
Vote GetVote2(FrameNode::Visibility visibility) {
base::TaskPriority priority;
switch (visibility) {
case FrameNode::Visibility::kUnknown:
priority = base::TaskPriority::USER_VISIBLE;
break;
case FrameNode::Visibility::kVisible:
priority = base::TaskPriority::USER_VISIBLE;
break;
case FrameNode::Visibility::kNotVisible:
priority = base::TaskPriority::LOWEST;
break;
}
return Vote(priority, FrameVisibilityVoter::kFrameVisibilityReason);
}
} // namespace
// static
const char FrameVisibilityVoter::kFrameVisibilityReason[] = "Frame visibility.";
FrameVisibilityVoter::FrameVisibilityVoter() = default;
FrameVisibilityVoter::~FrameVisibilityVoter() = default;
void FrameVisibilityVoter::SetVotingChannel(VotingChannel voting_channel) {
voting_channel_ = std::move(voting_channel);
}
void FrameVisibilityVoter::OnFrameNodeAdded(const FrameNode* frame_node) {
const Vote vote = GetVote2(frame_node->GetVisibility());
voting_channel_.SubmitVote(GetExecutionContext5(frame_node), vote);
}
void FrameVisibilityVoter::OnBeforeFrameNodeRemoved(
const FrameNode* frame_node) {
voting_channel_.InvalidateVote(GetExecutionContext5(frame_node));
}
void FrameVisibilityVoter::OnFrameVisibilityChanged(
const FrameNode* frame_node,
FrameNode::Visibility previous_value) {
const Vote new_vote = GetVote2(frame_node->GetVisibility());
// Nothing to change if the new priority is the same as the old one.
if (new_vote == GetVote2(previous_value))
return;
voting_channel_.ChangeVote(GetExecutionContext5(frame_node), new_vote);
}
} // namespace execution_context_priority
} // namespace performance_manager
|