1/* Copyright (C) 2021-2024 Free Software Foundation, Inc. 2 Contributed by Oracle. 3 4 This file is part of GNU Binutils. 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3, or (at your option) 9 any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program; if not, write to the Free Software 18 Foundation, 51 Franklin Street - Fifth Floor, Boston, 19 MA 02110-1301, USA. */ 20 21#ifndef _BASEMETRICTREENODE_H 22#define _BASEMETRICTREENODE_H 23 24#include "BaseMetric.h" 25 26// Unit values 27#define UNIT_SECONDS "SECONDS" 28#define UNIT_SECONDS_UNAME GTXT("secs.") 29#define UNIT_BYTES "BYTES" 30#define UNIT_BYTES_UNAME GTXT("bytes") 31 32// Name values for intermediate parent nodes that aren't defined elsewhere 33#define L1_DURATION "PROFDATA_TYPE_DURATION" 34#define L1_DURATION_UNAME GTXT("Experiment Duration") 35#define L1_GCDURATION "PROFDATA_TYPE_GCDURATION" 36#define L1_GCDURATION_UNAME GTXT("Java Garbage Collection Duration") 37#define L2_HWC_DSPACE "PROFDATA_TYPE_HWC_DSPACE" 38#define L2_HWC_DSPACE_UNAME GTXT("Memoryspace Hardware Counters") 39#define L2_HWC_GENERAL "PROFDATA_TYPE_HWC_GENERAL" 40#define L2_HWC_GENERAL_UNAME GTXT("General Hardware Counters") 41#define L1_MPI_STATES "PROFDATA_TYPE_MPI_STATES" 42#define L1_MPI_STATES_UNAME GTXT("MPI States") 43#define L1_OTHER "PROFDATA_TYPE_OTHER" 44#define L1_OTHER_UNAME GTXT("Derived and Other Metrics") 45#define L1_STATIC "PROFDATA_TYPE_STATIC" 46#define L1_STATIC_UNAME GTXT("Static") 47#define L_CP_TOTAL "L_CP_TOTAL" 48#define L_CP_TOTAL_CPU "L_CP_TOTAL_CPU" 49 50class BaseMetricTreeNode 51{ 52public: 53 BaseMetricTreeNode (); // builds basic metric tree (not including HWCs) 54 virtual ~BaseMetricTreeNode (); 55 BaseMetricTreeNode *register_metric (BaseMetric *item); 56 BaseMetricTreeNode *find (const char *name); 57 void get_nearest_registered_descendents (Vector<BaseMetricTreeNode*> *new_vec); 58 void get_all_registered_descendents (Vector<BaseMetricTreeNode*> *new_vec); 59 char *get_description(); 60 char *dump(); 61 62 BaseMetricTreeNode *get_root () { return root; } 63 BaseMetricTreeNode *get_parent () { return parent; } 64 Vector<BaseMetricTreeNode*> *get_children () { return children; } 65 bool is_registered () { return registered; } 66 int get_num_registered_descendents () { return num_registered_descendents; } 67 bool is_composite_metric () { return isCompositeMetric; } 68 BaseMetric *get_BaseMetric () { return bm; } 69 char *get_name () { return name; } 70 char *get_user_name () { return uname; } 71 char *get_unit () { return unit; } 72 char *get_unit_uname () { return unit_uname; } 73 74private: 75 BaseMetricTreeNode (BaseMetric *item); 76 BaseMetricTreeNode (const char *name, const char *uname, 77 const char *_unit, const char *_unit_uname); 78 void init_vars (); 79 void build_basic_tree (); 80 BaseMetricTreeNode *add_child (BaseMetric *item); 81 BaseMetricTreeNode *add_child (const char *name, const char *uname, 82 const char *unit = NULL, const char *unit_uname = NULL); 83 BaseMetricTreeNode *add_child (BaseMetricTreeNode *new_node); 84 void register_node (BaseMetricTreeNode *); 85 86 BaseMetricTreeNode *root; // root of tree 87 BaseMetricTreeNode *parent; // my parent 88 bool aggregation; // value is based on children's values 89 char *name; // bm->get_cmd() for metrics, unique string otherwise 90 char *uname; // user-visible text 91 char *unit; // see UNIT_* defines 92 char *unit_uname; // see UNIT_*_UNAME defines 93 Vector<BaseMetricTreeNode*> *children; // my children 94 bool isCompositeMetric; // value is sum of children 95 BaseMetric *bm; // metric for this node, or null 96 bool registered; // metric has been officially registered 97 int num_registered_descendents; // does not include self 98}; 99 100#endif /* _BASEMETRICTREENODE_H */ 101