blob: a66cbb4c53b0c969e5824458d592449c9845c27a [file] [log] [blame]
// 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_SYSTEM_NODE_H_
#define COMPONENTS_PERFORMANCE_MANAGER_PUBLIC_GRAPH_SYSTEM_NODE_H_
#include "base/memory/memory_pressure_listener.h"
#include "base/observer_list_types.h"
#include "components/performance_manager/public/graph/node.h"
namespace performance_manager {
class SystemNodeObserver;
// The SystemNode represents system-wide state. Each graph owns exactly one
// system node. This node has the same lifetime has the graph that owns it.
class SystemNode : public TypedNode<SystemNode> {
public:
using MemoryPressureLevel = base::MemoryPressureListener::MemoryPressureLevel;
static constexpr NodeTypeEnum Type() { return NodeTypeEnum::kSystem; }
SystemNode();
SystemNode(const SystemNode&) = delete;
SystemNode& operator=(const SystemNode&) = delete;
~SystemNode() override;
};
// Observer interface for the system node.
class SystemNodeObserver : public base::CheckedObserver {
public:
SystemNodeObserver();
SystemNodeObserver(const SystemNodeObserver&) = delete;
SystemNodeObserver& operator=(const SystemNodeObserver&) = delete;
~SystemNodeObserver() override;
// Called when a new set of process memory metrics is available.
//
// Note: This is only valid if at least one component has expressed interest
// for process memory metrics by calling
// ProcessMetricsDecorator::RegisterInterestForProcessMetrics.
virtual void OnProcessMemoryMetricsAvailable(const SystemNode* system_node) {}
};
} // namespace performance_manager
#endif // COMPONENTS_PERFORMANCE_MANAGER_PUBLIC_GRAPH_SYSTEM_NODE_H_