diff options
Diffstat (limited to 'gprofng/src/BaseMetricTreeNode.h')
-rw-r--r-- | gprofng/src/BaseMetricTreeNode.h | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/gprofng/src/BaseMetricTreeNode.h b/gprofng/src/BaseMetricTreeNode.h new file mode 100644 index 0000000..0076dff --- /dev/null +++ b/gprofng/src/BaseMetricTreeNode.h @@ -0,0 +1,100 @@ +/* Copyright (C) 2021 Free Software Foundation, Inc. + Contributed by Oracle. + + This file is part of GNU Binutils. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#ifndef _BASEMETRICTREENODE_H +#define _BASEMETRICTREENODE_H + +#include "BaseMetric.h" + +// Unit values +#define UNIT_SECONDS "SECONDS" +#define UNIT_SECONDS_UNAME GTXT("secs.") +#define UNIT_BYTES "BYTES" +#define UNIT_BYTES_UNAME GTXT("bytes") + +// Name values for intermediate parent nodes that aren't defined elsewhere +#define L1_DURATION "PROFDATA_TYPE_DURATION" +#define L1_DURATION_UNAME GTXT("Experiment Duration") +#define L1_GCDURATION "PROFDATA_TYPE_GCDURATION" +#define L1_GCDURATION_UNAME GTXT("Java Garbage Collection Duration") +#define L2_HWC_DSPACE "PROFDATA_TYPE_HWC_DSPACE" +#define L2_HWC_DSPACE_UNAME GTXT("Memoryspace Hardware Counters") +#define L2_HWC_GENERAL "PROFDATA_TYPE_HWC_GENERAL" +#define L2_HWC_GENERAL_UNAME GTXT("General Hardware Counters") +#define L1_MPI_STATES "PROFDATA_TYPE_MPI_STATES" +#define L1_MPI_STATES_UNAME GTXT("MPI States") +#define L1_OTHER "PROFDATA_TYPE_OTHER" +#define L1_OTHER_UNAME GTXT("Derived and Other Metrics") +#define L1_STATIC "PROFDATA_TYPE_STATIC" +#define L1_STATIC_UNAME GTXT("Static") +#define L_CP_TOTAL "L_CP_TOTAL" +#define L_CP_TOTAL_CPU "L_CP_TOTAL_CPU" + +class BaseMetricTreeNode +{ +public: + BaseMetricTreeNode (); // builds basic metric tree (not including HWCs) + virtual ~BaseMetricTreeNode (); + BaseMetricTreeNode *register_metric (BaseMetric *item); + BaseMetricTreeNode *find (const char *name); + void get_nearest_registered_descendents (Vector<BaseMetricTreeNode*> *new_vec); + void get_all_registered_descendents (Vector<BaseMetricTreeNode*> *new_vec); + char *get_description(); + char *dump(); + + BaseMetricTreeNode *get_root () { return root; } + BaseMetricTreeNode *get_parent () { return parent; } + Vector<BaseMetricTreeNode*> *get_children () { return children; } + bool is_registered () { return registered; } + int get_num_registered_descendents () { return num_registered_descendents; } + bool is_composite_metric () { return isCompositeMetric; } + BaseMetric *get_BaseMetric () { return bm; } + char *get_name () { return name; } + char *get_user_name () { return uname; } + char *get_unit () { return unit; } + char *get_unit_uname () { return unit_uname; } + +private: + BaseMetricTreeNode (BaseMetric *item); + BaseMetricTreeNode (const char *name, const char *uname, + const char *_unit, const char *_unit_uname); + void init_vars (); + void build_basic_tree (); + BaseMetricTreeNode *add_child (BaseMetric *item); + BaseMetricTreeNode *add_child (const char *name, const char *uname, + const char *unit = NULL, const char *unit_uname = NULL); + BaseMetricTreeNode *add_child (BaseMetricTreeNode *new_node); + void register_node (BaseMetricTreeNode *); + + BaseMetricTreeNode *root; // root of tree + BaseMetricTreeNode *parent; // my parent + bool aggregation; // value is based on children's values + char *name; // bm->get_cmd() for metrics, unique string otherwise + char *uname; // user-visible text + char *unit; // see UNIT_* defines + char *unit_uname; // see UNIT_*_UNAME defines + Vector<BaseMetricTreeNode*> *children; // my children + bool isCompositeMetric; // value is sum of children + BaseMetric *bm; // metric for this node, or null + bool registered; // metric has been officially registered + int num_registered_descendents; // does not include self +}; + +#endif /* _BASEMETRICTREENODE_H */ |