On Thu, 6 Sep 2012 17:47:05 +0200, Jiri Olsa wrote: > Adding -F option to display the formula for specified computation. > This is mainly to facilitate debuging, but can be usefull anyway. > > Adding this support for weighted diff computation. > > Cc: Arnaldo Carvalho de Melo <a...@ghostprotocols.net> > Cc: Peter Zijlstra <a.p.zijls...@chello.nl> > Cc: Ingo Molnar <mi...@elte.hu> > Cc: Paul Mackerras <pau...@samba.org> > Cc: Corey Ashford <cjash...@linux.vnet.ibm.com> > Cc: Frederic Weisbecker <fweis...@gmail.com> > Cc: Paul E. McKenney <paul...@linux.vnet.ibm.com> > Cc: Andi Kleen <a...@firstfloor.org> > Cc: David Ahern <dsah...@gmail.com> > Cc: Namhyung Kim <namhy...@kernel.org> > Signed-off-by: Jiri Olsa <jo...@redhat.com> > --- > tools/perf/Documentation/perf-diff.txt | 4 ++++ > tools/perf/builtin-diff.c | 27 ++++++++++++++++++++++++++- > tools/perf/ui/stdio/hist.c | 8 ++++++++ > tools/perf/ui/stdio/hist.h | 1 + > tools/perf/util/hist.h | 3 ++- > 5 files changed, 41 insertions(+), 2 deletions(-) > > diff --git a/tools/perf/Documentation/perf-diff.txt > b/tools/perf/Documentation/perf-diff.txt > index 21cc2ef..4d65407 100644 > --- a/tools/perf/Documentation/perf-diff.txt > +++ b/tools/perf/Documentation/perf-diff.txt > @@ -87,6 +87,10 @@ OPTIONS > --period:: > Show period values for both compared hist entries. > > +-F:: > +--formula:: > + Show formula for given computation (supported: wdiff) > + > COMPARISON METHODS > ------------------ > delta > diff --git a/tools/perf/builtin-diff.c b/tools/perf/builtin-diff.c > index 1297a01..9125eee 100644 > --- a/tools/perf/builtin-diff.c > +++ b/tools/perf/builtin-diff.c > @@ -26,6 +26,7 @@ static char diff__default_sort_order[] = "dso,symbol"; > static bool force; > static bool show_displacement; > static bool show_period; > +static bool show_formula; > static bool show_baseline_only; > static bool sort_compute; > > @@ -174,6 +175,20 @@ double perf_diff__compute_wdiff(struct hist_entry *he) > return he->diff.wdiff; > } > > +int perf_diff__formula_wdiff(struct hist_entry *he, char *bf, size_t size) > +{ > + struct hist_entry *pair = he->pair; > + u64 new_period = he->period; > + u64 old_period = pair ? pair->period : 0; > + char formula[100]; > + > + scnprintf(formula, 100, > + "(%" PRIu64 " * " "%" PRId64 ") - (%" PRIu64 " * " "%" PRId64 > ")", > + new_period, compute_wdiff_w2, old_period, compute_wdiff_w1); > + > + return scnprintf(bf, size, "%-50s", formula); > +} > + > static int hists__add_entry(struct hists *self, > struct addr_location *al, u64 period) > { > @@ -529,6 +544,8 @@ static const struct option options[] = { > "Entries differential computation selection"), > OPT_BOOLEAN('p', "period", &show_period, > "Show period values."), > + OPT_BOOLEAN('F', "formula", &show_formula, > + "Show formula."), > OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace, > "dump raw trace in ASCII"), > OPT_BOOLEAN('f', "force", &force, "don't complain, do it"), > @@ -572,11 +589,19 @@ static void setup_ui_stdio(void) > if (show_displacement) > hists_stdio_column__register_idx(HISTC_DISPLACEMENT); > > + if (show_formula) > + switch (compute) { > + case COMPUTE_WEIGHTED_DIFF: > + > hists_stdio_column__register_idx(HISTC_FORMULA_WEIGHTED_DIFF); > + break; > + default: > + break; > + }; > + > if (show_period) { > hists_stdio_column__register_idx(HISTC_BASELINE_TOTAL_PERIOD); > hists_stdio_column__register_idx(HISTC_TOTAL_PERIOD); > } > - > } > > int cmd_diff(int argc, const char **argv, const char *prefix __used) > diff --git a/tools/perf/ui/stdio/hist.c b/tools/perf/ui/stdio/hist.c > index ab5f27a..8cf4ebd 100644 > --- a/tools/perf/ui/stdio/hist.c > +++ b/tools/perf/ui/stdio/hist.c > @@ -150,6 +150,13 @@ hists_stdio_column__displacement_snprintf(struct > hist_entry *he, char *bf, > return scnprintf(bf, size, displ ? "%+5ld" : " ", displ); > } > > +static int > +hists_stdio_column__formula_wdiff_snprintf(struct hist_entry *he, char *bf, > + size_t size, unsigned int width > __used) > +{ > + return perf_diff__formula_wdiff(he, bf, size); > +} > + > LIST_HEAD(hists_stdio_column__list); > > #define DEF_COLUMN(name, c, w, h) \ > @@ -175,6 +182,7 @@ DEF_COLUMN(delta, HISTC_DELTA, 8, "Delta") > DEF_COLUMN(ratio, HISTC_RATIO, 14, "Ratio") > DEF_COLUMN(wdiff, HISTC_WEIGHTED_DIFF, 13, "Weighted diff") > DEF_COLUMN(displacement, HISTC_DISPLACEMENT, 5, "Displ") > +DEF_COLUMN(formula_wdiff, HISTC_FORMULA_WEIGHTED_DIFF, 50, "Formula")
This fixed 50 column width looks too large to me. What about make it dynamic like sort_list? Thanks, Namhyung > }; > > int hists_stdio_column__register_idx(int idx) > diff --git a/tools/perf/ui/stdio/hist.h b/tools/perf/ui/stdio/hist.h > index f725189..4f62224 100644 > --- a/tools/perf/ui/stdio/hist.h > +++ b/tools/perf/ui/stdio/hist.h > @@ -21,4 +21,5 @@ double perf_diff__compute_delta(struct hist_entry *he); > double perf_diff__compute_ratio(struct hist_entry *he); > double perf_diff__compute_wdiff(struct hist_entry *he); > > +int perf_diff__formula_wdiff(struct hist_entry *he, char *bf, size_t size); > #endif /* __PERF_UI_STDIO_HIST_H */ > diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h > index 81e6d20..e1511cc 100644 > --- a/tools/perf/util/hist.h > +++ b/tools/perf/util/hist.h > @@ -50,6 +50,7 @@ enum hist_column { > HISTC_RATIO, > HISTC_WEIGHTED_DIFF, > HISTC_DISPLACEMENT, > + HISTC_FORMULA_WEIGHTED_DIFF, > > /* sorted (hist_entry__sort_list) */ > HISTC_SYMBOL, > @@ -67,7 +68,7 @@ enum hist_column { > HISTC_NR_COLS, /* Last entry */ > > /* Last stdio ui data column */ > - HISTC_STDIO_NR_COLS = HISTC_DISPLACEMENT + 1, > + HISTC_STDIO_NR_COLS = HISTC_FORMULA_WEIGHTED_DIFF + 1, > }; > > struct thread; -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/