(root)/
binutils-2.41/
gprofng/
src/
BaseMetricTreeNode.h
       1  /* Copyright (C) 2021-2023 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  
      50  class BaseMetricTreeNode
      51  {
      52  public:
      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  
      74  private:
      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 */