lkml.org 
[lkml]   [2020]   [Apr]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH v2 11/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 | 117 ++++++++++++++++++++++++------------------
    1 file changed, 66 insertions(+), 51 deletions(-)

    diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c
    index d1033756a1bc..31e97e24c2b0 100644
    --- a/tools/perf/util/metricgroup.c
    +++ b/tools/perf/util/metricgroup.c
    @@ -315,6 +315,68 @@ static void metricgroup__print_strlist(struct strlist *metrics, bool raw)
    putchar('\n');
    }

    +
    +static void 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;
    +
    + g = pe->metric_group;
    + if (!g && pe->metric_name) {
    + if (pe->name)
    + return;
    + 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);
    + }
    + }
    + free(omg);
    + }
    +}
    +
    void metricgroup__print(bool metrics, bool metricgroups, char *filter,
    bool raw, bool details)
    {
    @@ -339,63 +401,15 @@ 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);
    - }
    - }
    - free(omg);
    - }
    + metricgroup__print_pmu_event(pe, metricgroups, filter, raw,
    + details, &groups, metriclist);
    }

    if (metricgroups && !raw)
    @@ -407,7 +421,8 @@ void metricgroup__print(bool metrics, bool metricgroups, char *filter,
    struct mep *me = container_of(node, struct mep, nd);

    if (metricgroups)
    - printf("%s%s%s", me->name, metrics && !raw ? ":" : "", raw ? " " : "\n");
    + printf("%s%s%s", me->name, metrics && !raw ? ":" : "",
    + raw ? " " : "\n");
    if (metrics)
    metricgroup__print_strlist(me->metrics, raw);
    next = rb_next(node);
    --
    2.16.4
    \
     
     \ /
      Last update: 2020-04-17 13:11    [W:4.057 / U:0.340 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site