Skip to content

Commit

Permalink
perf tools: Factor out prepare_metric function
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
olsajiri authored and acmel committed Jun 22, 2020
1 parent f78ac00 commit 2cfaa85
Showing 1 changed file with 34 additions and 19 deletions.
53 changes: 34 additions & 19 deletions tools/perf/util/stat-shadow.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 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 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;
Expand All @@ -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
Expand All @@ -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 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;
Expand Down

0 comments on commit 2cfaa85

Please sign in to comment.