blob: 41a6be9c2ccd35e088813166abeb82fcae4c0e0b [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/execution_context/execution_context_impl.h"
#include "base/sequence_checker.h"
#include "components/performance_manager/graph/frame_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/execution_context/execution_context_registry.h"
#include "components/performance_manager/public/graph/graph.h"
#include "third_party/blink/public/common/tokens/tokens.h"
namespace performance_manager {
namespace execution_context {
// Declared in execution_context.h.
blink::ExecutionContextToken ToExecutionContextToken(
const blink::WorkerToken& token) {
if (token.Is<blink::DedicatedWorkerToken>()) {
return blink::ExecutionContextToken(
token.GetAs<blink::DedicatedWorkerToken>());
}
if (token.Is<blink::ServiceWorkerToken>()) {
return blink::ExecutionContextToken(
token.GetAs<blink::ServiceWorkerToken>());
}
if (token.Is<blink::SharedWorkerToken>()) {
return blink::ExecutionContextToken(
token.GetAs<blink::SharedWorkerToken>());
}
// Unfortunately there's no enum of input types, so no way to ensure that
// all types are handled at compile time. This at least ensures via the CQ
// that all types are handled.
NOTREACHED();
}
FrameExecutionContext::FrameExecutionContext(const FrameNodeImpl* frame_node)
: frame_node_(frame_node) {}
FrameExecutionContext::FrameExecutionContext(FrameExecutionContext&&) = default;
FrameExecutionContext& FrameExecutionContext::operator=(
FrameExecutionContext&&) = default;
FrameExecutionContext::~FrameExecutionContext() = default;
ExecutionContextType FrameExecutionContext::GetType() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return ExecutionContextType::kFrameNode;
}
blink::ExecutionContextToken FrameExecutionContext::GetToken() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return blink::ExecutionContextToken(frame_node_->GetFrameToken());
}
Graph* FrameExecutionContext::GetGraph() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return frame_node_->graph();
}
NodeState FrameExecutionContext::GetNodeState() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return frame_node_->GetNodeState();
}
const GURL& FrameExecutionContext::GetUrl() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return frame_node_->GetURL();
}
const ProcessNode* FrameExecutionContext::GetProcessNode() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return frame_node_->process_node();
}
const PriorityAndReason& FrameExecutionContext::GetPriorityAndReason() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return frame_node_->GetPriorityAndReason();
}
const FrameNode* FrameExecutionContext::GetFrameNode() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return frame_node_;
}
const WorkerNode* FrameExecutionContext::GetWorkerNode() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return nullptr;
}
WorkerExecutionContext::WorkerExecutionContext(
const WorkerNodeImpl* worker_node)
: worker_node_(worker_node) {}
WorkerExecutionContext::WorkerExecutionContext(WorkerExecutionContext&&) =
default;
WorkerExecutionContext& WorkerExecutionContext::operator=(
WorkerExecutionContext&&) = default;
WorkerExecutionContext::~WorkerExecutionContext() = default;
ExecutionContextType WorkerExecutionContext::GetType() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return ExecutionContextType::kWorkerNode;
}
blink::ExecutionContextToken WorkerExecutionContext::GetToken() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return ToExecutionContextToken(worker_node_->GetWorkerToken());
}
Graph* WorkerExecutionContext::GetGraph() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return worker_node_->graph();
}
NodeState WorkerExecutionContext::GetNodeState() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return worker_node_->GetNodeState();
}
const GURL& WorkerExecutionContext::GetUrl() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return worker_node_->GetURL();
}
const ProcessNode* WorkerExecutionContext::GetProcessNode() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return worker_node_->process_node();
}
const PriorityAndReason& WorkerExecutionContext::GetPriorityAndReason() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return worker_node_->GetPriorityAndReason();
}
const FrameNode* WorkerExecutionContext::GetFrameNode() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return nullptr;
}
const WorkerNode* WorkerExecutionContext::GetWorkerNode() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return worker_node_;
}
// Declared in execution_context.h.
// static
const ExecutionContext* ExecutionContext::From(const FrameNode* frame_node) {
return ExecutionContextRegistry::GetExecutionContextForFrameNode(frame_node);
}
// Declared in execution_context.h.
// static
const ExecutionContext* ExecutionContext::From(const WorkerNode* worker_node) {
return ExecutionContextRegistry::GetExecutionContextForWorkerNode(
worker_node);
}
} // namespace execution_context
} // namespace performance_manager