#include "components/performance_manager/graph/graph_impl.h"
#include <string_view>
#include <utility>
#include "base/check_op.h"
#include "base/containers/contains.h"
#include "base/containers/flat_map.h"
#include "base/containers/flat_set.h"
#include "base/containers/map_util.h"
#include "base/functional/bind.h"
#include "base/functional/callback_helpers.h"
#include "base/notreached.h"
#include "base/numerics/safe_conversions.h"
#include "components/performance_manager/graph/frame_node_impl.h"
#include "components/performance_manager/graph/node_base.h"
#include "components/performance_manager/graph/page_node_impl.h"
#include "components/performance_manager/graph/process_node_impl.h"
#include "components/performance_manager/graph/system_node_impl.h"
#include "components/performance_manager/graph/worker_node_impl.h"
#include "components/performance_manager/public/graph/node_data_describer.h"
#include "components/performance_manager/public/graph/node_data_describer_registry.h"
namespace ukm {
class UkmEntryBuilder;
}
namespace performance_manager {
namespace {
const uintptr_t kGraphImplType = …;
base::Value::Dict DescribeNodeWithDescriber(const NodeDataDescriber& describer,
const Node* node) { … }
class NodeDataDescriberRegistryImpl : public NodeDataDescriberRegistry { … };
NodeDataDescriberRegistryImpl::~NodeDataDescriberRegistryImpl() { … }
void NodeDataDescriberRegistryImpl::RegisterDescriber(
const NodeDataDescriber* describer,
std::string_view name) { … }
void NodeDataDescriberRegistryImpl::UnregisterDescriber(
const NodeDataDescriber* describer) { … }
base::Value::Dict NodeDataDescriberRegistryImpl::DescribeNodeData(
const Node* node) const { … }
}
GraphImpl::GraphImpl() { … }
GraphImpl::~GraphImpl() { … }
void GraphImpl::SetUp() { … }
void GraphImpl::TearDown() { … }
void GraphImpl::AddFrameNodeObserver(FrameNodeObserver* observer) { … }
void GraphImpl::AddPageNodeObserver(PageNodeObserver* observer) { … }
void GraphImpl::AddProcessNodeObserver(ProcessNodeObserver* observer) { … }
void GraphImpl::AddSystemNodeObserver(SystemNodeObserver* observer) { … }
void GraphImpl::AddWorkerNodeObserver(WorkerNodeObserver* observer) { … }
void GraphImpl::RemoveFrameNodeObserver(FrameNodeObserver* observer) { … }
void GraphImpl::RemovePageNodeObserver(PageNodeObserver* observer) { … }
void GraphImpl::RemoveProcessNodeObserver(ProcessNodeObserver* observer) { … }
void GraphImpl::RemoveSystemNodeObserver(SystemNodeObserver* observer) { … }
void GraphImpl::RemoveWorkerNodeObserver(WorkerNodeObserver* observer) { … }
void GraphImpl::PassToGraphImpl(std::unique_ptr<GraphOwned> graph_owned) { … }
std::unique_ptr<GraphOwned> GraphImpl::TakeFromGraph(GraphOwned* graph_owned) { … }
void GraphImpl::RegisterObject(GraphRegistered* object) { … }
void GraphImpl::UnregisterObject(GraphRegistered* object) { … }
const SystemNode* GraphImpl::GetSystemNode() const { … }
Graph::NodeSetView<const ProcessNode*> GraphImpl::GetAllProcessNodes() const { … }
Graph::NodeSetView<const FrameNode*> GraphImpl::GetAllFrameNodes() const { … }
Graph::NodeSetView<const PageNode*> GraphImpl::GetAllPageNodes() const { … }
Graph::NodeSetView<const WorkerNode*> GraphImpl::GetAllWorkerNodes() const { … }
bool GraphImpl::HasOnlySystemNode() const { … }
ukm::UkmRecorder* GraphImpl::GetUkmRecorder() const { … }
NodeDataDescriberRegistry* GraphImpl::GetNodeDataDescriberRegistry() const { … }
uintptr_t GraphImpl::GetImplType() const { … }
const void* GraphImpl::GetImpl() const { … }
#if DCHECK_IS_ON()
bool GraphImpl::IsOnGraphSequence() const { … }
#endif
void GraphImpl::AddInitializingFrameNodeObserver(
InitializingFrameNodeObserver* frame_node_observer) { … }
void GraphImpl::RemoveInitializingFrameNodeObserver(
InitializingFrameNodeObserver* frame_node_observer) { … }
GraphRegistered* GraphImpl::GetRegisteredObject(uintptr_t type_id) { … }
GraphImpl* GraphImpl::FromGraph(const Graph* graph) { … }
bool GraphImpl::NodeInGraph(const NodeBase* node) const { … }
ProcessNodeImpl* GraphImpl::GetProcessNodeByPid(base::ProcessId pid) { … }
FrameNodeImpl* GraphImpl::GetFrameNodeById(
RenderProcessHostId render_process_id,
int render_frame_id) { … }
Graph::NodeSetView<ProcessNodeImpl*> GraphImpl::GetAllProcessNodeImpls() const { … }
Graph::NodeSetView<FrameNodeImpl*> GraphImpl::GetAllFrameNodeImpls() const { … }
Graph::NodeSetView<PageNodeImpl*> GraphImpl::GetAllPageNodeImpls() const { … }
Graph::NodeSetView<WorkerNodeImpl*> GraphImpl::GetAllWorkerNodeImpls() const { … }
void GraphImpl::AddNewNode(NodeBase* new_node) { … }
void GraphImpl::RemoveNode(NodeBase* node) { … }
void GraphImpl::NotifyFrameNodeInitializing(const FrameNode* frame_node) { … }
void GraphImpl::NotifyFrameNodeTearingDown(const FrameNode* frame_node) { … }
size_t GraphImpl::NodeDataDescriberCountForTesting() const { … }
Graph::NodeSet& GraphImpl::GetNodesOfType(NodeTypeEnum node_type) { … }
const Graph::NodeSet& GraphImpl::GetNodesOfType(NodeTypeEnum node_type) const { … }
NodeState GraphImpl::GetNodeState(const NodeBase* node) const { … }
template <>
const GraphImpl::ObserverList<FrameNodeObserver>& GraphImpl::GetObservers()
const { … }
template <>
const GraphImpl::ObserverList<PageNodeObserver>& GraphImpl::GetObservers()
const { … }
template <>
const GraphImpl::ObserverList<ProcessNodeObserver>& GraphImpl::GetObservers()
const { … }
template <>
const GraphImpl::ObserverList<SystemNodeObserver>& GraphImpl::GetObservers()
const { … }
template <>
const GraphImpl::ObserverList<WorkerNodeObserver>& GraphImpl::GetObservers()
const { … }
GraphImpl::ProcessAndFrameId::ProcessAndFrameId(
RenderProcessHostId render_process_id,
int render_frame_id)
: … { … }
bool GraphImpl::ProcessAndFrameId::operator<(
const ProcessAndFrameId& other) const { … }
GraphImpl::ProcessAndFrameId::~ProcessAndFrameId() = default;
GraphImpl::ProcessAndFrameId::ProcessAndFrameId(
const GraphImpl::ProcessAndFrameId& other) = default;
GraphImpl::ProcessAndFrameId& GraphImpl::ProcessAndFrameId::operator=(
const GraphImpl::ProcessAndFrameId& other) = default;
void GraphImpl::DispatchNodeAddedNotifications(NodeBase* node) { … }
void GraphImpl::DispatchNodeRemovedNotifications(NodeBase* node) { … }
int64_t GraphImpl::GetNextNodeSerializationId() { … }
void GraphImpl::BeforeProcessPidChange(ProcessNodeImpl* process,
base::ProcessId new_pid) { … }
void GraphImpl::RegisterFrameNodeForId(RenderProcessHostId render_process_id,
int render_frame_id,
FrameNodeImpl* frame_node) { … }
void GraphImpl::UnregisterFrameNodeForId(RenderProcessHostId render_process_id,
int render_frame_id,
FrameNodeImpl* frame_node) { … }
void GraphImpl::CreateSystemNode() { … }
void GraphImpl::ReleaseSystemNode() { … }
}