| /* Copyright (C) 2021-2023 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 */ |