From: Jiri Olsa <jolsa@redhat.com>
To: Namhyung Kim <namhyung@kernel.org>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>,
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>,
David Ahern <dsahern@gmail.com>, Andi Kleen <andi@firstfloor.org>
Subject: Re: [PATCH 9/9] perf hists/tui: Count callchain rows separately
Date: Tue, 22 Apr 2014 19:39:12 +0200 [thread overview]
Message-ID: <20140422173912.GA16924@krava.brq.redhat.com> (raw)
In-Reply-To: <1398156591-11001-10-git-send-email-namhyung@kernel.org>
On Tue, Apr 22, 2014 at 05:49:51PM +0900, Namhyung Kim wrote:
> When TUI hist browser expands/collapses callchains it accounted number
> of callchain nodes into total entries to show. However this code
> ignores filtering so that it can make the cursor go to out of screen.
>
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> ---
> tools/perf/ui/browsers/hists.c | 38 ++++++++++++++++++++++++++++----------
> 1 file changed, 28 insertions(+), 10 deletions(-)
>
> diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c
> index 886eee0062e0..215f10429dda 100644
> --- a/tools/perf/ui/browsers/hists.c
> +++ b/tools/perf/ui/browsers/hists.c
> @@ -27,6 +27,7 @@ struct hist_browser {
> bool show_dso;
> float min_pcnt;
> u64 nr_non_filtered_entries;
> + u64 nr_callchain_rows;
> };
>
> extern void hist_browser__init_hpp(void);
> @@ -35,6 +36,10 @@ static int hists__browser_title(struct hists *hists, char *bf, size_t size,
> const char *ev_name);
> static void hist_browser__update_nr_entries(struct hist_browser *hb);
>
> +static struct rb_node *hists__filter_entries(struct rb_node *nd,
> + struct hists *hists,
> + float min_pcnt);
> +
> static bool hist_browser__has_filter(struct hist_browser *hb)
> {
> return hists__has_filter(hb->hists) || hb->min_pcnt;
> @@ -51,6 +56,7 @@ static void hist_browser__reset(struct hist_browser *browser)
> {
> hist_browser__update_nr_entries(browser);
> browser->b.nr_entries = browser->nr_non_filtered_entries;
> + browser->b.nr_entries += browser->nr_callchain_rows;
> hist_browser__refresh_dimensions(browser);
> ui_browser__reset_index(&browser->b);
> }
> @@ -205,14 +211,16 @@ static bool hist_browser__toggle_fold(struct hist_browser *browser)
> struct hist_entry *he = browser->he_selection;
>
> hist_entry__init_have_children(he);
> - browser->hists->nr_entries -= he->nr_rows;
> + browser->b.nr_entries -= he->nr_rows;
does browser->b.nr_entries need to be updated in here?
it gets set in hist_browser__reset and hist_browser__run
> + browser->nr_callchain_rows -= he->nr_rows;
>
> if (he->ms.unfolded)
> he->nr_rows = callchain__count_rows(&he->sorted_chain);
> else
> he->nr_rows = 0;
> - browser->hists->nr_entries += he->nr_rows;
> - browser->b.nr_entries = browser->hists->nr_entries;
> +
> + browser->b.nr_entries += he->nr_rows;
ditto
> + browser->nr_callchain_rows += he->nr_rows;
>
> return true;
> }
> @@ -287,23 +295,31 @@ static void hist_entry__set_folding(struct hist_entry *he, bool unfold)
> he->nr_rows = 0;
> }
>
> -static void hists__set_folding(struct hists *hists, bool unfold)
> +static void
> +__hist_browser__set_folding(struct hist_browser *browser, bool unfold)
> {
> struct rb_node *nd;
> + struct hists *hists = browser->hists;
>
> - hists->nr_entries = 0;
> -
> - for (nd = rb_first(&hists->entries); nd; nd = rb_next(nd)) {
> + for (nd = rb_first(&hists->entries);
> + (nd = hists__filter_entries(nd, hists, browser->min_pcnt)) != NULL;
> + nd = rb_next(nd)) {
> struct hist_entry *he = rb_entry(nd, struct hist_entry, rb_node);
> hist_entry__set_folding(he, unfold);
> - hists->nr_entries += 1 + he->nr_rows;
> + browser->nr_callchain_rows += he->nr_rows;
> }
> }
>
> static void hist_browser__set_folding(struct hist_browser *browser, bool unfold)
> {
> - hists__set_folding(browser->hists, unfold);
> - browser->b.nr_entries = browser->hists->nr_entries;
> + browser->nr_callchain_rows = 0;
> + __hist_browser__set_folding(browser, unfold);
> +
> + if (hist_browser__has_filter(browser))
> + browser->b.nr_entries = browser->nr_non_filtered_entries;
> + else
> + browser->b.nr_entries = browser->hists->nr_entries;
> + browser->b.nr_entries += browser->nr_callchain_rows;
ditto,
I think whole condition above could go away, it's the same as in the
hist_browser__run, which is going to be executed after this anyway..
just setup browser->nr_callchain_rows
thanks,
jirka
next prev parent reply other threads:[~2014-04-22 17:39 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-22 8:49 [PATCHSET 0/9] perf tools: Fixup for the --percentage change Namhyung Kim
2014-04-22 8:49 ` [PATCH 1/9] perf report: Count number of entries and samples separately Namhyung Kim
2014-04-22 14:51 ` Jiri Olsa
2014-04-23 4:52 ` Namhyung Kim
2014-04-22 16:43 ` Jiri Olsa
2014-04-22 8:49 ` [PATCH 2/9] perf hists: Introduce hists__add_nr_events() Namhyung Kim
2014-04-22 14:52 ` Jiri Olsa
2014-04-23 4:53 ` Namhyung Kim
2014-04-22 8:49 ` [PATCH 3/9] perf tools: Account entry stats when it's added to the output tree Namhyung Kim
2014-04-22 14:54 ` Jiri Olsa
2014-04-23 4:58 ` Namhyung Kim
2014-04-22 17:10 ` Jiri Olsa
2014-04-23 5:14 ` Namhyung Kim
2014-04-22 8:49 ` [PATCH 4/9] perf tools: Introduce hists__inc_dump_events() Namhyung Kim
2014-04-22 16:53 ` Jiri Olsa
2014-04-23 5:58 ` Namhyung Kim
2014-04-22 8:49 ` [PATCH 5/9] perf hists: Add missing update on nr_non_filtered_entries Namhyung Kim
2014-04-22 8:49 ` [PATCH 6/9] perf ui/tui: Fix off-by-one in hist_browser__update_nr_entries() Namhyung Kim
2014-04-22 8:49 ` [PATCH 7/9] perf ui/tui: Rename hist_browser__update_nr_entries() Namhyung Kim
2014-04-22 8:49 ` [PATCH 8/9] perf top/tui: Update nr_entries properly after a filter is applied Namhyung Kim
2014-04-22 8:49 ` [PATCH 9/9] perf hists/tui: Count callchain rows separately Namhyung Kim
2014-04-22 17:39 ` Jiri Olsa [this message]
2014-04-22 9:55 ` [PATCHSET 0/9] perf tools: Fixup for the --percentage change Ingo Molnar
2014-04-23 4:49 ` Namhyung Kim
2014-04-23 6:09 ` Ingo Molnar
2014-04-25 7:53 ` 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=20140422173912.GA16924@krava.brq.redhat.com \
--to=jolsa@redhat.com \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@kernel.org \
--cc=andi@firstfloor.org \
--cc=dsahern@gmail.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®