aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/stat-shadow.c
diff options
context:
space:
mode:
authorAndi Kleen <ak@linux.intel.com>2017-08-31 15:40:34 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2017-09-13 08:49:14 -0400
commitfd48aad9b0f3f7654433dfae3a72ceda36e2de28 (patch)
tree3d3a9de041b7c77a47233740b8858eb65a0229d5 /tools/perf/util/stat-shadow.c
parent4e1a096380e3b558ef021afc08e193ce5d1be478 (diff)
perf stat: Support duration_time for metrics
Some of the metrics formulas (like GFLOPs) need to know how long the measurement period is. Support an internal event called duration_time, which reports time in second. It maps to the dummy event, but is special cased for statistics to report the walltime duration. So far it is not printed, but only used internally for metrics. Signed-off-by: Andi Kleen <ak@linux.intel.com> Acked-by: Jiri Olsa <jolsa@kernel.org> Link: http://lkml.kernel.org/r/20170831194036.30146-10-andi@firstfloor.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/stat-shadow.c')
-rw-r--r--tools/perf/util/stat-shadow.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/tools/perf/util/stat-shadow.c b/tools/perf/util/stat-shadow.c
index 664f49a9b012..a2c12d1ef32a 100644
--- a/tools/perf/util/stat-shadow.c
+++ b/tools/perf/util/stat-shadow.c
@@ -641,11 +641,20 @@ static void generic_metric(const char *metric_expr,
641 expr__add_id(&pctx, name, avg); 641 expr__add_id(&pctx, name, avg);
642 for (i = 0; metric_events[i]; i++) { 642 for (i = 0; metric_events[i]; i++) {
643 struct saved_value *v; 643 struct saved_value *v;
644 struct stats *stats;
645 double scale;
644 646
645 v = saved_value_lookup(metric_events[i], cpu, false); 647 if (!strcmp(metric_events[i]->name, "duration_time")) {
646 if (!v) 648 stats = &walltime_nsecs_stats;
647 break; 649 scale = 1e-9;
648 expr__add_id(&pctx, metric_events[i]->name, avg_stats(&v->stats)); 650 } else {
651 v = saved_value_lookup(metric_events[i], cpu, false);
652 if (!v)
653 break;
654 stats = &v->stats;
655 scale = 1.0;
656 }
657 expr__add_id(&pctx, metric_events[i]->name, avg_stats(stats)*scale);
649 } 658 }
650 if (!metric_events[i]) { 659 if (!metric_events[i]) {
651 const char *p = metric_expr; 660 const char *p = metric_expr;