| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_PERFORMANCE_MANAGER_TAB_HELPER_FRAME_NODE_SOURCE_H_ |
| #define COMPONENTS_PERFORMANCE_MANAGER_TAB_HELPER_FRAME_NODE_SOURCE_H_ |
| |
| #include "components/performance_manager/frame_node_source.h" |
| |
| #include "base/macros.h" |
| #include "base/observer_list.h" |
| #include "base/observer_list_types.h" |
| #include "base/scoped_observer.h" |
| #include "components/performance_manager/performance_manager_tab_helper.h" |
| |
| namespace performance_manager { |
| |
| // An implementation of FrameNodeSource that uses PerformanceManagerTabHelper to |
| // get frame node information. |
| class TabHelperFrameNodeSource : public FrameNodeSource, |
| public PerformanceManagerTabHelper::Observer { |
| public: |
| TabHelperFrameNodeSource(); |
| ~TabHelperFrameNodeSource() override; |
| |
| // FrameNodeSource: |
| FrameNodeImpl* GetFrameNode(int render_process_id, int frame_id) override; |
| void SubscribeToFrameNode(int render_process_id, |
| int frame_id, |
| OnbeforeFrameNodeRemovedCallback |
| on_before_frame_node_removed_callback) override; |
| void UnsubscribeFromFrameNode(int render_process_id, int frame_id) override; |
| |
| // PerformanceManagerTabHelper::Observer: |
| void OnBeforeFrameNodeRemoved( |
| PerformanceManagerTabHelper* performance_manager_tab_helper, |
| FrameNodeImpl* frame_node) override; |
| |
| private: |
| // Adds |frame_node| to the set of observed frame nodes associated with |
| // |performance_manager_tab_helper|. Returns true if |frame_node| was the |
| // first frame added to that set. |
| bool AddObservedFrameNode( |
| PerformanceManagerTabHelper* performance_manager_tab_helper, |
| FrameNodeImpl* frame_node); |
| |
| // Removes |frame_node| to the set of observed frame nodes associated with |
| // |performance_manager_tab_helper|. Returns true if |frame_node| was the |
| // last frame removed from that set. |
| bool RemoveObservedFrameNode( |
| PerformanceManagerTabHelper* performance_manager_tab_helper, |
| FrameNodeImpl* frame_node); |
| |
| // Maps each observed frame node to their callback. |
| base::flat_map<FrameNodeImpl*, OnbeforeFrameNodeRemovedCallback> |
| frame_node_callbacks_; |
| |
| // Maps each tab helper to the set of observed frame nodes that belongs to |
| // that tab helper. |
| base::flat_map<PerformanceManagerTabHelper*, base::flat_set<FrameNodeImpl*>> |
| observed_frame_nodes_; |
| |
| // Observes frame node deletions. |
| ScopedObserver<PerformanceManagerTabHelper, |
| PerformanceManagerTabHelper::Observer> |
| performance_manager_tab_helper_observers_; |
| |
| DISALLOW_COPY_AND_ASSIGN(TabHelperFrameNodeSource); |
| }; |
| |
| } // namespace performance_manager |
| |
| #endif // COMPONENTS_PERFORMANCE_MANAGER_TAB_HELPER_FRAME_NODE_SOURCE_H_ |