Re: [PATCH v6 1/4] perf report: Fix incorrectly added dimensions as switch perf data file

From: Arnaldo Carvalho de Melo
Date: Mon Dec 23 2019 - 08:02:08 EST


Em Mon, Dec 23, 2019 at 08:55:00AM +0800, Jin, Yao escreveu:
>
>
> On 12/21/2019 12:34 AM, Arnaldo Carvalho de Melo wrote:
> > Em Fri, Dec 20, 2019 at 09:37:19AM +0800, Jin Yao escreveu:
> > > We observed an issue that was some extra columns displayed after switching
> > > perf data file in browser. The steps to reproduce:
> > >
> > > 1. perf record -a -e cycles,instructions -- sleep 3
> > > 2. perf report --group
> > > 3. In browser, we use hotkey 's' to switch to another perf.data
> > > 4. Now in browser, the extra columns 'Self' and 'Children' are displayed.
> > >
> > > The issue is setup_sorting() executed again after repeat path, so dimensions
> > > are added again.
> > >
> > > This patch checks the last key returned from __cmd_report(). If it's
> > > K_SWITCH_INPUT_DATA, skips the setup_sorting().
> >
> > you forgot to add this right?
> >
> > Cc: Feng Tang <feng.tang@xxxxxxxxx>
> > Fixes: ad0de0971b7f ("perf report: Enable the runtime switching of perf data file")
>
> Yes, I should add this in patch description. Thanks for reminding
>
> Do you need me to resend this patch-set (v7)?

Nope, I added it myself, thanks.

- Arnaldo

> Thanks
> Jin Yao
>
> > > v6:
> > > ---
> > > No change.
> > >
> > > v5:
> > > ---
> > > New patch in v5.
> > >
> > > Signed-off-by: Jin Yao <yao.jin@xxxxxxxxxxxxxxx>
> > > ---
> > > tools/perf/builtin-report.c | 5 ++++-
> > > 1 file changed, 4 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
> > > index 387311c67264..de988589d99b 100644
> > > --- a/tools/perf/builtin-report.c
> > > +++ b/tools/perf/builtin-report.c
> > > @@ -1076,6 +1076,7 @@ int cmd_report(int argc, const char **argv)
> > > struct stat st;
> > > bool has_br_stack = false;
> > > int branch_mode = -1;
> > > + int last_key = 0;
> > > bool branch_call_mode = false;
> > > #define CALLCHAIN_DEFAULT_OPT "graph,0.5,caller,function,percent"
> > > static const char report_callchain_help[] = "Display call graph (stack chain/backtrace):\n\n"
> > > @@ -1450,7 +1451,8 @@ int cmd_report(int argc, const char **argv)
> > > sort_order = sort_tmp;
> > > }
> > > - if (setup_sorting(session->evlist) < 0) {
> > > + if ((last_key != K_SWITCH_INPUT_DATA) &&
> > > + (setup_sorting(session->evlist) < 0)) {
> > > if (sort_order)
> > > parse_options_usage(report_usage, options, "s", 1);
> > > if (field_order)
> > > @@ -1530,6 +1532,7 @@ int cmd_report(int argc, const char **argv)
> > > ret = __cmd_report(&report);
> > > if (ret == K_SWITCH_INPUT_DATA) {
> > > perf_session__delete(session);
> > > + last_key = K_SWITCH_INPUT_DATA;
> > > goto repeat;
> > > } else
> > > ret = 0;
> > > --
> > > 2.17.1
> >

--

- Arnaldo