lkml.org 
[lkml]   [2020]   [Nov]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH RFC v5 10/13] perf metricgroup: Split up metricgroup__print()
    Date
    To aid supporting system event metric groups, break up the function
    metricgroup__print() into a part which iterates metrics and a part which
    actually "prints" the metric.

    No functional change intended.

    Signed-off-by: John Garry <john.garry@huawei.com>
    ---
    tools/perf/util/metricgroup.c | 124 +++++++++++++++++++---------------
    1 file changed, 70 insertions(+), 54 deletions(-)

    diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c
    index da979dd50809..64fbb96eb7b5 100644
    --- a/tools/perf/util/metricgroup.c
    +++ b/tools/perf/util/metricgroup.c
    @@ -493,6 +493,72 @@ static void metricgroup__print_strlist(struct strlist *metrics, bool raw)
    putchar('\n');
    }

    +static int metricgroup__print_pmu_event(struct pmu_event *pe,
    + bool metricgroups, char *filter,
    + bool raw, bool details,
    + struct rblist *groups,
    + struct strlist *metriclist)
    +{
    + const char *g;
    + char *omg, *mg;
    +
    + g = pe->metric_group;
    + if (!g && pe->metric_name) {
    + if (pe->name)
    + return 0;
    + g = "No_group";
    + }
    +
    + if (!g)
    + return 0;
    +
    + mg = strdup(g);
    +
    + if (!mg)
    + return -ENOMEM;
    + omg = mg;
    + while ((g = strsep(&mg, ";")) != NULL) {
    + struct mep *me;
    + char *s;
    +
    + g = skip_spaces(g);
    + if (*g == 0)
    + g = "No_group";
    + if (filter && !strstr(g, filter))
    + continue;
    + if (raw)
    + s = (char *)pe->metric_name;
    + else {
    + if (asprintf(&s, "%s\n%*s%s]",
    + pe->metric_name, 8, "[", pe->desc) < 0)
    + return -1;
    + if (details) {
    + if (asprintf(&s, "%s\n%*s%s]",
    + s, 8, "[", pe->metric_expr) < 0)
    + return -1;
    + }
    + }
    +
    + if (!s)
    + continue;
    +
    + if (!metricgroups) {
    + strlist__add(metriclist, s);
    + } else {
    + me = mep_lookup(groups, g);
    + if (!me)
    + continue;
    + strlist__add(me->metrics, s);
    + }
    +
    + if (!raw)
    + free(s);
    + }
    + free(omg);
    +
    + return 0;
    +}
    +
    void metricgroup__print(bool metrics, bool metricgroups, char *filter,
    bool raw, bool details)
    {
    @@ -517,66 +583,16 @@ void metricgroup__print(bool metrics, bool metricgroups, char *filter,
    groups.node_cmp = mep_cmp;
    groups.node_delete = mep_delete;
    for (i = 0; ; i++) {
    - const char *g;
    pe = &map->table[i];

    if (!pe->name && !pe->metric_group && !pe->metric_name)
    break;
    if (!pe->metric_expr)
    continue;
    - g = pe->metric_group;
    - if (!g && pe->metric_name) {
    - if (pe->name)
    - continue;
    - g = "No_group";
    - }
    - if (g) {
    - char *omg;
    - char *mg = strdup(g);
    -
    - if (!mg)
    - return;
    - omg = mg;
    - while ((g = strsep(&mg, ";")) != NULL) {
    - struct mep *me;
    - char *s;
    -
    - g = skip_spaces(g);
    - if (*g == 0)
    - g = "No_group";
    - if (filter && !strstr(g, filter))
    - continue;
    - if (raw)
    - s = (char *)pe->metric_name;
    - else {
    - if (asprintf(&s, "%s\n%*s%s]",
    - pe->metric_name, 8, "[", pe->desc) < 0)
    - return;
    -
    - if (details) {
    - if (asprintf(&s, "%s\n%*s%s]",
    - s, 8, "[", pe->metric_expr) < 0)
    - return;
    - }
    - }
    -
    - if (!s)
    - continue;
    -
    - if (!metricgroups) {
    - strlist__add(metriclist, s);
    - } else {
    - me = mep_lookup(&groups, g);
    - if (!me)
    - continue;
    - strlist__add(me->metrics, s);
    - }
    -
    - if (!raw)
    - free(s);
    - }
    - free(omg);
    - }
    + if (metricgroup__print_pmu_event(pe, metricgroups, filter,
    + raw, details, &groups,
    + metriclist) < 0)
    + return;
    }

    if (!filter || !rblist__empty(&groups)) {
    --
    2.26.2
    \
     
     \ /
      Last update: 2020-11-06 13:41    [W:3.130 / U:0.248 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site