blob: 8c23254426f575231817a775c3b72fa302c20e5c [file] [log] [blame]
Avi Drissman8ba1bad2022-09-13 19:22:361// Copyright 2020 The Chromium Authors
Sebastien Marchand1a8a708c2020-12-17 16:00:182// 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 Dorayf0c7e072024-04-03 20:41:457#include "base/check_deref.h"
8#include "components/performance_manager/freezing/freezing_policy.h"
Sebastien Marchand1a8a708c2020-12-17 16:00:189#include "components/performance_manager/public/performance_manager.h"
Sebastien Marchand1a8a708c2020-12-17 16:00:1810
François Dorayf0c7e072024-04-03 20:41:4511namespace performance_manager::freezing {
Sebastien Marchand1a8a708c2020-12-17 16:00:1812
François Dorayf0c7e072024-04-03 20:41:4513FreezingVote::FreezingVote(content::WebContents* web_contents)
14 : page_node_(
15 PerformanceManager::GetPrimaryPageNodeForWebContents(web_contents)) {
Patrick Monette48df504712025-02-21 14:47:2316 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 Marchand1a8a708c2020-12-17 16:00:1821}
22
François Dorayf0c7e072024-04-03 20:41:4523FreezingVote::~FreezingVote() {
Patrick Monette48df504712025-02-21 14:47:2324 if (!page_node_) {
25 // No-op if the `PageNode` no longer exists.
26 return;
27 }
François Dorayf0c7e072024-04-03 20:41:4528
Patrick Monette48df504712025-02-21 14:47:2329 auto* freezing_policy =
30 PerformanceManager::GetGraph()->GetRegisteredObjectAs<FreezingPolicy>();
31 CHECK_DEREF(freezing_policy).RemoveFreezeVote(page_node_.get());
Patrick Monette490a96da2021-02-18 02:43:4632}
33
François Doray455d1192025-05-14 14:42:5334CanFreezeDetails::CanFreezeDetails() = default;
35CanFreezeDetails::~CanFreezeDetails() = default;
36CanFreezeDetails::CanFreezeDetails(CanFreezeDetails&&) = default;
37CanFreezeDetails& CanFreezeDetails::operator=(CanFreezeDetails&&) = default;
38
39CanFreezeDetails GetCanFreezeDetailsForPageNode(const PageNode* page_node) {
François Doray947069c2024-11-06 22:39:0940 auto* freezing_policy =
41 performance_manager::FreezingPolicy::GetFromGraph(page_node->GetGraph());
42 CHECK(freezing_policy);
François Doray455d1192025-05-14 14:42:5343 return freezing_policy->GetCanFreezeDetails(page_node);
François Doray947069c2024-11-06 22:39:0944}
45
François Doraya5cd7ac2024-10-21 20:24:0246Discarder::Discarder() = default;
47Discarder::~Discarder() = default;
48
François Dorayf0c7e072024-04-03 20:41:4549} // namespace performance_manager::freezing