diff options
| author | Jin Yao <yao.jin@linux.intel.com> | 2019-04-12 09:59:48 -0400 |
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2019-05-16 13:17:24 -0400 |
| commit | 40480a8136700d678dc07222c4d7287c89d0c04d (patch) | |
| tree | a3e60ad9b30ef1b7aad5449c9d6e1600815840d4 /tools/perf | |
| parent | 064b4e82aa1633c27c383cc686b87ced57e072d1 (diff) | |
perf stat: Factor out aggregate counts printing
Move the aggregate counts printing to a new function
print_counter_aggrdata, which will be used in following patches.
Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
Tested-by: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jin Yao <yao.jin@intel.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1555077590-27664-3-git-send-email-yao.jin@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf')
| -rw-r--r-- | tools/perf/util/stat-display.c | 64 |
1 files changed, 39 insertions, 25 deletions
diff --git a/tools/perf/util/stat-display.c b/tools/perf/util/stat-display.c index 3324f23c7efc..f5b4ee79568c 100644 --- a/tools/perf/util/stat-display.c +++ b/tools/perf/util/stat-display.c | |||
| @@ -594,6 +594,41 @@ static void aggr_cb(struct perf_stat_config *config, | |||
| 594 | } | 594 | } |
| 595 | } | 595 | } |
| 596 | 596 | ||
| 597 | static void print_counter_aggrdata(struct perf_stat_config *config, | ||
| 598 | struct perf_evsel *counter, int s, | ||
| 599 | char *prefix, bool metric_only, | ||
| 600 | bool *first) | ||
| 601 | { | ||
| 602 | struct aggr_data ad; | ||
| 603 | FILE *output = config->output; | ||
| 604 | u64 ena, run, val; | ||
| 605 | int id, nr; | ||
| 606 | double uval; | ||
| 607 | |||
| 608 | ad.id = id = config->aggr_map->map[s]; | ||
| 609 | ad.val = ad.ena = ad.run = 0; | ||
| 610 | ad.nr = 0; | ||
| 611 | if (!collect_data(config, counter, aggr_cb, &ad)) | ||
| 612 | return; | ||
| 613 | |||
| 614 | nr = ad.nr; | ||
| 615 | ena = ad.ena; | ||
| 616 | run = ad.run; | ||
| 617 | val = ad.val; | ||
| 618 | if (*first && metric_only) { | ||
| 619 | *first = false; | ||
| 620 | aggr_printout(config, counter, id, nr); | ||
| 621 | } | ||
| 622 | if (prefix && !metric_only) | ||
| 623 | fprintf(output, "%s", prefix); | ||
| 624 | |||
| 625 | uval = val * counter->scale; | ||
| 626 | printout(config, id, nr, counter, uval, prefix, | ||
| 627 | run, ena, 1.0, &rt_stat); | ||
| 628 | if (!metric_only) | ||
| 629 | fputc('\n', output); | ||
| 630 | } | ||
| 631 | |||
| 597 | static void print_aggr(struct perf_stat_config *config, | 632 | static void print_aggr(struct perf_stat_config *config, |
| 598 | struct perf_evlist *evlist, | 633 | struct perf_evlist *evlist, |
| 599 | char *prefix) | 634 | char *prefix) |
| @@ -601,9 +636,7 @@ static void print_aggr(struct perf_stat_config *config, | |||
| 601 | bool metric_only = config->metric_only; | 636 | bool metric_only = config->metric_only; |
| 602 | FILE *output = config->output; | 637 | FILE *output = config->output; |
| 603 | struct perf_evsel *counter; | 638 | struct perf_evsel *counter; |
| 604 | int s, id, nr; | 639 | int s; |
| 605 | double uval; | ||
| 606 | u64 ena, run, val; | ||
| 607 | bool first; | 640 | bool first; |
| 608 | 641 | ||
| 609 | if (!(config->aggr_map || config->aggr_get_id)) | 642 | if (!(config->aggr_map || config->aggr_get_id)) |
| @@ -616,33 +649,14 @@ static void print_aggr(struct perf_stat_config *config, | |||
| 616 | * Without each counter has its own line. | 649 | * Without each counter has its own line. |
| 617 | */ | 650 | */ |
| 618 | for (s = 0; s < config->aggr_map->nr; s++) { | 651 | for (s = 0; s < config->aggr_map->nr; s++) { |
| 619 | struct aggr_data ad; | ||
| 620 | if (prefix && metric_only) | 652 | if (prefix && metric_only) |
| 621 | fprintf(output, "%s", prefix); | 653 | fprintf(output, "%s", prefix); |
| 622 | 654 | ||
| 623 | ad.id = id = config->aggr_map->map[s]; | ||
| 624 | first = true; | 655 | first = true; |
| 625 | evlist__for_each_entry(evlist, counter) { | 656 | evlist__for_each_entry(evlist, counter) { |
| 626 | ad.val = ad.ena = ad.run = 0; | 657 | print_counter_aggrdata(config, counter, s, |
| 627 | ad.nr = 0; | 658 | prefix, metric_only, |
| 628 | if (!collect_data(config, counter, aggr_cb, &ad)) | 659 | &first); |
| 629 | continue; | ||
| 630 | nr = ad.nr; | ||
| 631 | ena = ad.ena; | ||
| 632 | run = ad.run; | ||
| 633 | val = ad.val; | ||
| 634 | if (first && metric_only) { | ||
| 635 | first = false; | ||
| 636 | aggr_printout(config, counter, id, nr); | ||
| 637 | } | ||
| 638 | if (prefix && !metric_only) | ||
| 639 | fprintf(output, "%s", prefix); | ||
| 640 | |||
| 641 | uval = val * counter->scale; | ||
| 642 | printout(config, id, nr, counter, uval, prefix, | ||
| 643 | run, ena, 1.0, &rt_stat); | ||
| 644 | if (!metric_only) | ||
| 645 | fputc('\n', output); | ||
| 646 | } | 660 | } |
| 647 | if (metric_only) | 661 | if (metric_only) |
| 648 | fputc('\n', output); | 662 | fputc('\n', output); |
