// 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. // Internal data structures used by V8ContextTracker. These are only exposed in // a header for testing. Everything in this header lives in an "internal" // namespace so as not to pollute the "v8_memory", which houses the actual // consumer API. #ifndef COMPONENTS_PERFORMANCE_MANAGER_V8_MEMORY_V8_CONTEXT_TRACKER_INTERNAL_H_ #define COMPONENTS_PERFORMANCE_MANAGER_V8_MEMORY_V8_CONTEXT_TRACKER_INTERNAL_H_ #include <memory> #include <set> #include "base/containers/linked_list.h" #include "base/memory/raw_ptr.h" #include "base/types/pass_key.h" #include "components/performance_manager/graph/process_node_impl.h" #include "components/performance_manager/public/graph/node_attached_data.h" #include "components/performance_manager/public/mojom/v8_contexts.mojom.h" #include "components/performance_manager/v8_memory/v8_context_tracker.h" #include "components/performance_manager/v8_memory/v8_context_tracker_helpers.h" #include "third_party/blink/public/common/tokens/tokens.h" namespace performance_manager { namespace v8_memory { namespace internal { ExecutionContextState; V8ContextState; // Forward declarations. class ExecutionContextData; class ProcessData; class RemoteFrameData; class V8ContextData; class V8ContextTrackerDataStore; // A comparator for "Data" objects that compares by token. template <typename DataType, typename TokenType> struct TokenComparator { … }; //////////////////////////////////////////////////////////////////////////////// // ExecutionContextData declaration: // Internal wrapper of ExecutionContextState. Augments with additional data // needed for the implementation. Since these objects also need to be tracked // per-process, they are kept in a process-associated doubly-linked list. class ExecutionContextData : public base::LinkNode<ExecutionContextData>, public ExecutionContextState { … }; //////////////////////////////////////////////////////////////////////////////// // RemoteFrameData declaration: // Represents data about an ExecutionCOntext from the point of view of the // parent frame that owns it. class RemoteFrameData : public base::LinkNode<RemoteFrameData> { … }; //////////////////////////////////////////////////////////////////////////////// // V8ContextData declaration: // Internal wrapper of V8ContextState. Augments with additional data needed for // the implementation. class V8ContextData : public base::LinkNode<V8ContextData>, public V8ContextState { … }; //////////////////////////////////////////////////////////////////////////////// // ProcessData declaration: class ProcessData : public ExternalNodeAttachedDataImpl<ProcessData> { … }; //////////////////////////////////////////////////////////////////////////////// // V8ContextTrackerDataStore declaration: // This class acts as the owner of all tracked objects. Objects are created // in isolation, and ownership passed to this object. Management of all // per-process lists is centralized through this object. class V8ContextTrackerDataStore { … }; } // namespace internal } // namespace v8_memory } // namespace performance_manager #endif // COMPONENTS_PERFORMANCE_MANAGER_V8_MEMORY_V8_CONTEXT_TRACKER_INTERNAL_H_