提交 f4c8bae1 编写于 作者: J Jiri Olsa 提交者: Arnaldo Carvalho de Melo

perf diff: Change formula methods to work with pair directly

Changing formula methods to operate over hist entry and its pair
directly. This makes the code more obvious and readable, instead of all
time checking for pair being != NULL.
Signed-off-by: NJiri Olsa <jolsa@redhat.com>
Acked-by: NNamhyung Kim <namhyung@kernel.org>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1354110769-2998-7-git-send-email-jolsa@redhat.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
上级 05472daa
...@@ -184,13 +184,9 @@ s64 perf_diff__compute_wdiff(struct hist_entry *he, struct hist_entry *pair) ...@@ -184,13 +184,9 @@ s64 perf_diff__compute_wdiff(struct hist_entry *he, struct hist_entry *pair)
return he->diff.wdiff; return he->diff.wdiff;
} }
static int formula_delta(struct hist_entry *he, char *buf, size_t size) static int formula_delta(struct hist_entry *he, struct hist_entry *pair,
char *buf, size_t size)
{ {
struct hist_entry *pair = hist_entry__next_pair(he);
if (!pair)
return -1;
return scnprintf(buf, size, return scnprintf(buf, size,
"(%" PRIu64 " * 100 / %" PRIu64 ") - " "(%" PRIu64 " * 100 / %" PRIu64 ") - "
"(%" PRIu64 " * 100 / %" PRIu64 ")", "(%" PRIu64 " * 100 / %" PRIu64 ")",
...@@ -198,41 +194,36 @@ static int formula_delta(struct hist_entry *he, char *buf, size_t size) ...@@ -198,41 +194,36 @@ static int formula_delta(struct hist_entry *he, char *buf, size_t size)
pair->stat.period, pair->hists->stats.total_period); pair->stat.period, pair->hists->stats.total_period);
} }
static int formula_ratio(struct hist_entry *he, char *buf, size_t size) static int formula_ratio(struct hist_entry *he, struct hist_entry *pair,
char *buf, size_t size)
{ {
struct hist_entry *pair = hist_entry__next_pair(he);
double new_period = he->stat.period; double new_period = he->stat.period;
double old_period = pair ? pair->stat.period : 0; double old_period = pair->stat.period;
if (!pair)
return -1;
return scnprintf(buf, size, "%.0F / %.0F", new_period, old_period); return scnprintf(buf, size, "%.0F / %.0F", new_period, old_period);
} }
static int formula_wdiff(struct hist_entry *he, char *buf, size_t size) static int formula_wdiff(struct hist_entry *he, struct hist_entry *pair,
char *buf, size_t size)
{ {
struct hist_entry *pair = hist_entry__next_pair(he);
u64 new_period = he->stat.period; u64 new_period = he->stat.period;
u64 old_period = pair ? pair->stat.period : 0; u64 old_period = pair->stat.period;
if (!pair)
return -1;
return scnprintf(buf, size, return scnprintf(buf, size,
"(%" PRIu64 " * " "%" PRId64 ") - (%" PRIu64 " * " "%" PRId64 ")", "(%" PRIu64 " * " "%" PRId64 ") - (%" PRIu64 " * " "%" PRId64 ")",
new_period, compute_wdiff_w2, old_period, compute_wdiff_w1); new_period, compute_wdiff_w2, old_period, compute_wdiff_w1);
} }
int perf_diff__formula(char *buf, size_t size, struct hist_entry *he) int perf_diff__formula(struct hist_entry *he, struct hist_entry *pair,
char *buf, size_t size)
{ {
switch (compute) { switch (compute) {
case COMPUTE_DELTA: case COMPUTE_DELTA:
return formula_delta(he, buf, size); return formula_delta(he, pair, buf, size);
case COMPUTE_RATIO: case COMPUTE_RATIO:
return formula_ratio(he, buf, size); return formula_ratio(he, pair, buf, size);
case COMPUTE_WEIGHTED_DIFF: case COMPUTE_WEIGHTED_DIFF:
return formula_wdiff(he, buf, size); return formula_wdiff(he, pair, buf, size);
default: default:
BUG_ON(1); BUG_ON(1);
} }
......
...@@ -389,10 +389,13 @@ static int hpp__width_formula(struct perf_hpp *hpp __maybe_unused) ...@@ -389,10 +389,13 @@ static int hpp__width_formula(struct perf_hpp *hpp __maybe_unused)
static int hpp__entry_formula(struct perf_hpp *hpp, struct hist_entry *he) static int hpp__entry_formula(struct perf_hpp *hpp, struct hist_entry *he)
{ {
struct hist_entry *pair = hist_entry__next_pair(he);
const char *fmt = symbol_conf.field_sep ? "%s" : "%-70s"; const char *fmt = symbol_conf.field_sep ? "%s" : "%-70s";
char buf[96] = " "; char buf[96] = " ";
perf_diff__formula(buf, sizeof(buf), he); if (pair)
perf_diff__formula(he, pair, buf, sizeof(buf));
return scnprintf(hpp->buf, hpp->size, fmt, buf); return scnprintf(hpp->buf, hpp->size, fmt, buf);
} }
......
...@@ -229,6 +229,7 @@ unsigned int hists__sort_list_width(struct hists *self); ...@@ -229,6 +229,7 @@ unsigned int hists__sort_list_width(struct hists *self);
double perf_diff__compute_delta(struct hist_entry *he, struct hist_entry *pair); double perf_diff__compute_delta(struct hist_entry *he, struct hist_entry *pair);
double perf_diff__compute_ratio(struct hist_entry *he, struct hist_entry *pair); double perf_diff__compute_ratio(struct hist_entry *he, struct hist_entry *pair);
s64 perf_diff__compute_wdiff(struct hist_entry *he, struct hist_entry *pair); s64 perf_diff__compute_wdiff(struct hist_entry *he, struct hist_entry *pair);
int perf_diff__formula(char *buf, size_t size, struct hist_entry *he); int perf_diff__formula(struct hist_entry *he, struct hist_entry *pair,
char *buf, size_t size);
double perf_diff__period_percent(struct hist_entry *he, u64 period); double perf_diff__period_percent(struct hist_entry *he, u64 period);
#endif /* __PERF_HIST_H */ #endif /* __PERF_HIST_H */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册