| Index: services/blamer/public/cpp/blame_node.h
|
| diff --git a/services/blamer/public/cpp/blame_node.h b/services/blamer/public/cpp/blame_node.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1d92dcc2bb08770e9c7394838963180952ca7ac0
|
| --- /dev/null
|
| +++ b/services/blamer/public/cpp/blame_node.h
|
| @@ -0,0 +1,102 @@
|
| +// Copyright 2017 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 SERVICES_BLAMER_PUBLIC_CPP_BLAME_NODE_H_
|
| +#define SERVICES_BLAMER_PUBLIC_CPP_BLAME_NODE_H_
|
| +
|
| +#include "base/memory/ref_counted.h"
|
| +
|
| +#include <vector>
|
| +
|
| +#include "services/blamer/public/cpp/blame_classes.h"
|
| +
|
| +namespace blamer {
|
| +
|
| +struct FlatBlameNode;
|
| +
|
| +// A node is a logical unit to which we want to attribute resource consumption
|
| +// (CPU, network, memory usage, power, disk, etc). An example of a node is an
|
| +// <iframe> element on a web page, or a "tab" on in a browser window. The
|
| +// collection of all nodes implicitly creates a DAG (nodes may have multiple
|
| +// parents) with a single implicit common root (the browser).
|
| +//
|
| +// A BlameNode should be constructed, attached to parents, attached to
|
| +// equivalence classes, etc, and then finalized. Once it has been finalized it
|
| +// will be committed to the shared memory buffer, visible by other processes and
|
| +// able to be used to start collecting metrics.
|
| +class BlameNode : public base::RefCounted<BlameNode> {
|
| + public:
|
| + // Constructs a blame node with the given class ID and object ID.
|
| + BlameNode(BlameClassId class_id, uint32_t object_id);
|
| +
|
| + // Adds a parent to this BlameNode. This can be called repeatedly. Can only
|
| + // be called prior to committing this node.
|
| + void AddParent(scoped_refptr<BlameNode> parent);
|
| +
|
| + // Adds an equivalence class to this BlameNode. Can only be called prior to
|
| + // committing this node.
|
| + void AddEquivalence(BlameClassId class_id, uint32_t equivalence_key);
|
| +
|
| + // Commits this node.
|
| + void Commit();
|
| +
|
| + FlatBlameNode* flat_blame_node() const { return flat_blame_node_; }
|
| + //FlatBlameData* flat_blame_data() const { return flat_blame_data_; }
|
| +
|
| + private:
|
| + friend class base::RefCounted<BlameNode>;
|
| + using Equivalence = std::pair<BlameClassId, uint32_t>;
|
| +
|
| + ~BlameNode();
|
| +
|
| + std::vector<scoped_refptr<BlameNode>> parents_;
|
| + std::vector<Equivalence> equivalences_;
|
| +
|
| + // Pointer to the exported blame node description for this node. This is
|
| + // initially null and only populated when committed.
|
| + FlatBlameNode* flat_blame_node_;
|
| +
|
| + // Pointer to the exported blame data associated with this node. This is
|
| + // initially null and only populated when committed.
|
| + //FlatBlameData* flat_blame_data_;
|
| +};
|
| +
|
| +// This acts as a lightweight reference to another blame node.
|
| +struct FlatBlameNodeReference {
|
| + // The class ID to which the node belongs. Actually a BlameClassId.
|
| + uint32_t blame_class_id;
|
| + // The ID of the node. This is namespaced by |blame_class_id|.
|
| + uint32_t object_id;
|
| +};
|
| +
|
| +// This describes an equivalence for a blame node.
|
| +struct FlatBlameNodeEquivalence {
|
| + // The class ID to which the node belongs. Actually a BlameClassId.
|
| + uint32_t blame_class_id;
|
| + // The common key used by the remote object instance in order to tie the
|
| + // objects together. This is user defined.
|
| + uint32_t equivalence_key;
|
| +};
|
| +
|
| +// This is a flat POD description of a blame node.
|
| +struct FlatBlameNode {
|
| + // The class ID to which this node belongs. Actually a BlameClassId.
|
| + uint32_t blame_class_id;
|
| +
|
| + // The proess-stable ID of the object this node represents. This is namespaced
|
| + // by |blame_class_id|.
|
| + uint32_t object_id;
|
| +
|
| + // The number of parents this node has.
|
| + uint16_t parent_count;
|
| +
|
| + // The number of equivalences this node has.
|
| + uint16_t equivalence_count;
|
| +
|
| + // TODO
|
| +};
|
| +
|
| +} // namespace blamer
|
| +
|
| +#endif // SERVICES_BLAMER_PUBLIC_CPP_BLAME_NODE_H_
|
|
|