Commit 2cfaa853 authored by Jiri Olsa's avatar Jiri Olsa Committed by Arnaldo Carvalho de Melo
Browse files

perf tools: Factor out prepare_metric function



Factoring out prepare_metric function so it can be used in test
interface coming in following changes.

Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
Acked-by: default avatarIan 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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent f78ac00a
Loading
Loading
Loading
Loading
+34 −19
Original line number Diff line number Diff line
@@ -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,
static int prepare_metric(struct evsel **metric_events,
			  struct expr_parse_ctx *pctx,
			  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;
	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 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;