mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@infradead.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org,
	Arnaldo Carvalho de Melo <acme@redhat.com>,
	David Ahern <dsahern@gmail.com>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	Jiri Olsa <jolsa@redhat.com>, Mike Galbraith <efault@gmx.de>,
	Namhyung Kim <namhyung@gmail.com>,
	Paul Mackerras <paulus@samba.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Stephane Eranian <eranian@google.com>
Subject: [PATCH 05/18] perf session: Use perf_evlist__sample_type more extensively
Date: Fri,  3 Aug 2012 11:00:57 -0300	[thread overview]
Message-ID: <1344002470-5965-6-git-send-email-acme@infradead.org> (raw)
In-Reply-To: <1344002470-5965-1-git-send-email-acme@infradead.org>

From: Arnaldo Carvalho de Melo <acme@redhat.com>

Removing perf_session->sample_type, as it can be obtained from the
evsel/evlist.

Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-mnt1zwlik7sp7z6ljc9kyefg@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-report.c |    5 +++--
 tools/perf/builtin-test.c   |   10 ++--------
 tools/perf/util/session.c   |   31 ++++++++++++++++++++++---------
 tools/perf/util/session.h   |   11 +++--------
 4 files changed, 30 insertions(+), 27 deletions(-)

diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index 69b1c11..7c88a24 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -249,8 +249,9 @@ static int process_read_event(struct perf_tool *tool,
 static int perf_report__setup_sample_type(struct perf_report *rep)
 {
 	struct perf_session *self = rep->session;
+	u64 sample_type = perf_evlist__sample_type(self->evlist);
 
-	if (!self->fd_pipe && !(self->sample_type & PERF_SAMPLE_CALLCHAIN)) {
+	if (!self->fd_pipe && !(sample_type & PERF_SAMPLE_CALLCHAIN)) {
 		if (sort__has_parent) {
 			ui__error("Selected --sort parent, but no "
 				    "callchain data. Did you call "
@@ -274,7 +275,7 @@ static int perf_report__setup_sample_type(struct perf_report *rep)
 
 	if (sort__branch_mode == 1) {
 		if (!self->fd_pipe &&
-		    !(self->sample_type & PERF_SAMPLE_BRANCH_STACK)) {
+		    !(sample_type & PERF_SAMPLE_BRANCH_STACK)) {
 			ui__error("Selected -b but no branch data. "
 				  "Did you call perf record without -b?\n");
 			return -1;
diff --git a/tools/perf/builtin-test.c b/tools/perf/builtin-test.c
index 2ea5fe4..e5032ed 100644
--- a/tools/perf/builtin-test.c
+++ b/tools/perf/builtin-test.c
@@ -661,7 +661,7 @@ static int test__PERF_RECORD(void)
 	const char *cmd = "sleep";
 	const char *argv[] = { cmd, "1", NULL, };
 	char *bname;
-	u64 sample_type, prev_time = 0;
+	u64 prev_time = 0;
 	bool found_cmd_mmap = false,
 	     found_libc_mmap = false,
 	     found_vdso_mmap = false,
@@ -757,12 +757,6 @@ static int test__PERF_RECORD(void)
 	}
 
 	/*
-	 * We'll need these two to parse the PERF_SAMPLE_* fields in each
-	 * event.
-	 */
-	sample_type = perf_evlist__sample_type(evlist);
-
-	/*
 	 * Now that all is properly set up, enable the events, they will
 	 * count just on workload.pid, which will start...
 	 */
@@ -787,7 +781,7 @@ static int test__PERF_RECORD(void)
 				if (type < PERF_RECORD_MAX)
 					nr_events[type]++;
 
-				err = perf_event__parse_sample(event, sample_type,
+				err = perf_event__parse_sample(event, evsel->attr.sample_type,
 							       evsel->sample_size, true,
 							       &sample, false);
 				if (err < 0) {
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index b8da60d..00e180e 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -23,12 +23,20 @@ int perf_session__parse_sample(struct perf_session *session,
 	struct perf_evsel *first;
 	first = list_entry(session->evlist->entries.next, struct perf_evsel, node);
 
-	return perf_event__parse_sample(event, session->sample_type,
+	return perf_event__parse_sample(event, first->attr.sample_type,
 					first->sample_size,
 					session->sample_id_all, sample,
 					session->header.needs_swap);
 }
 
+int perf_session__synthesize_sample(struct perf_session *session,
+				    union perf_event *event,
+				    const struct perf_sample *sample)
+{
+	return perf_event__synthesize_sample(event, perf_evlist__sample_type(session->evlist),
+					     sample, session->header.needs_swap);
+}
+
 static int perf_session__open(struct perf_session *self, bool force)
 {
 	struct stat input_stat;
@@ -95,7 +103,6 @@ out_close:
 
 void perf_session__update_sample_type(struct perf_session *self)
 {
-	self->sample_type = perf_evlist__sample_type(self->evlist);
 	self->sample_id_all = perf_evlist__sample_id_all(self->evlist);
 	self->id_hdr_size = perf_evlist__id_hdr_size(self->evlist);
 	self->host_machine.id_hdr_size = self->id_hdr_size;
@@ -877,16 +884,18 @@ static void perf_session__print_tstamp(struct perf_session *session,
 				       union perf_event *event,
 				       struct perf_sample *sample)
 {
+	u64 sample_type = perf_evlist__sample_type(session->evlist);
+
 	if (event->header.type != PERF_RECORD_SAMPLE &&
 	    !session->sample_id_all) {
 		fputs("-1 -1 ", stdout);
 		return;
 	}
 
-	if ((session->sample_type & PERF_SAMPLE_CPU))
+	if ((sample_type & PERF_SAMPLE_CPU))
 		printf("%u ", sample->cpu);
 
-	if (session->sample_type & PERF_SAMPLE_TIME)
+	if (sample_type & PERF_SAMPLE_TIME)
 		printf("%" PRIu64 " ", sample->time);
 }
 
@@ -911,6 +920,8 @@ static void dump_event(struct perf_session *session, union perf_event *event,
 static void dump_sample(struct perf_session *session, union perf_event *event,
 			struct perf_sample *sample)
 {
+	u64 sample_type;
+
 	if (!dump_trace)
 		return;
 
@@ -918,10 +929,12 @@ static void dump_sample(struct perf_session *session, union perf_event *event,
 	       event->header.misc, sample->pid, sample->tid, sample->ip,
 	       sample->period, sample->addr);
 
-	if (session->sample_type & PERF_SAMPLE_CALLCHAIN)
+	sample_type = perf_evlist__sample_type(session->evlist);
+
+	if (sample_type & PERF_SAMPLE_CALLCHAIN)
 		callchain__printf(sample);
 
-	if (session->sample_type & PERF_SAMPLE_BRANCH_STACK)
+	if (sample_type & PERF_SAMPLE_BRANCH_STACK)
 		branch_stack__printf(sample);
 }
 
@@ -1018,7 +1031,7 @@ static int perf_session__preprocess_sample(struct perf_session *session,
 					   union perf_event *event, struct perf_sample *sample)
 {
 	if (event->header.type != PERF_RECORD_SAMPLE ||
-	    !(session->sample_type & PERF_SAMPLE_CALLCHAIN))
+	    !(perf_evlist__sample_type(session->evlist) & PERF_SAMPLE_CALLCHAIN))
 		return 0;
 
 	if (!ip_callchain__valid(sample->callchain, event)) {
@@ -1401,9 +1414,9 @@ int perf_session__process_events(struct perf_session *self,
 	return err;
 }
 
-bool perf_session__has_traces(struct perf_session *self, const char *msg)
+bool perf_session__has_traces(struct perf_session *session, const char *msg)
 {
-	if (!(self->sample_type & PERF_SAMPLE_RAW)) {
+	if (!(perf_evlist__sample_type(session->evlist) & PERF_SAMPLE_RAW)) {
 		pr_err("No trace sample to read. Did you call 'perf %s'?\n", msg);
 		return false;
 	}
diff --git a/tools/perf/util/session.h b/tools/perf/util/session.h
index 4d549e2..c45ce43 100644
--- a/tools/perf/util/session.h
+++ b/tools/perf/util/session.h
@@ -41,7 +41,6 @@ struct perf_session {
 	 *	  perf.data file.
 	 */
 	struct hists		hists;
-	u64			sample_type;
 	int			fd;
 	bool			fd_pipe;
 	bool			repipe;
@@ -133,13 +132,9 @@ int perf_session__parse_sample(struct perf_session *session,
 			       const union perf_event *event,
 			       struct perf_sample *sample);
 
-static inline int perf_session__synthesize_sample(struct perf_session *session,
-						  union perf_event *event,
-						  const struct perf_sample *sample)
-{
-	return perf_event__synthesize_sample(event, session->sample_type,
-					     sample, session->header.needs_swap);
-}
+int perf_session__synthesize_sample(struct perf_session *session,
+				    union perf_event *event,
+				    const struct perf_sample *sample);
 
 struct perf_evsel *perf_session__find_first_evtype(struct perf_session *session,
 					    unsigned int type);
-- 
1.7.1


  parent reply	other threads:[~2012-08-03 14:02 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-03 14:00 [GIT PULL 00/18] perf/core fixes and improvements Arnaldo Carvalho de Melo
2012-08-03 14:00 ` [PATCH 01/18] perf test: Fix parse events automated tests Arnaldo Carvalho de Melo
2012-08-03 14:00 ` [PATCH 02/18] perf symbols: Fix array sizes for binary types arrays Arnaldo Carvalho de Melo
2012-08-03 14:00 ` [PATCH 03/18] perf target: Fix check on buffer size Arnaldo Carvalho de Melo
2012-08-03 14:17   ` Kirill A. Shutemov
2012-08-06  3:53     ` Namhyung Kim
2012-08-06  4:14       ` David Ahern
2012-08-06  4:15         ` Namhyung Kim
2012-08-03 14:00 ` [PATCH 04/18] perf evsel: Precalculate the sample size Arnaldo Carvalho de Melo
2012-08-03 14:00 ` Arnaldo Carvalho de Melo [this message]
2012-08-03 14:00 ` [PATCH 06/18] perf session: Use perf_evlist__sample_id_all more extensively Arnaldo Carvalho de Melo
2012-08-03 14:00 ` [PATCH 07/18] perf session: Use perf_evlist__id_hdr_size " Arnaldo Carvalho de Melo
2012-08-03 14:01 ` [PATCH 08/18] perf evlist: Introduce perf_evlist__parse_sample Arnaldo Carvalho de Melo
2012-08-03 15:24   ` David Ahern
2012-08-03 17:28     ` Stephane Eranian
2012-08-03 14:01 ` [PATCH 09/18] perf evsel: Adopt parse_sample method from perf_event Arnaldo Carvalho de Melo
2012-08-03 14:01 ` [PATCH 10/18] perf session: Remove no longer used synthesize_sample method Arnaldo Carvalho de Melo
2012-08-03 14:01 ` [PATCH 11/18] perf top: Error handling for counter creation should parallel perf-record Arnaldo Carvalho de Melo
2012-08-03 14:01 ` [PATCH 12/18] perf tool: Save cmdline from user in file header vs what is passed to record Arnaldo Carvalho de Melo
2012-08-03 14:01 ` [PATCH 13/18] perf kvm: Use strtol for walking guestmount directory Arnaldo Carvalho de Melo
2012-08-03 14:01 ` [PATCH 14/18] perf tools: Introducing rblist Arnaldo Carvalho de Melo
2012-08-03 14:01 ` [PATCH 15/18] perf tools: Change strlist to use the new rblist Arnaldo Carvalho de Melo
2012-08-03 14:01 ` [PATCH 16/18] perf tools: Introduce intlist Arnaldo Carvalho de Melo
2012-08-03 14:01 ` [PATCH 17/18] perf kvm top: Limit guest kernel info message to once Arnaldo Carvalho de Melo
2012-08-03 14:01 ` [PATCH 18/18] perf tools: Remove brace expansion from clean target Arnaldo Carvalho de Melo
2012-08-05 10:40 ` [GIT PULL 00/18] perf/core fixes and improvements Ingo Molnar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1344002470-5965-6-git-send-email-acme@infradead.org \
    --to=acme@infradead.org \
    --cc=acme@redhat.com \
    --cc=dsahern@gmail.com \
    --cc=efault@gmx.de \
    --cc=eranian@google.com \
    --cc=fweisbec@gmail.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@gmail.com \
    --cc=paulus@samba.org \
    --cc=peterz@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®