124 lines
3.7 KiB
Diff
124 lines
3.7 KiB
Diff
From d7551f1a5c8ab7e70a096147d7c7000e921fad06 Mon Sep 17 00:00:00 2001
|
|
From: Jiri Olsa <jolsa@kernel.org>
|
|
Date: Tue, 2 Jun 2020 23:47:37 +0200
|
|
Subject: [PATCH 100/201] perf tools: Factor out prepare_metric function
|
|
|
|
mainline inclusion
|
|
from mainline-v5.9-rc1
|
|
commit 2cfaa853d8ead2fe4cd82986163b5cea21e300bd
|
|
category: feature
|
|
bugzilla: https://gitee.com/openeuler/kernel/issues/I8C0CX
|
|
|
|
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2cfaa853d8ead2fe4cd82986163b5cea21e300bd
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
Factoring out prepare_metric function so it can be used in test
|
|
interface coming in following changes.
|
|
|
|
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
|
|
Acked-by: Ian Rogers <irogers@google.com>
|
|
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
|
|
Cc: Andi Kleen <ak@linux.intel.com>
|
|
Cc: Michael Petlan <mpetlan@redhat.com>
|
|
Cc: Namhyung Kim <namhyung@kernel.org>
|
|
Cc: Peter Zijlstra <peterz@infradead.org>
|
|
Cc: Stephane Eranian <eranian@google.com>
|
|
Link: http://lore.kernel.org/lkml/20200602214741.1218986-10-jolsa@kernel.org
|
|
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
|
Signed-off-by: hongrongxuan <hongrongxuan@huawei.com>
|
|
|
|
Conflicts:
|
|
tools/perf/util/stat-shadow.c
|
|
---
|
|
tools/perf/util/stat-shadow.c | 53 ++++++++++++++++++++++-------------
|
|
1 file changed, 34 insertions(+), 19 deletions(-)
|
|
|
|
diff --git a/tools/perf/util/stat-shadow.c b/tools/perf/util/stat-shadow.c
|
|
index 40af5b4feb00..c686b8dc3cd7 100644
|
|
--- a/tools/perf/util/stat-shadow.c
|
|
+++ b/tools/perf/util/stat-shadow.c
|
|
@@ -730,25 +730,16 @@ static void print_smi_cost(struct perf_stat_config *config,
|
|
out->print_metric(config, out->ctx, NULL, "%4.0f", "SMI#", smi_num);
|
|
}
|
|
|
|
-static void generic_metric(struct perf_stat_config *config,
|
|
- const char *metric_expr,
|
|
- struct perf_evsel **metric_events,
|
|
- char *name,
|
|
- const char *metric_name,
|
|
- const char *metric_unit,
|
|
- int runtime,
|
|
- int cpu,
|
|
- struct perf_stat_output_ctx *out,
|
|
- struct runtime_stat *st)
|
|
+static int prepare_metric(struct perf_evsel **metric_events,
|
|
+ struct expr_parse_ctx *pctx,
|
|
+ int cpu,
|
|
+ struct runtime_stat *st)
|
|
{
|
|
- print_metric_t print_metric = out->print_metric;
|
|
- struct expr_parse_ctx pctx;
|
|
- double ratio, scale;
|
|
- int i;
|
|
- void *ctxp = out->ctx;
|
|
+ double scale;
|
|
char *n, *pn;
|
|
+ int i;
|
|
|
|
- expr__ctx_init(&pctx);
|
|
+ expr__ctx_init(pctx);
|
|
for (i = 0; metric_events[i]; i++) {
|
|
struct saved_value *v;
|
|
struct stats *stats;
|
|
@@ -771,7 +762,7 @@ static void generic_metric(struct perf_stat_config *config,
|
|
|
|
n = strdup(metric_events[i]->name);
|
|
if (!n)
|
|
- return;
|
|
+ return -ENOMEM;
|
|
/*
|
|
* This display code with --no-merge adds [cpu] postfixes.
|
|
* These are not supported by the parser. Remove everything
|
|
@@ -782,11 +773,35 @@ static void generic_metric(struct perf_stat_config *config,
|
|
*pn = 0;
|
|
|
|
if (metric_total)
|
|
- expr__add_id(&pctx, n, metric_total);
|
|
+ expr__add_id(pctx, n, metric_total);
|
|
else
|
|
- expr__add_id(&pctx, n, avg_stats(stats)*scale);
|
|
+ expr__add_id(pctx, n, avg_stats(stats)*scale);
|
|
}
|
|
|
|
+ return i;
|
|
+}
|
|
+
|
|
+static void generic_metric(struct perf_stat_config *config,
|
|
+ const char *metric_expr,
|
|
+ struct perf_evsel **metric_events,
|
|
+ char *name,
|
|
+ const char *metric_name,
|
|
+ const char *metric_unit,
|
|
+ int runtime,
|
|
+ int cpu,
|
|
+ struct perf_stat_output_ctx *out,
|
|
+ struct runtime_stat *st)
|
|
+{
|
|
+ print_metric_t print_metric = out->print_metric;
|
|
+ struct expr_parse_ctx pctx;
|
|
+ double ratio, scale;
|
|
+ int i;
|
|
+ void *ctxp = out->ctx;
|
|
+
|
|
+ i = prepare_metric(metric_events, &pctx, cpu, st);
|
|
+ if (i < 0)
|
|
+ return;
|
|
+
|
|
if (!metric_events[i]) {
|
|
if (expr__parse(&ratio, &pctx, metric_expr, runtime) == 0) {
|
|
char *unit;
|
|
--
|
|
2.27.0
|
|
|