aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util
diff options
context:
space:
mode:
authorNamhyung Kim <namhyung.kim@lge.com>2013-03-05 00:53:26 -0500
committerArnaldo Carvalho de Melo <acme@redhat.com>2013-03-15 12:06:05 -0400
commit759ff497e0e6749437b6723f8d26de0b1833c199 (patch)
treee8105fb758da21ac4a796ee669d21efa12b1aabf /tools/perf/util
parentb1dd443296b4f8c6869eba790eec950f80392aea (diff)
perf evsel: Introduce perf_evsel__is_group_event() helper
The perf_evsel__is_group_event function is for checking whether given evsel needs event group view support or not. Please note that it's different to the existing perf_evsel__is_group_leader() which checks only the given evsel is a leader or a standalone (i.e. non-group) event regardless of event group feature. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Cc: Andi Kleen <andi@firstfloor.org> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Pekka Enberg <penberg@kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/1362462812-30885-7-git-send-email-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util')
-rw-r--r--tools/perf/util/annotate.c9
-rw-r--r--tools/perf/util/evsel.h24
2 files changed, 27 insertions, 6 deletions
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 0955cff5b0ef..f080cc40f00b 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -649,9 +649,7 @@ static int disasm_line__print(struct disasm_line *dl, struct symbol *sym, u64 st
649 649
650 next = disasm__get_next_ip_line(&notes->src->source, dl); 650 next = disasm__get_next_ip_line(&notes->src->source, dl);
651 651
652 if (symbol_conf.event_group && 652 if (perf_evsel__is_group_event(evsel)) {
653 perf_evsel__is_group_leader(evsel) &&
654 evsel->nr_members > 1) {
655 nr_percent = evsel->nr_members; 653 nr_percent = evsel->nr_members;
656 ppercents = calloc(nr_percent, sizeof(double)); 654 ppercents = calloc(nr_percent, sizeof(double));
657 if (ppercents == NULL) 655 if (ppercents == NULL)
@@ -721,8 +719,7 @@ static int disasm_line__print(struct disasm_line *dl, struct symbol *sym, u64 st
721 if (queue) 719 if (queue)
722 return -1; 720 return -1;
723 721
724 if (symbol_conf.event_group && 722 if (perf_evsel__is_group_event(evsel))
725 perf_evsel__is_group_leader(evsel))
726 width *= evsel->nr_members; 723 width *= evsel->nr_members;
727 724
728 if (!*dl->line) 725 if (!*dl->line)
@@ -1126,7 +1123,7 @@ int symbol__annotate_printf(struct symbol *sym, struct map *map,
1126 len = symbol__size(sym); 1123 len = symbol__size(sym);
1127 namelen = strlen(d_filename); 1124 namelen = strlen(d_filename);
1128 1125
1129 if (symbol_conf.event_group && perf_evsel__is_group_leader(evsel)) 1126 if (perf_evsel__is_group_event(evsel))
1130 width *= evsel->nr_members; 1127 width *= evsel->nr_members;
1131 1128
1132 printf(" %-*.*s| Source code & Disassembly of %s\n", 1129 printf(" %-*.*s| Source code & Disassembly of %s\n",
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
index 52021c3087df..bf758e53c929 100644
--- a/tools/perf/util/evsel.h
+++ b/tools/perf/util/evsel.h
@@ -9,6 +9,7 @@
9#include "xyarray.h" 9#include "xyarray.h"
10#include "cgroup.h" 10#include "cgroup.h"
11#include "hist.h" 11#include "hist.h"
12#include "symbol.h"
12 13
13struct perf_counts_values { 14struct perf_counts_values {
14 union { 15 union {
@@ -246,11 +247,34 @@ static inline struct perf_evsel *perf_evsel__next(struct perf_evsel *evsel)
246 return list_entry(evsel->node.next, struct perf_evsel, node); 247 return list_entry(evsel->node.next, struct perf_evsel, node);
247} 248}
248 249
250/**
251 * perf_evsel__is_group_leader - Return whether given evsel is a leader event
252 *
253 * @evsel - evsel selector to be tested
254 *
255 * Return %true if @evsel is a group leader or a stand-alone event
256 */
249static inline bool perf_evsel__is_group_leader(const struct perf_evsel *evsel) 257static inline bool perf_evsel__is_group_leader(const struct perf_evsel *evsel)
250{ 258{
251 return evsel->leader == evsel; 259 return evsel->leader == evsel;
252} 260}
253 261
262/**
263 * perf_evsel__is_group_event - Return whether given evsel is a group event
264 *
265 * @evsel - evsel selector to be tested
266 *
267 * Return %true iff event group view is enabled and @evsel is a actual group
268 * leader which has other members in the group
269 */
270static inline bool perf_evsel__is_group_event(struct perf_evsel *evsel)
271{
272 if (!symbol_conf.event_group)
273 return false;
274
275 return perf_evsel__is_group_leader(evsel) && evsel->nr_members > 1;
276}
277
254struct perf_attr_details { 278struct perf_attr_details {
255 bool freq; 279 bool freq;
256 bool verbose; 280 bool verbose;