1 /* Copyright (C) 2021 Free Software Foundation, Inc.
4 This file is part of GNU Binutils.
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)
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.
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. */
21 #ifndef _BASEMETRICTREENODE_H
22 #define _BASEMETRICTREENODE_H
24 #include "BaseMetric.h"
27 #define UNIT_SECONDS "SECONDS"
28 #define UNIT_SECONDS_UNAME GTXT("secs.")
29 #define UNIT_BYTES "BYTES"
30 #define UNIT_BYTES_UNAME GTXT("bytes")
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"
50 class BaseMetricTreeNode
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();
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
; }
75 BaseMetricTreeNode (BaseMetric
*item
);
76 BaseMetricTreeNode (const char *name
, const char *uname
,
77 const char *_unit
, const char *_unit_uname
);
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
*);
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
100 #endif /* _BASEMETRICTREENODE_H */