Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1305287

[tip:perf/core] perf tools: Add all matching dynamic sort keys for field name

From tip-bot for Namhyung Kim <tipbot@zytor.com>
Newsgroups linux.kernel
Subject [tip:perf/core] perf tools: Add all matching dynamic sort keys for field name
Date 2016-01-09 17:40 +0100
Message-ID <qP4Iy-87R-9@gated-at.bofh.it> (permalink)
References <qNxvm-Wb-45@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Commit-ID:  9735be24ec086fbccee321471cc21dedefa956a6
Gitweb:     http://git.kernel.org/tip/9735be24ec086fbccee321471cc21dedefa956a6
Author:     Namhyung Kim <namhyung@kernel.org>
AuthorDate: Tue, 5 Jan 2016 19:58:35 +0900
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Wed, 6 Jan 2016 20:11:14 -0300

perf tools: Add all matching dynamic sort keys for field name

When a perf.data file has multiple events, it's likely to be similar
(tracepoint) events.  In that case, they might have same field name so
add all of them to sort keys instead of bailing out.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1451991518-25673-2-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/sort.c | 48 ++++++++++++++++++++++++++++++++----------------
 1 file changed, 32 insertions(+), 16 deletions(-)

diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c
index 4b4b1c5..04e2a5c 100644
--- a/tools/perf/util/sort.c
+++ b/tools/perf/util/sort.c
@@ -1863,10 +1863,9 @@ static int parse_field_name(char *str, char **event, char **field, char **opt)
 }
 
 /* find match evsel using a given event name.  The event name can be:
- *   1. NULL - only valid for single event session
- *   2. '%' + event index (e.g. '%1' for first event)
- *   3. full event name (e.g. sched:sched_switch)
- *   4. partial event name (should not contain ':')
+ *   1. '%' + event index (e.g. '%1' for first event)
+ *   2. full event name (e.g. sched:sched_switch)
+ *   3. partial event name (should not contain ':')
  */
 static struct perf_evsel *find_evsel(struct perf_evlist *evlist, char *event_name)
 {
@@ -1875,16 +1874,6 @@ static struct perf_evsel *find_evsel(struct perf_evlist *evlist, char *event_nam
 	bool full_name;
 
 	/* case 1 */
-	if (event_name == NULL) {
-		if (evlist->nr_entries != 1) {
-			pr_debug("event name should be given\n");
-			return NULL;
-		}
-
-		return perf_evlist__first(evlist);
-	}
-
-	/* case 2 */
 	if (event_name[0] == '%') {
 		int nr = strtol(event_name+1, NULL, 0);
 
@@ -1900,10 +1889,10 @@ static struct perf_evsel *find_evsel(struct perf_evlist *evlist, char *event_nam
 
 	full_name = !!strchr(event_name, ':');
 	evlist__for_each(evlist, pos) {
-		/* case 3 */
+		/* case 2 */
 		if (full_name && !strcmp(pos->name, event_name))
 			return pos;
-		/* case 4 */
+		/* case 3 */
 		if (!full_name && strstr(pos->name, event_name)) {
 			if (evsel) {
 				pr_debug("'%s' event is ambiguous: it can be %s or %s\n",
@@ -1965,6 +1954,28 @@ static int add_all_dynamic_fields(struct perf_evlist *evlist, bool raw_trace)
 	return 0;
 }
 
+static int add_all_matching_fields(struct perf_evlist *evlist,
+				   char *field_name, bool raw_trace)
+{
+	int ret = -ESRCH;
+	struct perf_evsel *evsel;
+	struct format_field *field;
+
+	evlist__for_each(evlist, evsel) {
+		if (evsel->attr.type != PERF_TYPE_TRACEPOINT)
+			continue;
+
+		field = pevent_find_any_field(evsel->tp_format, field_name);
+		if (field == NULL)
+			continue;
+
+		ret = __dynamic_dimension__add(evsel, field, raw_trace);
+		if (ret < 0)
+			break;
+	}
+	return ret;
+}
+
 static int add_dynamic_entry(struct perf_evlist *evlist, const char *tok)
 {
 	char *str, *event_name, *field_name, *opt_name;
@@ -1999,6 +2010,11 @@ static int add_dynamic_entry(struct perf_evlist *evlist, const char *tok)
 		goto out;
 	}
 
+	if (event_name == NULL) {
+		ret = add_all_matching_fields(evlist, field_name, raw_trace);
+		goto out;
+	}
+
 	evsel = find_evsel(evlist, event_name);
 	if (evsel == NULL) {
 		pr_debug("Cannot find event: %s\n", event_name);

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v2 1/5] perf tools: Fix segfault when using -s trace_fields Namhyung Kim <namhyung@kernel.org> - 2016-01-05 12:00 +0100
  [PATCH v2 3/5] perf tools: Add document for dynamic sort keys Namhyung Kim <namhyung@kernel.org> - 2016-01-05 12:00 +0100
    [tip:perf/core] perf report:   Add documentation for dynamic sort keys tip-bot for Namhyung Kim <tipbot@zytor.com> - 2016-01-09 17:30 +0100
  [PATCH v2 2/5] perf tools: Add all matching dynamic sort keys for field name Namhyung Kim <namhyung@kernel.org> - 2016-01-05 12:00 +0100
    Re: [PATCH v2 2/5] perf tools: Add all matching dynamic sort keys  for field name Jiri Olsa <jolsa@redhat.com> - 2016-01-05 15:30 +0100
    [tip:perf/core] perf tools:   Add all matching dynamic sort keys for field name tip-bot for Namhyung Kim <tipbot@zytor.com> - 2016-01-09 17:40 +0100
  [PATCH v2 4/5] perf tools: Support dynamic sort keys for -F/--fields Namhyung Kim <namhyung@kernel.org> - 2016-01-05 12:10 +0100
    Re: [PATCH v2 4/5] perf tools: Support dynamic sort keys for  -F/--fields Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-01-05 23:20 +0100
      Re: [PATCH v2 4/5] perf tools: Support dynamic sort keys for  -F/--fields Namhyung Kim <namhyung@kernel.org> - 2016-01-06 01:00 +0100
  [PATCH v2 5/5] perf evlist: Add -T/--trace option to show trace fields Namhyung Kim <namhyung@kernel.org> - 2016-01-05 12:10 +0100
    Re: [PATCH v2 5/5] perf evlist: Add -T/--trace option to show trace  fields Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-01-05 23:30 +0100
      Re: [PATCH v2 5/5] perf evlist: Add -T/--trace option to show trace  fields Namhyung Kim <namhyung@kernel.org> - 2016-01-06 01:10 +0100
        Re: [PATCH v2 5/5] perf evlist: Add -T/--trace option to show trace  fields Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-01-06 03:00 +0100
  Re: [PATCH v2 1/5] perf tools: Fix segfault when using -s  trace_fields Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-01-05 23:00 +0100
    Re: [PATCH v2 1/5] perf tools: Fix segfault when using -s  trace_fields Namhyung Kim <namhyung@kernel.org> - 2016-01-06 00:40 +0100
  [tip:perf/core] perf tools: Add 'trace_fields' dynamic sort key tip-bot for Namhyung Kim <tipbot@zytor.com> - 2016-01-09 17:30 +0100

csiph-web