
The recent addition of OnBeforeFrameNodeAdded and OnFrameNodeRemoved observer methods render this class superfluous. Change-Id: I0df4de14f0982a097a47c6fbd29999fa6643a4e2 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6089681 Reviewed-by: Joe Mason <joenotcharles@google.com> Commit-Queue: Patrick Monette <pmonette@chromium.org> Cr-Commit-Position: refs/heads/main@{#1395738}
60 lines
1.7 KiB
C++
60 lines
1.7 KiB
C++
// 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_NODE_H_
|
|
#define COMPONENTS_PERFORMANCE_MANAGER_PUBLIC_GRAPH_NODE_H_
|
|
|
|
#include <cstdint>
|
|
|
|
#include "base/check_op.h"
|
|
#include "components/performance_manager/public/graph/node_state.h"
|
|
#include "components/performance_manager/public/graph/node_type.h"
|
|
|
|
namespace performance_manager {
|
|
|
|
class Graph;
|
|
|
|
// Interface that all nodes must implement.
|
|
class Node {
|
|
public:
|
|
Node();
|
|
|
|
Node(const Node&) = delete;
|
|
Node& operator=(const Node&) = delete;
|
|
|
|
virtual ~Node();
|
|
|
|
// Returns the type of this node.
|
|
virtual NodeTypeEnum GetNodeType() const = 0;
|
|
|
|
// Returns the graph to which this node belongs.
|
|
virtual Graph* GetGraph() const = 0;
|
|
|
|
// The following functions are implementation detail and should not need to be
|
|
// used by external clients. They provide the ability to safely downcast to
|
|
// the underlying implementation.
|
|
virtual uintptr_t GetImplType() const = 0;
|
|
virtual const void* GetImpl() const = 0;
|
|
};
|
|
|
|
template <class PublicNodeClass>
|
|
class TypedNode : public Node {
|
|
public:
|
|
TypedNode() = default;
|
|
~TypedNode() override = default;
|
|
|
|
NodeTypeEnum GetNodeType() const override { return PublicNodeClass::Type(); }
|
|
|
|
// Helper function for casting from the generic Node type to its underlying
|
|
// public node type. This CHECKs that the cast is valid.
|
|
static const PublicNodeClass* FromNode(const Node* node) {
|
|
CHECK_EQ(node->GetNodeType(), PublicNodeClass::Type());
|
|
return reinterpret_cast<const PublicNodeClass*>(node);
|
|
}
|
|
};
|
|
|
|
} // namespace performance_manager
|
|
|
|
#endif // COMPONENTS_PERFORMANCE_MANAGER_PUBLIC_GRAPH_NODE_H_
|