Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 97f63e4a authored by Namhyung Kim's avatar Namhyung Kim Committed by Arnaldo Carvalho de Melo
Browse files

perf tools: Keep group information



Add a few of group-related field in struct perf_{evlist,evsel} so that
the group information in a evlist can be known easily.  It only counts
groups which have more than 1 members since leader-only groups are
treated as non-group events.

Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1358845787-1350-2-git-send-email-namhyung@kernel.org


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 0de233b9
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -117,6 +117,9 @@ void __perf_evlist__set_leader(struct list_head *list)
	struct perf_evsel *evsel, *leader;

	leader = list_entry(list->next, struct perf_evsel, node);
	evsel = list_entry(list->prev, struct perf_evsel, node);

	leader->nr_members = evsel->idx - leader->idx + 1;

	list_for_each_entry(evsel, list, node) {
		if (evsel != leader)
@@ -126,9 +129,11 @@ void __perf_evlist__set_leader(struct list_head *list)

void perf_evlist__set_leader(struct perf_evlist *evlist)
{
	if (evlist->nr_entries)
	if (evlist->nr_entries) {
		evlist->nr_groups = evlist->nr_entries > 1 ? 1 : 0;
		__perf_evlist__set_leader(&evlist->entries);
	}
}

int perf_evlist__add_default(struct perf_evlist *evlist)
{
+1 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ struct perf_evlist {
	struct list_head entries;
	struct hlist_head heads[PERF_EVLIST__HLIST_SIZE];
	int		 nr_entries;
	int		 nr_groups;
	int		 nr_fds;
	int		 nr_mmaps;
	int		 mmap_len;
+6 −0
Original line number Diff line number Diff line
@@ -74,6 +74,7 @@ struct perf_evsel {
	bool 			needs_swap;
	/* parse modifier helper */
	int			exclude_GH;
	int			nr_members;
	struct perf_evsel	*leader;
	char			*group_name;
};
@@ -259,4 +260,9 @@ bool perf_evsel__fallback(struct perf_evsel *evsel, int err,
int perf_evsel__open_strerror(struct perf_evsel *evsel,
			      struct perf_target *target,
			      int err, char *msg, size_t size);

static inline int perf_evsel__group_idx(struct perf_evsel *evsel)
{
	return evsel->idx - evsel->leader->idx;
}
#endif /* __PERF_EVSEL_H */
+1 −0
Original line number Diff line number Diff line
@@ -884,6 +884,7 @@ int parse_events(struct perf_evlist *evlist, const char *str)
	if (!ret) {
		int entries = data.idx - evlist->nr_entries;
		perf_evlist__splice_list_tail(evlist, &data.list, entries);
		evlist->nr_groups += data.nr_groups;
		return 0;
	}

+1 −0
Original line number Diff line number Diff line
@@ -64,6 +64,7 @@ struct parse_events_term {
struct parse_events_evlist {
	struct list_head list;
	int idx;
	int nr_groups;
};

struct parse_events_terms {
Loading