#include "components/performance_manager/performance_manager_impl.h"
#include <atomic>
#include <memory>
#include <utility>
#include "base/check_op.h"
#include "base/containers/flat_set.h"
#include "base/feature_list.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/location.h"
#include "base/memory/ptr_util.h"
#include "base/memory/scoped_refptr.h"
#include "base/no_destructor.h"
#include "base/notreached.h"
#include "base/task/delayed_task_handle.h"
#include "base/task/lazy_thread_pool_task_runner.h"
#include "base/task/sequenced_task_runner.h"
#include "base/task/single_thread_task_runner_thread_mode.h"
#include "base/task/task_traits.h"
#include "base/time/time.h"
#include "components/performance_manager/graph/frame_node_impl.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/features.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/web_contents.h"
#include "url/origin.h"
namespace performance_manager {
namespace {
PerformanceManagerImpl* g_performance_manager = …;
bool g_pm_is_available = …;
constexpr base::TaskPriority kPmTaskPriority = …;
constexpr base::TaskTraits kPMTaskTraits = …;
scoped_refptr<base::SequencedTaskRunner> GetUITaskRunner() { … }
class TaskRunnerWithSynchronousRunOnUIThread
: public base::SequencedTaskRunner { … };
}
bool PerformanceManager::IsAvailable() { … }
PerformanceManagerImpl::~PerformanceManagerImpl() { … }
void PerformanceManagerImpl::CallOnGraphImpl(const base::Location& from_here,
base::OnceClosure callback) { … }
void PerformanceManagerImpl::CallOnGraphImpl(const base::Location& from_here,
GraphImplCallback callback) { … }
std::unique_ptr<PerformanceManagerImpl> PerformanceManagerImpl::Create(
GraphImplCallback on_start) { … }
void PerformanceManagerImpl::Destroy(
std::unique_ptr<PerformanceManager> instance) { … }
std::unique_ptr<FrameNodeImpl> PerformanceManagerImpl::CreateFrameNode(
ProcessNodeImpl* process_node,
PageNodeImpl* page_node,
FrameNodeImpl* parent_frame_node,
FrameNodeImpl* outer_document_for_fenced_frame,
int render_frame_id,
const blink::LocalFrameToken& frame_token,
content::BrowsingInstanceId browsing_instance_id,
content::SiteInstanceGroupId site_instance_group_id,
bool is_current,
FrameNodeCreationCallback creation_callback) { … }
std::unique_ptr<PageNodeImpl> PerformanceManagerImpl::CreatePageNode(
base::WeakPtr<content::WebContents> web_contents,
const std::string& browser_context_id,
const GURL& visible_url,
PagePropertyFlags initial_property_flags,
base::TimeTicks visibility_change_time) { … }
std::unique_ptr<ProcessNodeImpl> PerformanceManagerImpl::CreateProcessNode(
BrowserProcessNodeTag tag) { … }
std::unique_ptr<ProcessNodeImpl> PerformanceManagerImpl::CreateProcessNode(
RenderProcessHostProxy render_process_host_proxy,
base::TaskPriority priority) { … }
std::unique_ptr<ProcessNodeImpl> PerformanceManagerImpl::CreateProcessNode(
content::ProcessType process_type,
BrowserChildProcessHostProxy browser_child_process_host_proxy) { … }
std::unique_ptr<WorkerNodeImpl> PerformanceManagerImpl::CreateWorkerNode(
const std::string& browser_context_id,
WorkerNode::WorkerType worker_type,
ProcessNodeImpl* process_node,
const blink::WorkerToken& worker_token,
const url::Origin& origin) { … }
void PerformanceManagerImpl::DeleteNode(std::unique_ptr<NodeBase> node) { … }
void PerformanceManagerImpl::BatchDeleteNodes(
std::vector<std::unique_ptr<NodeBase>> nodes) { … }
bool PerformanceManagerImpl::OnPMTaskRunnerForTesting() { … }
void PerformanceManagerImpl::SetOnDestroyedCallbackForTesting(
base::OnceClosure callback) { … }
PerformanceManagerImpl::PerformanceManagerImpl() { … }
scoped_refptr<base::SequencedTaskRunner>
PerformanceManagerImpl::GetTaskRunner() { … }
PerformanceManagerImpl* PerformanceManagerImpl::GetInstance() { … }
namespace {
template <typename NodeType>
void AddNodeAndInvokeCreationCallback(
base::OnceCallback<void(NodeType*)> callback,
NodeType* node,
GraphImpl* graph) { … }
}
template <typename NodeType, typename... Args>
std::unique_ptr<NodeType> PerformanceManagerImpl::CreateNodeImpl(
base::OnceCallback<void(NodeType*)> creation_callback,
Args&&... constructor_args) { … }
void PerformanceManagerImpl::DeleteNodeImpl(NodeBase* node_ptr,
GraphImpl* graph) { … }
namespace {
void RemoveFrameAndChildrenFromGraph(FrameNodeImpl* frame_node,
GraphImpl* graph) { … }
}
void PerformanceManagerImpl::BatchDeleteNodesImpl(
std::vector<std::unique_ptr<NodeBase>>* nodes_ptr,
GraphImpl* graph) { … }
void PerformanceManagerImpl::OnStartImpl(GraphImplCallback on_start) { … }
void PerformanceManagerImpl::RunCallbackWithGraphImpl(
GraphImplCallback graph_callback) { … }
void PerformanceManagerImpl::RunCallbackWithGraph(
GraphCallback graph_callback) { … }
void PerformanceManagerImpl::SetOnDestroyedCallbackImpl(
base::OnceClosure callback) { … }
}