| // 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 |