Avi Drissman | 8ba1bad | 2022-09-13 19:22:36 | [diff] [blame] | 1 | // Copyright 2020 The Chromium Authors |
Sebastien Marchand | 1a8a708c | 2020-12-17 16:00:18 | [diff] [blame] | 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/public/freezing/freezing.h" |
| 6 | |
François Doray | f0c7e07 | 2024-04-03 20:41:45 | [diff] [blame] | 7 | #include "base/check_deref.h" |
| 8 | #include "components/performance_manager/freezing/freezing_policy.h" |
Sebastien Marchand | 1a8a708c | 2020-12-17 16:00:18 | [diff] [blame] | 9 | #include "components/performance_manager/public/performance_manager.h" |
Sebastien Marchand | 1a8a708c | 2020-12-17 16:00:18 | [diff] [blame] | 10 | |
François Doray | f0c7e07 | 2024-04-03 20:41:45 | [diff] [blame] | 11 | namespace performance_manager::freezing { |
Sebastien Marchand | 1a8a708c | 2020-12-17 16:00:18 | [diff] [blame] | 12 | |
François Doray | f0c7e07 | 2024-04-03 20:41:45 | [diff] [blame] | 13 | FreezingVote::FreezingVote(content::WebContents* web_contents) |
| 14 | : page_node_( |
| 15 | PerformanceManager::GetPrimaryPageNodeForWebContents(web_contents)) { |
Patrick Monette | 48df50471 | 2025-02-21 14:47:23 | [diff] [blame] | 16 | CHECK(page_node_); |
| 17 | // Balanced with `RemoveFreezeVote()` in destructor. |
| 18 | auto* freezing_policy = |
| 19 | PerformanceManager::GetGraph()->GetRegisteredObjectAs<FreezingPolicy>(); |
| 20 | CHECK_DEREF(freezing_policy).AddFreezeVote(page_node_.get()); |
Sebastien Marchand | 1a8a708c | 2020-12-17 16:00:18 | [diff] [blame] | 21 | } |
| 22 | |
François Doray | f0c7e07 | 2024-04-03 20:41:45 | [diff] [blame] | 23 | FreezingVote::~FreezingVote() { |
Patrick Monette | 48df50471 | 2025-02-21 14:47:23 | [diff] [blame] | 24 | if (!page_node_) { |
| 25 | // No-op if the `PageNode` no longer exists. |
| 26 | return; |
| 27 | } |
François Doray | f0c7e07 | 2024-04-03 20:41:45 | [diff] [blame] | 28 | |
Patrick Monette | 48df50471 | 2025-02-21 14:47:23 | [diff] [blame] | 29 | auto* freezing_policy = |
| 30 | PerformanceManager::GetGraph()->GetRegisteredObjectAs<FreezingPolicy>(); |
| 31 | CHECK_DEREF(freezing_policy).RemoveFreezeVote(page_node_.get()); |
Patrick Monette | 490a96da | 2021-02-18 02:43:46 | [diff] [blame] | 32 | } |
| 33 | |
François Doray | 455d119 | 2025-05-14 14:42:53 | [diff] [blame] | 34 | CanFreezeDetails::CanFreezeDetails() = default; |
| 35 | CanFreezeDetails::~CanFreezeDetails() = default; |
| 36 | CanFreezeDetails::CanFreezeDetails(CanFreezeDetails&&) = default; |
| 37 | CanFreezeDetails& CanFreezeDetails::operator=(CanFreezeDetails&&) = default; |
| 38 | |
| 39 | CanFreezeDetails GetCanFreezeDetailsForPageNode(const PageNode* page_node) { |
François Doray | 947069c | 2024-11-06 22:39:09 | [diff] [blame] | 40 | auto* freezing_policy = |
| 41 | performance_manager::FreezingPolicy::GetFromGraph(page_node->GetGraph()); |
| 42 | CHECK(freezing_policy); |
François Doray | 455d119 | 2025-05-14 14:42:53 | [diff] [blame] | 43 | return freezing_policy->GetCanFreezeDetails(page_node); |
François Doray | 947069c | 2024-11-06 22:39:09 | [diff] [blame] | 44 | } |
| 45 | |
François Doray | a5cd7ac | 2024-10-21 20:24:02 | [diff] [blame] | 46 | Discarder::Discarder() = default; |
| 47 | Discarder::~Discarder() = default; |
| 48 | |
François Doray | f0c7e07 | 2024-04-03 20:41:45 | [diff] [blame] | 49 | } // namespace performance_manager::freezing |