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
|
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/performance_manager/public/scenarios/process_performance_scenarios.h"
#include <atomic>
#include "components/performance_manager/public/graph/process_node.h"
#include "components/performance_manager/scenario_api/performance_scenario_memory.h"
#include "components/performance_manager/scenarios/performance_scenario_data.h"
namespace performance_manager {
namespace {
using performance_scenarios::InputScenario;
using performance_scenarios::LoadingScenario;
using performance_scenarios::MatchingScenarioObserver;
using performance_scenarios::PerformanceScenarioObserver;
using performance_scenarios::ScenarioState;
const ScenarioState& GetScenarioStateForProcess(const ProcessNode* process) {
static constinit ScenarioState kDummyScenarioState;
const auto& data = PerformanceScenarioData::GetOrCreate(process);
return data.HasSharedState() ? data.shared_state().ReadOnlyRef()
: kDummyScenarioState;
}
} // namespace
LoadingScenario GetProcessLoadingScenario(const ProcessNode* process) {
return GetScenarioStateForProcess(process).loading.load(
std::memory_order_relaxed);
}
InputScenario GetProcessInputScenario(const ProcessNode* process) {
return GetScenarioStateForProcess(process).input.load(
std::memory_order_relaxed);
}
bool CurrentProcessScenariosMatch(
const ProcessNode* process,
performance_scenarios::ScenarioPattern pattern) {
return performance_scenarios::ScenariosMatch(
GetProcessLoadingScenario(process), GetProcessInputScenario(process),
pattern);
}
base::ObserverList<performance_scenarios::PerformanceScenarioObserver>&
GetScenarioObserversForProcess(const ProcessNode* process) {
return PerformanceScenarioData::GetOrCreate(process).observers();
}
base::ObserverList<performance_scenarios::MatchingScenarioObserver>&
GetMatchingScenarioObserversForProcess(const ProcessNode* process) {
return PerformanceScenarioData::GetOrCreate(process).matching_observers();
}
} // namespace performance_manager
|