| /* Copyright (C) 2021-2024 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 _METRIC_H |
| #define _METRIC_H |
| |
| #include "dbe_structs.h" |
| #include "vec.h" |
| #include "enums.h" |
| #include "BaseMetric.h" |
| |
| #define MAX_LEN 1024 |
| |
| class Expression; |
| |
| // The metric class defines the metrics that are available. The metrics are |
| // registered when the experiment's log file is read. |
| class Metric : public BaseMetric |
| { |
| public: |
| |
| typedef struct HistMetricS |
| { |
| int width; |
| int maxvalue_width; |
| int maxtime_width; |
| char legend1[MAX_LEN]; |
| char legend2[MAX_LEN]; |
| char legend3[MAX_LEN]; |
| int indFirstExp; // only for -compare=[delta|ratio] |
| int indTimeVal; // only for HWC time-converted metrics |
| void update_max (struct HistMetricS *hm); |
| void init (); |
| } HistMetric; |
| |
| Metric (const Metric& item); // copy constructor |
| Metric (BaseMetric *item, SubType st); |
| Metric (char *_name, SubType st); // for derived metrics |
| virtual ~Metric (); |
| |
| char *get_mcmd (bool); // e.user, a.total, etc. NOTI18N |
| int get_real_visbits (); // methods for managing visibility |
| ValueTag get_vtype2 (); // takes comparison visbits into account |
| void set_dmetrics_visbits (int _dmetrics_visbits); |
| |
| // fetch various fields from a Metric |
| SubType |
| get_subtype () |
| { |
| return subtype; |
| } |
| |
| char * |
| get_name () |
| { |
| return name; |
| } |
| |
| char * |
| get_abbr () |
| { |
| return abbr; |
| } |
| |
| char * |
| get_abbr_unit () |
| { |
| return abbr_unit; |
| } |
| |
| BaseMetric * |
| get_base_metric () |
| { |
| return baseMetric; |
| } |
| |
| int |
| get_visbits () |
| { |
| return visbits; |
| } |
| |
| void |
| set_raw_visbits (int _visbits) |
| { |
| visbits = _visbits; |
| } |
| |
| void |
| clear_all_visbits () |
| { |
| visbits = VAL_NA; |
| } |
| |
| void |
| enable_all_visbits () |
| { |
| visbits = get_value_styles (); |
| } |
| |
| |
| #define VAL_IS_HIDDEN(n) ((n) == -1 || (n) == VAL_NA || ((n) & VAL_HIDE_ALL) != 0) |
| |
| bool |
| is_any_visible () |
| { |
| return !VAL_IS_HIDDEN (visbits) |
| && (visbits & (VAL_VALUE | VAL_TIMEVAL | VAL_PERCENT)); |
| } |
| |
| bool |
| is_value_visible () |
| { |
| return (visbits & VAL_VALUE) != 0 |
| || (!is_time_val () && (visbits & VAL_TIMEVAL) != 0); |
| } |
| |
| bool |
| is_time_visible () |
| { |
| return is_time_val () && (visbits & VAL_TIMEVAL) != 0; |
| } |
| |
| bool |
| is_visible () |
| { |
| return !VAL_IS_HIDDEN (visbits) && is_value_visible (); |
| } |
| |
| bool |
| is_tvisible () |
| { |
| return !VAL_IS_HIDDEN (visbits) && is_time_visible (); |
| } |
| |
| bool |
| is_pvisible () |
| { |
| return !VAL_IS_HIDDEN (visbits) && (visbits & VAL_PERCENT) != 0; |
| } |
| |
| bool |
| is_time_val () |
| { |
| int v = VAL_TIMEVAL | VAL_VALUE; |
| return (get_value_styles () & v) == v; |
| } |
| |
| // per-bit handling of visbits |
| // Note: Forces VAL_HIDE_ALL to zero. Use only on temporary Metric objects. |
| void set_vvisible (bool set); |
| void set_tvisible (bool set); |
| void set_pvisible (bool set); |
| |
| void set_subtype (SubType st); |
| void legend_width (HistMetric *hitem, int gap); |
| char *get_vis_str (); |
| char *get_vis_string (int vis); |
| char *dump (); |
| |
| |
| private: |
| BaseMetric *baseMetric; |
| SubType subtype; // specific variant for this Metric |
| char *name; |
| char *abbr; |
| char *abbr_unit; |
| int visbits; // ValueType, e.g. VAL_VALUE|VAL_TIMEVAL |
| }; |
| |
| #endif /* _METRIC_H */ |