// Copyright 2019 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_PERFORMANCE_MANAGER_PUBLIC_GRAPH_PROCESS_NODE_H_ #define COMPONENTS_PERFORMANCE_MANAGER_PUBLIC_GRAPH_PROCESS_NODE_H_ #include "base/containers/enum_set.h" #include "base/containers/flat_set.h" #include "base/observer_list_types.h" #include "base/process/process.h" #include "base/task/task_traits.h" #include "components/performance_manager/public/graph/node.h" #include "components/performance_manager/public/graph/node_set_view.h" #include "components/performance_manager/public/render_process_host_id.h" #include "components/performance_manager/public/resource_attribution/process_context.h" #include "content/public/common/process_type.h" namespace base { class Process; } // namespace base namespace performance_manager { class FrameNode; class WorkerNode; class ProcessNodeObserver; class RenderProcessHostProxy; class BrowserChildProcessHostProxy; // A process node follows the lifetime of a RenderProcessHost. // It may reference zero or one processes at a time, but during its lifetime, it // may reference more than one process. This can happen if the associated // renderer crashes, and an associated frame is then reloaded or re-navigated. // The state of the process node goes through: // 1. Created, no PID. // 2. Process started, have PID - in the case where the associated render // process fails to start, this state may not occur. // 3. Process died or failed to start, have exit status. // 4. Back to 2. // // It is only valid to access this object on the sequence of the graph that owns // it. class ProcessNode : public TypedNode<ProcessNode> { … }; // Pure virtual observer interface. Derive from this if you want to be forced to // implement the entire interface. class ProcessNodeObserver : public base::CheckedObserver { … }; // Default implementation of observer that provides dummy versions of each // function. Derive from this if you only need to implement a few of the // functions. class ProcessNode::ObserverDefaultImpl : public ProcessNodeObserver { … }; } // namespace performance_manager #endif // COMPONENTS_PERFORMANCE_MANAGER_PUBLIC_GRAPH_PROCESS_NODE_H_