Commit 7f3be652 authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo
Browse files

perf session: Use perf_evlist__sample_type more extensively

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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent bde09467
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -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;
+2 −8
Original line number Diff line number Diff line
@@ -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,
@@ -756,12 +756,6 @@ static int test__PERF_RECORD(void)
		goto out_delete_evlist;
	}

	/*
	 * 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) {
+22 −9
Original line number Diff line number Diff line
@@ -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;
	}
+3 −8
Original line number Diff line number Diff line
@@ -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,
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);
}
				    const struct perf_sample *sample);

struct perf_evsel *perf_session__find_first_evtype(struct perf_session *session,
					    unsigned int type);