1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
// Copyright 2024 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_SCENARIOS_LOADING_SCENARIO_OBSERVER_H_
#define COMPONENTS_PERFORMANCE_MANAGER_SCENARIOS_LOADING_SCENARIO_OBSERVER_H_
#include "base/containers/span.h"
#include "base/sequence_checker.h"
#include "components/performance_manager/public/graph/frame_node.h"
#include "components/performance_manager/public/graph/graph.h"
#include "components/performance_manager/public/graph/page_node.h"
#include "components/performance_manager/public/graph/process_node.h"
#include "components/performance_manager/scenarios/loading_scenario_data.h"
namespace performance_manager {
class LoadingScenarioObserver : public FrameNodeObserver,
public PageNodeObserver,
public ProcessNodeObserver,
public GraphOwned {
public:
LoadingScenarioObserver();
~LoadingScenarioObserver() override;
LoadingScenarioObserver(const LoadingScenarioObserver&) = delete;
LoadingScenarioObserver& operator=(const LoadingScenarioObserver&) = delete;
// FrameNodeObserver:
void OnFrameNodeAdded(const FrameNode* frame_node) override;
void OnBeforeFrameNodeRemoved(const FrameNode* frame_node) override;
// PageNodeObserver:
void OnPageNodeAdded(const PageNode* page_node) override;
void OnBeforePageNodeRemoved(const PageNode* page_node) override;
void OnIsFocusedChanged(const PageNode* page_node) override;
void OnIsVisibleChanged(const PageNode* page_node) override;
void OnLoadingStateChanged(const PageNode* page_node,
PageNode::LoadingState previous_state) override;
// ProcessNodeObserver:
void OnProcessNodeAdded(const ProcessNode* process_node) override;
// GraphOwned:
void OnPassedToGraph(Graph* graph) override;
void OnTakenFromGraph(Graph* graph) override;
private:
// Increments or decrements the loading counts for a page that `is_visible`
// and `is_focused`. Modifies the counts for the global loading scenario and
// all process scenarios for `process_nodes`.
void IncrementLoadingCounts(base::span<const ProcessNode*> process_nodes,
bool is_visible,
bool is_focused);
void DecrementLoadingCounts(base::span<const ProcessNode*> process_nodes,
bool is_visible,
bool is_focused);
// Updates the global loading scenario, and all process scenarios for
// `process_nodes`, based on the current loading counts.
void UpdateLoadingScenarios(base::span<const ProcessNode*> process_nodes);
SEQUENCE_CHECKER(sequence_checker_);
LoadingScenarioCounts global_counts_ GUARDED_BY_CONTEXT(sequence_checker_);
};
} // namespace performance_manager
#endif // COMPONENTS_PERFORMANCE_MANAGER_SCENARIOS_LOADING_SCENARIO_OBSERVER_H_
|