blob: 3b700b82c5282a12516bb6434202656d9d452b26 [file] [log] [blame]
// Copyright 2020 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/embedder/graph_features.h"
#include <memory>
#include "build/build_config.h"
#include "components/performance_manager/decorators/frame_input_state_decorator.h"
#include "components/performance_manager/decorators/frame_visibility_decorator.h"
#include "components/performance_manager/decorators/important_frame_decorator.h"
#include "components/performance_manager/decorators/page_aggregator.h"
#include "components/performance_manager/decorators/page_load_tracker_decorator.h"
#include "components/performance_manager/decorators/process_hosted_content_types_aggregator.h"
#include "components/performance_manager/decorators/process_priority_aggregator.h"
#include "components/performance_manager/freezing/frozen_frame_aggregator.h"
#include "components/performance_manager/graph/frame_node_impl_describer.h"
#include "components/performance_manager/graph/page_node_impl_describer.h"
#include "components/performance_manager/graph/process_node_impl_describer.h"
#include "components/performance_manager/graph/worker_node_impl_describer.h"
#include "components/performance_manager/public/decorators/site_data_recorder.h"
#include "components/performance_manager/public/decorators/tab_page_decorator.h"
#include "components/performance_manager/public/execution_context_priority/priority_voting_system.h"
#include "components/performance_manager/public/graph/graph.h"
#include "components/performance_manager/public/metrics/metrics_collector.h"
#include "components/performance_manager/resource_attribution/query_scheduler.h"
#include "components/performance_manager/scenarios/input_scenario_observer.h"
#include "components/performance_manager/scenarios/loading_scenario_observer.h"
#include "components/performance_manager/v8_memory/v8_context_tracker.h"
namespace performance_manager {
namespace {
template <typename ObjectType>
void Install(Graph* graph) {
graph->PassToGraph(std::make_unique<ObjectType>());
}
} // namespace
void GraphFeatures::ConfigureGraph(Graph* graph) const {
if (flags_.frame_visibility_decorator) {
Install<FrameVisibilityDecorator>(graph);
}
if (flags_.important_frame_decorator) {
Install<ImportantFrameDecorator>(graph);
}
if (flags_.metrics_collector) {
Install<MetricsCollector>(graph);
}
if (flags_.node_impl_describers) {
Install<FrameNodeImplDescriber>(graph);
Install<PageNodeImplDescriber>(graph);
Install<ProcessNodeImplDescriber>(graph);
Install<WorkerNodeImplDescriber>(graph);
}
if (flags_.page_load_tracker_decorator) {
Install<PageLoadTrackerDecorator>(graph);
}
if (flags_.priority_tracking) {
// The PriorityVotingSystem depends on FrameVisibilityDecorator and
// ImportantFrameDecorator and so must be installed after.
Install<execution_context_priority::PriorityVotingSystem>(graph);
Install<ProcessPriorityAggregator>(graph);
}
if (flags_.process_hosted_content_types_aggregator) {
Install<ProcessHostedContentTypesAggregator>(graph);
}
if (flags_.page_aggregator) {
Install<PageAggregator>(graph);
}
if (flags_.frozen_frame_aggregator) {
Install<FrozenFrameAggregator>(graph);
}
if (flags_.performance_scenarios) {
Install<LoadingScenarioObserver>(graph);
Install<FrameInputStateDecorator>(graph);
Install<InputScenarioObserver>(graph);
}
if (flags_.resource_attribution_scheduler) {
Install<resource_attribution::internal::QueryScheduler>(graph);
}
if (flags_.site_data_recorder) {
Install<SiteDataRecorder>(graph);
}
if (flags_.tab_page_decorator) {
Install<TabPageDecorator>(graph);
}
if (flags_.v8_context_tracker) {
Install<v8_memory::V8ContextTracker>(graph);
}
}
} // namespace performance_manager