#include "components/performance_manager/graph/frame_node_impl.h"
#include <utility>
#include "base/containers/contains.h"
#include "base/dcheck_is_on.h"
#include "base/functional/bind.h"
#include "base/memory/raw_ptr.h"
#include "components/performance_manager/graph/graph_impl.h"
#include "components/performance_manager/graph/initializing_frame_node_observer.h"
#include "components/performance_manager/graph/page_node_impl.h"
#include "components/performance_manager/graph/process_node_impl.h"
#include "components/performance_manager/graph/worker_node_impl.h"
#include "components/performance_manager/public/v8_memory/web_memory.h"
#include "content/public/browser/browser_thread.h"
namespace performance_manager {
constexpr char FrameNodeImpl::kDefaultPriorityReason[] = …;
PriorityAndReason;
FrameNodeImpl::FrameNodeImpl(
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)
: … { … }
FrameNodeImpl::~FrameNodeImpl() { … }
void FrameNodeImpl::Bind(
mojo::PendingReceiver<mojom::DocumentCoordinationUnit> receiver) { … }
void FrameNodeImpl::SetNetworkAlmostIdle() { … }
void FrameNodeImpl::SetLifecycleState(mojom::LifecycleState state) { … }
void FrameNodeImpl::SetHasNonEmptyBeforeUnload(bool has_nonempty_beforeunload) { … }
void FrameNodeImpl::SetIsAdFrame(bool is_ad_frame) { … }
void FrameNodeImpl::SetHadFormInteraction() { … }
void FrameNodeImpl::SetHadUserEdits() { … }
void FrameNodeImpl::OnStartedUsingWebRTC() { … }
void FrameNodeImpl::OnStoppedUsingWebRTC() { … }
void FrameNodeImpl::OnNonPersistentNotificationCreated() { … }
void FrameNodeImpl::OnFirstContentfulPaint(
base::TimeDelta time_since_navigation_start) { … }
void FrameNodeImpl::OnWebMemoryMeasurementRequested(
mojom::WebMemoryMeasurement::Mode mode,
OnWebMemoryMeasurementRequestedCallback callback) { … }
const blink::LocalFrameToken& FrameNodeImpl::GetFrameToken() const { … }
content::BrowsingInstanceId FrameNodeImpl::GetBrowsingInstanceId() const { … }
content::SiteInstanceGroupId FrameNodeImpl::GetSiteInstanceGroupId() const { … }
resource_attribution::FrameContext FrameNodeImpl::GetResourceContext() const { … }
bool FrameNodeImpl::IsMainFrame() const { … }
FrameNodeImpl::LifecycleState FrameNodeImpl::GetLifecycleState() const { … }
bool FrameNodeImpl::HasNonemptyBeforeUnload() const { … }
const GURL& FrameNodeImpl::GetURL() const { … }
const std::optional<url::Origin>& FrameNodeImpl::GetOrigin() const { … }
bool FrameNodeImpl::IsCurrent() const { … }
const PriorityAndReason& FrameNodeImpl::GetPriorityAndReason() const { … }
bool FrameNodeImpl::GetNetworkAlmostIdle() const { … }
bool FrameNodeImpl::IsAdFrame() const { … }
bool FrameNodeImpl::IsHoldingWebLock() const { … }
bool FrameNodeImpl::IsHoldingIndexedDBLock() const { … }
bool FrameNodeImpl::UsesWebRTC() const { … }
bool FrameNodeImpl::HadUserActivation() const { … }
bool FrameNodeImpl::HadFormInteraction() const { … }
bool FrameNodeImpl::HadUserEdits() const { … }
bool FrameNodeImpl::IsAudible() const { … }
bool FrameNodeImpl::IsCapturingMediaStream() const { … }
std::optional<ViewportIntersectionState>
FrameNodeImpl::GetViewportIntersectionState() const { … }
FrameNode::Visibility FrameNodeImpl::GetVisibility() const { … }
const RenderFrameHostProxy& FrameNodeImpl::GetRenderFrameHostProxy() const { … }
uint64_t FrameNodeImpl::GetResidentSetKbEstimate() const { … }
uint64_t FrameNodeImpl::GetPrivateFootprintKbEstimate() const { … }
FrameNodeImpl* FrameNodeImpl::parent_frame_node() const { … }
FrameNodeImpl* FrameNodeImpl::parent_or_outer_document_or_embedder() const { … }
PageNodeImpl* FrameNodeImpl::page_node() const { … }
ProcessNodeImpl* FrameNodeImpl::process_node() const { … }
int FrameNodeImpl::render_frame_id() const { … }
FrameNode::NodeSetView<FrameNodeImpl*> FrameNodeImpl::child_frame_nodes()
const { … }
FrameNode::NodeSetView<PageNodeImpl*> FrameNodeImpl::opened_page_nodes() const { … }
FrameNode::NodeSetView<PageNodeImpl*> FrameNodeImpl::embedded_page_nodes()
const { … }
FrameNode::NodeSetView<WorkerNodeImpl*> FrameNodeImpl::child_worker_nodes()
const { … }
void FrameNodeImpl::UpdateCurrentFrame(FrameNodeImpl* previous_frame_node,
FrameNodeImpl* current_frame_node,
GraphImpl* graph) { … }
void FrameNodeImpl::SetHadUserActivation() { … }
void FrameNodeImpl::SetIsHoldingWebLock(bool is_holding_weblock) { … }
void FrameNodeImpl::SetIsHoldingIndexedDBLock(bool is_holding_indexeddb_lock) { … }
void FrameNodeImpl::SetIsAudible(bool is_audible) { … }
void FrameNodeImpl::SetIsCapturingMediaStream(bool is_capturing_media_stream) { … }
void FrameNodeImpl::SetViewportIntersectionState(
ViewportIntersectionState viewport_intersection_state) { … }
void FrameNodeImpl::SetInitialVisibility(Visibility visibility) { … }
void FrameNodeImpl::SetVisibility(Visibility visibility) { … }
void FrameNodeImpl::SetResidentSetKbEstimate(uint64_t rss_estimate) { … }
void FrameNodeImpl::SetPrivateFootprintKbEstimate(
uint64_t private_footprint_estimate) { … }
void FrameNodeImpl::OnNavigationCommitted(
GURL url,
url::Origin origin,
bool same_document,
bool is_served_from_back_forward_cache) { … }
void FrameNodeImpl::AddChildWorker(WorkerNodeImpl* worker_node) { … }
void FrameNodeImpl::RemoveChildWorker(WorkerNodeImpl* worker_node) { … }
void FrameNodeImpl::SetPriorityAndReason(
const PriorityAndReason& priority_and_reason) { … }
base::WeakPtr<FrameNodeImpl> FrameNodeImpl::GetWeakPtrOnUIThread() { … }
base::WeakPtr<FrameNodeImpl> FrameNodeImpl::GetWeakPtr() { … }
void FrameNodeImpl::AddOpenedPage(base::PassKey<PageNodeImpl>,
PageNodeImpl* page_node) { … }
void FrameNodeImpl::RemoveOpenedPage(base::PassKey<PageNodeImpl>,
PageNodeImpl* page_node) { … }
void FrameNodeImpl::AddEmbeddedPage(base::PassKey<PageNodeImpl>,
PageNodeImpl* page_node) { … }
void FrameNodeImpl::RemoveEmbeddedPage(base::PassKey<PageNodeImpl>,
PageNodeImpl* page_node) { … }
const FrameNode* FrameNodeImpl::GetParentFrameNode() const { … }
const FrameNode* FrameNodeImpl::GetParentOrOuterDocumentOrEmbedder() const { … }
const PageNode* FrameNodeImpl::GetPageNode() const { … }
const ProcessNode* FrameNodeImpl::GetProcessNode() const { … }
FrameNode::NodeSetView<const FrameNode*> FrameNodeImpl::GetChildFrameNodes()
const { … }
FrameNode::NodeSetView<const PageNode*> FrameNodeImpl::GetOpenedPageNodes()
const { … }
FrameNode::NodeSetView<const PageNode*> FrameNodeImpl::GetEmbeddedPageNodes()
const { … }
FrameNode::NodeSetView<const WorkerNode*> FrameNodeImpl::GetChildWorkerNodes()
const { … }
void FrameNodeImpl::AddChildFrame(FrameNodeImpl* child_frame_node) { … }
void FrameNodeImpl::RemoveChildFrame(FrameNodeImpl* child_frame_node) { … }
void FrameNodeImpl::OnJoiningGraph() { … }
void FrameNodeImpl::OnBeforeLeavingGraph() { … }
void FrameNodeImpl::RemoveNodeAttachedData() { … }
void FrameNodeImpl::SeverPageRelationshipsAndMaybeReparent() { … }
FrameNodeImpl* FrameNodeImpl::GetFrameTreeRoot() const { … }
bool FrameNodeImpl::HasFrameNodeInAncestors(FrameNodeImpl* frame_node) const { … }
bool FrameNodeImpl::HasFrameNodeInDescendants(FrameNodeImpl* frame_node) const { … }
bool FrameNodeImpl::HasFrameNodeInTree(FrameNodeImpl* frame_node) const { … }
bool FrameNodeImpl::SetIsCurrent(bool is_current) { … }
FrameNodeImpl::DocumentProperties::DocumentProperties() = default;
FrameNodeImpl::DocumentProperties::~DocumentProperties() = default;
void FrameNodeImpl::DocumentProperties::Reset(FrameNodeImpl* frame_node,
GURL url_in,
url::Origin origin_in) { … }
}