diff options
author | Namhyung Kim <namhyung@kernel.org> | 2014-04-22 01:49:31 -0400 |
---|---|---|
committer | Jiri Olsa <jolsa@kernel.org> | 2014-04-24 10:34:09 -0400 |
commit | 268397cb2a47ce6e1c0298d9de1762143867f9d3 (patch) | |
tree | b39dca9aa7407b1ec49bf81467e0d90ea4ba0d73 /tools/perf/ui | |
parent | 112f761fc0b43def377af889f8cd242df6af9e34 (diff) |
perf top/tui: Update nr_entries properly after a filter is applied
The hist_browser__reset() is only called right after a filter is
applied so it needs to udpate browser->nr_entries properly. We cannot
use hists->nr_non_filtered_entreis directly since it's possible that
such entries are also filtered out by minimum percentage limit.
In addition when a filter is used for perf top, hist browser's
nr_entries field was not updated after applying the filter. But it
needs to be updated as new samples are coming.
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Link: http://lkml.kernel.org/r/1398327843-31845-11-git-send-email-namhyung@kernel.org
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Diffstat (limited to 'tools/perf/ui')
-rw-r--r-- | tools/perf/ui/browsers/hists.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c index 769295bf2c10..886eee0062e0 100644 --- a/tools/perf/ui/browsers/hists.c +++ b/tools/perf/ui/browsers/hists.c | |||
@@ -35,6 +35,11 @@ static int hists__browser_title(struct hists *hists, char *bf, size_t size, | |||
35 | const char *ev_name); | 35 | const char *ev_name); |
36 | static void hist_browser__update_nr_entries(struct hist_browser *hb); | 36 | static void hist_browser__update_nr_entries(struct hist_browser *hb); |
37 | 37 | ||
38 | static bool hist_browser__has_filter(struct hist_browser *hb) | ||
39 | { | ||
40 | return hists__has_filter(hb->hists) || hb->min_pcnt; | ||
41 | } | ||
42 | |||
38 | static void hist_browser__refresh_dimensions(struct hist_browser *browser) | 43 | static void hist_browser__refresh_dimensions(struct hist_browser *browser) |
39 | { | 44 | { |
40 | /* 3 == +/- toggle symbol before actual hist_entry rendering */ | 45 | /* 3 == +/- toggle symbol before actual hist_entry rendering */ |
@@ -44,7 +49,8 @@ static void hist_browser__refresh_dimensions(struct hist_browser *browser) | |||
44 | 49 | ||
45 | static void hist_browser__reset(struct hist_browser *browser) | 50 | static void hist_browser__reset(struct hist_browser *browser) |
46 | { | 51 | { |
47 | browser->b.nr_entries = browser->hists->nr_entries; | 52 | hist_browser__update_nr_entries(browser); |
53 | browser->b.nr_entries = browser->nr_non_filtered_entries; | ||
48 | hist_browser__refresh_dimensions(browser); | 54 | hist_browser__refresh_dimensions(browser); |
49 | ui_browser__reset_index(&browser->b); | 55 | ui_browser__reset_index(&browser->b); |
50 | } | 56 | } |
@@ -319,9 +325,10 @@ static int hist_browser__run(struct hist_browser *browser, const char *ev_name, | |||
319 | int delay_secs = hbt ? hbt->refresh : 0; | 325 | int delay_secs = hbt ? hbt->refresh : 0; |
320 | 326 | ||
321 | browser->b.entries = &browser->hists->entries; | 327 | browser->b.entries = &browser->hists->entries; |
322 | browser->b.nr_entries = browser->hists->nr_entries; | 328 | if (hist_browser__has_filter(browser)) |
323 | if (browser->min_pcnt) | ||
324 | browser->b.nr_entries = browser->nr_non_filtered_entries; | 329 | browser->b.nr_entries = browser->nr_non_filtered_entries; |
330 | else | ||
331 | browser->b.nr_entries = browser->hists->nr_entries; | ||
325 | 332 | ||
326 | hist_browser__refresh_dimensions(browser); | 333 | hist_browser__refresh_dimensions(browser); |
327 | hists__browser_title(browser->hists, title, sizeof(title), ev_name); | 334 | hists__browser_title(browser->hists, title, sizeof(title), ev_name); |
@@ -338,7 +345,7 @@ static int hist_browser__run(struct hist_browser *browser, const char *ev_name, | |||
338 | u64 nr_entries; | 345 | u64 nr_entries; |
339 | hbt->timer(hbt->arg); | 346 | hbt->timer(hbt->arg); |
340 | 347 | ||
341 | if (browser->min_pcnt) { | 348 | if (hist_browser__has_filter(browser)) { |
342 | hist_browser__update_nr_entries(browser); | 349 | hist_browser__update_nr_entries(browser); |
343 | nr_entries = browser->nr_non_filtered_entries; | 350 | nr_entries = browser->nr_non_filtered_entries; |
344 | } else { | 351 | } else { |
@@ -1347,6 +1354,11 @@ static void hist_browser__update_nr_entries(struct hist_browser *hb) | |||
1347 | u64 nr_entries = 0; | 1354 | u64 nr_entries = 0; |
1348 | struct rb_node *nd = rb_first(&hb->hists->entries); | 1355 | struct rb_node *nd = rb_first(&hb->hists->entries); |
1349 | 1356 | ||
1357 | if (hb->min_pcnt == 0) { | ||
1358 | hb->nr_non_filtered_entries = hb->hists->nr_non_filtered_entries; | ||
1359 | return; | ||
1360 | } | ||
1361 | |||
1350 | while ((nd = hists__filter_entries(nd, hb->hists, | 1362 | while ((nd = hists__filter_entries(nd, hb->hists, |
1351 | hb->min_pcnt)) != NULL) { | 1363 | hb->min_pcnt)) != NULL) { |
1352 | nr_entries++; | 1364 | nr_entries++; |