From: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
To: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>,
Ingo Molnar <mingo@kernel.org>, Paul Mackerras <paulus@samba.org>,
Namhyung Kim <namhyung.kim@lge.com>,
LKML <linux-kernel@vger.kernel.org>,
Anton Blanchard <anton@samba.org>
Subject: Re: [PATCH 1/4] perf tools: Check availability of annotate when processing samples
Date: Mon, 24 Feb 2014 09:46:53 -0300 [thread overview]
Message-ID: <20140224124653.GB5982@ghostprotocols.net> (raw)
In-Reply-To: <1392859976-32760-1-git-send-email-namhyung@kernel.org>
Em Thu, Feb 20, 2014 at 10:32:53AM +0900, Namhyung Kim escreveu:
> The TUI of perf report and top support annotation, but stdio and GTK
> don't. So it should be checked before calling hist_entry__inc_addr_
> samples() since perf annotate need it regardless of UI and sort keys.
>
> It caused perf annotate on ppc64 to produce zero output.
I renamed {top,report}_needs_annotate to ui__has_annotation() and will
make this patch apply on perf/urgent, as it is a bug fix.
While looking at it I noticed several things that can be improved in
this area, like we don't need to map the ip in top if we're not going to
use it, etc. But will leave those to a follow on patch.
Thanks,
- Arnaldo
> Reported-by: Anton Blanchard <anton@samba.org>
> Cc: Anton Blanchard <anton@samba.org>
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> ---
> tools/perf/builtin-report.c | 45 +++++++++++++++++++++++++++++----------------
> tools/perf/builtin-top.c | 11 +++++++++--
> tools/perf/util/annotate.c | 2 +-
> 3 files changed, 39 insertions(+), 19 deletions(-)
>
> diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
> index d882b6f96411..bab762bdeb0d 100644
> --- a/tools/perf/builtin-report.c
> +++ b/tools/perf/builtin-report.c
> @@ -75,6 +75,11 @@ static int report__config(const char *var, const char *value, void *cb)
> return perf_default_config(var, value, cb);
> }
>
> +static bool report_needs_annotate(void)
> +{
> + return use_browser == 1 && sort__has_sym;
> +}
> +
> static int report__add_mem_hist_entry(struct report *rep, struct addr_location *al,
> struct perf_sample *sample, struct perf_evsel *evsel)
> {
> @@ -110,14 +115,16 @@ static int report__add_mem_hist_entry(struct report *rep, struct addr_location *
> if (!he)
> return -ENOMEM;
>
> - err = hist_entry__inc_addr_samples(he, evsel->idx, al->addr);
> - if (err)
> - goto out;
> + if (report_needs_annotate()) {
> + err = hist_entry__inc_addr_samples(he, evsel->idx, al->addr);
> + if (err)
> + goto out;
>
> - mx = he->mem_info;
> - err = addr_map_symbol__inc_samples(&mx->daddr, evsel->idx);
> - if (err)
> - goto out;
> + mx = he->mem_info;
> + err = addr_map_symbol__inc_samples(&mx->daddr, evsel->idx);
> + if (err)
> + goto out;
> + }
>
> evsel->hists.stats.total_period += cost;
> hists__inc_nr_events(&evsel->hists, PERF_RECORD_SAMPLE);
> @@ -159,14 +166,18 @@ static int report__add_branch_hist_entry(struct report *rep, struct addr_locatio
> he = __hists__add_entry(&evsel->hists, al, parent, &bi[i], NULL,
> 1, 1, 0);
> if (he) {
> - bx = he->branch_info;
> - err = addr_map_symbol__inc_samples(&bx->from, evsel->idx);
> - if (err)
> - goto out;
> -
> - err = addr_map_symbol__inc_samples(&bx->to, evsel->idx);
> - if (err)
> - goto out;
> + if (report_needs_annotate()) {
> + bx = he->branch_info;
> + err = addr_map_symbol__inc_samples(&bx->from,
> + evsel->idx);
> + if (err)
> + goto out;
> +
> + err = addr_map_symbol__inc_samples(&bx->to,
> + evsel->idx);
> + if (err)
> + goto out;
> + }
>
> evsel->hists.stats.total_period += 1;
> hists__inc_nr_events(&evsel->hists, PERF_RECORD_SAMPLE);
> @@ -199,7 +210,9 @@ static int report__add_hist_entry(struct report *rep, struct perf_evsel *evsel,
> if (err)
> goto out;
>
> - err = hist_entry__inc_addr_samples(he, evsel->idx, al->addr);
> + if (report_needs_annotate())
> + err = hist_entry__inc_addr_samples(he, evsel->idx, al->addr);
> +
> evsel->hists.stats.total_period += sample->period;
> hists__inc_nr_events(&evsel->hists, PERF_RECORD_SAMPLE);
> out:
> diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
> index ed99ec4a309f..a19c3afcfa0e 100644
> --- a/tools/perf/builtin-top.c
> +++ b/tools/perf/builtin-top.c
> @@ -87,6 +87,11 @@ static void perf_top__sig_winch(int sig __maybe_unused,
> perf_top__update_print_entries(top);
> }
>
> +static bool top_needs_annotate(void)
> +{
> + return use_browser == 1 && sort__has_sym;
> +}
> +
> static int perf_top__parse_source(struct perf_top *top, struct hist_entry *he)
> {
> struct symbol *sym;
> @@ -176,7 +181,7 @@ static void perf_top__record_precise_ip(struct perf_top *top,
> {
> struct annotation *notes;
> struct symbol *sym;
> - int err;
> + int err = 0;
>
> if (he == NULL || he->ms.sym == NULL ||
> ((top->sym_filter_entry == NULL ||
> @@ -190,7 +195,9 @@ static void perf_top__record_precise_ip(struct perf_top *top,
> return;
>
> ip = he->ms.map->map_ip(he->ms.map, ip);
> - err = hist_entry__inc_addr_samples(he, counter, ip);
> +
> + if (top_needs_annotate())
> + err = hist_entry__inc_addr_samples(he, counter, ip);
>
> pthread_mutex_unlock(¬es->lock);
>
> diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
> index 469eb679fb9d..6fcada625c86 100644
> --- a/tools/perf/util/annotate.c
> +++ b/tools/perf/util/annotate.c
> @@ -489,7 +489,7 @@ static int symbol__inc_addr_samples(struct symbol *sym, struct map *map,
> {
> struct annotation *notes;
>
> - if (sym == NULL || use_browser != 1 || !sort__has_sym)
> + if (sym == NULL)
> return 0;
>
> notes = symbol__annotation(sym);
> --
> 1.7.11.7
next prev parent reply other threads:[~2014-02-24 12:47 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-20 1:32 [PATCH 1/4] perf tools: Check availability of annotate when processing samples Namhyung Kim
2014-02-20 1:32 ` [PATCH 2/4] perf tools: Destroy unused symsrcs Namhyung Kim
2014-02-27 13:29 ` [tip:perf/urgent] perf symbols: " tip-bot for Namhyung Kim
2014-02-20 1:32 ` [PATCH 3/4] perf tools: Check return value of filename__read_debuglink() Namhyung Kim
2014-02-27 13:30 ` [tip:perf/core] perf symbols: " tip-bot for Stephane Eranian
2014-02-20 1:32 ` [PATCH 4/4] perf tools: Check compatible symtab type before loading dso Namhyung Kim
2014-02-27 13:30 ` [tip:perf/core] perf symbols: " tip-bot for Namhyung Kim
2014-02-24 12:46 ` Arnaldo Carvalho de Melo [this message]
2014-02-27 13:29 ` [tip:perf/urgent] perf annotate: Check availability of annotate when processing samples tip-bot for Namhyung Kim
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140224124653.GB5982@ghostprotocols.net \
--to=acme@ghostprotocols.net \
--cc=a.p.zijlstra@chello.nl \
--cc=anton@samba.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung.kim@lge.com \
--cc=namhyung@kernel.org \
--cc=paulus@samba.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.