diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2010-07-21 08:19:41 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2010-07-23 07:55:59 -0400 |
commit | 7a007ca90b7c465137de06795ef4d5faa10f459e (patch) | |
tree | 3d84aac112f4389381dfb40aaf78dc1595b3c598 /tools/perf | |
parent | 3a01736e70a7d629140695ba46a901266b4460cc (diff) |
perf hists: Mark entries filtered by parent
And don't consider them in hists__inc_nr_entries.
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf')
-rw-r--r-- | tools/perf/util/hist.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c index 7b5848ce1505..d998d1d706eb 100644 --- a/tools/perf/util/hist.c +++ b/tools/perf/util/hist.c | |||
@@ -5,6 +5,12 @@ | |||
5 | #include "sort.h" | 5 | #include "sort.h" |
6 | #include <math.h> | 6 | #include <math.h> |
7 | 7 | ||
8 | enum hist_filter { | ||
9 | HIST_FILTER__DSO, | ||
10 | HIST_FILTER__THREAD, | ||
11 | HIST_FILTER__PARENT, | ||
12 | }; | ||
13 | |||
8 | struct callchain_param callchain_param = { | 14 | struct callchain_param callchain_param = { |
9 | .mode = CHAIN_GRAPH_REL, | 15 | .mode = CHAIN_GRAPH_REL, |
10 | .min_percent = 0.5 | 16 | .min_percent = 0.5 |
@@ -52,11 +58,20 @@ static struct hist_entry *hist_entry__new(struct hist_entry *template) | |||
52 | 58 | ||
53 | static void hists__inc_nr_entries(struct hists *self, struct hist_entry *entry) | 59 | static void hists__inc_nr_entries(struct hists *self, struct hist_entry *entry) |
54 | { | 60 | { |
61 | if (entry->filtered) | ||
62 | return; | ||
55 | if (entry->ms.sym && self->max_sym_namelen < entry->ms.sym->namelen) | 63 | if (entry->ms.sym && self->max_sym_namelen < entry->ms.sym->namelen) |
56 | self->max_sym_namelen = entry->ms.sym->namelen; | 64 | self->max_sym_namelen = entry->ms.sym->namelen; |
57 | ++self->nr_entries; | 65 | ++self->nr_entries; |
58 | } | 66 | } |
59 | 67 | ||
68 | static u8 symbol__parent_filter(const struct symbol *parent) | ||
69 | { | ||
70 | if (symbol_conf.exclude_other && parent == NULL) | ||
71 | return 1 << HIST_FILTER__PARENT; | ||
72 | return 0; | ||
73 | } | ||
74 | |||
60 | struct hist_entry *__hists__add_entry(struct hists *self, | 75 | struct hist_entry *__hists__add_entry(struct hists *self, |
61 | struct addr_location *al, | 76 | struct addr_location *al, |
62 | struct symbol *sym_parent, u64 period) | 77 | struct symbol *sym_parent, u64 period) |
@@ -75,6 +90,7 @@ struct hist_entry *__hists__add_entry(struct hists *self, | |||
75 | .level = al->level, | 90 | .level = al->level, |
76 | .period = period, | 91 | .period = period, |
77 | .parent = sym_parent, | 92 | .parent = sym_parent, |
93 | .filtered = symbol__parent_filter(sym_parent), | ||
78 | }; | 94 | }; |
79 | int cmp; | 95 | int cmp; |
80 | 96 | ||
@@ -790,11 +806,6 @@ print_entries: | |||
790 | return ret; | 806 | return ret; |
791 | } | 807 | } |
792 | 808 | ||
793 | enum hist_filter { | ||
794 | HIST_FILTER__DSO, | ||
795 | HIST_FILTER__THREAD, | ||
796 | }; | ||
797 | |||
798 | static void hists__remove_entry_filter(struct hists *self, struct hist_entry *h, | 809 | static void hists__remove_entry_filter(struct hists *self, struct hist_entry *h, |
799 | enum hist_filter filter) | 810 | enum hist_filter filter) |
800 | { | 811 | { |