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.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent bde09467
...@@ -249,8 +249,9 @@ static int process_read_event(struct perf_tool *tool, ...@@ -249,8 +249,9 @@ static int process_read_event(struct perf_tool *tool,
static int perf_report__setup_sample_type(struct perf_report *rep) static int perf_report__setup_sample_type(struct perf_report *rep)
{ {
struct perf_session *self = rep->session; 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) { if (sort__has_parent) {
ui__error("Selected --sort parent, but no " ui__error("Selected --sort parent, but no "
"callchain data. Did you call " "callchain data. Did you call "
...@@ -274,7 +275,7 @@ static int perf_report__setup_sample_type(struct perf_report *rep) ...@@ -274,7 +275,7 @@ static int perf_report__setup_sample_type(struct perf_report *rep)
if (sort__branch_mode == 1) { if (sort__branch_mode == 1) {
if (!self->fd_pipe && 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. " ui__error("Selected -b but no branch data. "
"Did you call perf record without -b?\n"); "Did you call perf record without -b?\n");
return -1; return -1;
......
...@@ -661,7 +661,7 @@ static int test__PERF_RECORD(void) ...@@ -661,7 +661,7 @@ static int test__PERF_RECORD(void)
const char *cmd = "sleep"; const char *cmd = "sleep";
const char *argv[] = { cmd, "1", NULL, }; const char *argv[] = { cmd, "1", NULL, };
char *bname; char *bname;
u64 sample_type, prev_time = 0; u64 prev_time = 0;
bool found_cmd_mmap = false, bool found_cmd_mmap = false,
found_libc_mmap = false, found_libc_mmap = false,
found_vdso_mmap = false, found_vdso_mmap = false,
...@@ -756,12 +756,6 @@ static int test__PERF_RECORD(void) ...@@ -756,12 +756,6 @@ static int test__PERF_RECORD(void)
goto out_delete_evlist; 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 * Now that all is properly set up, enable the events, they will
* count just on workload.pid, which will start... * count just on workload.pid, which will start...
...@@ -787,7 +781,7 @@ static int test__PERF_RECORD(void) ...@@ -787,7 +781,7 @@ static int test__PERF_RECORD(void)
if (type < PERF_RECORD_MAX) if (type < PERF_RECORD_MAX)
nr_events[type]++; 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, evsel->sample_size, true,
&sample, false); &sample, false);
if (err < 0) { if (err < 0) {
......
...@@ -23,12 +23,20 @@ int perf_session__parse_sample(struct perf_session *session, ...@@ -23,12 +23,20 @@ int perf_session__parse_sample(struct perf_session *session,
struct perf_evsel *first; struct perf_evsel *first;
first = list_entry(session->evlist->entries.next, struct perf_evsel, node); 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, first->sample_size,
session->sample_id_all, sample, session->sample_id_all, sample,
session->header.needs_swap); 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) static int perf_session__open(struct perf_session *self, bool force)
{ {
struct stat input_stat; struct stat input_stat;
...@@ -95,7 +103,6 @@ static int perf_session__open(struct perf_session *self, bool force) ...@@ -95,7 +103,6 @@ static int perf_session__open(struct perf_session *self, bool force)
void perf_session__update_sample_type(struct perf_session *self) 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->sample_id_all = perf_evlist__sample_id_all(self->evlist);
self->id_hdr_size = perf_evlist__id_hdr_size(self->evlist); self->id_hdr_size = perf_evlist__id_hdr_size(self->evlist);
self->host_machine.id_hdr_size = self->id_hdr_size; self->host_machine.id_hdr_size = self->id_hdr_size;
...@@ -877,16 +884,18 @@ static void perf_session__print_tstamp(struct perf_session *session, ...@@ -877,16 +884,18 @@ static void perf_session__print_tstamp(struct perf_session *session,
union perf_event *event, union perf_event *event,
struct perf_sample *sample) struct perf_sample *sample)
{ {
u64 sample_type = perf_evlist__sample_type(session->evlist);
if (event->header.type != PERF_RECORD_SAMPLE && if (event->header.type != PERF_RECORD_SAMPLE &&
!session->sample_id_all) { !session->sample_id_all) {
fputs("-1 -1 ", stdout); fputs("-1 -1 ", stdout);
return; return;
} }
if ((session->sample_type & PERF_SAMPLE_CPU)) if ((sample_type & PERF_SAMPLE_CPU))
printf("%u ", sample->cpu); printf("%u ", sample->cpu);
if (session->sample_type & PERF_SAMPLE_TIME) if (sample_type & PERF_SAMPLE_TIME)
printf("%" PRIu64 " ", sample->time); printf("%" PRIu64 " ", sample->time);
} }
...@@ -911,6 +920,8 @@ static void dump_event(struct perf_session *session, union perf_event *event, ...@@ -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, static void dump_sample(struct perf_session *session, union perf_event *event,
struct perf_sample *sample) struct perf_sample *sample)
{ {
u64 sample_type;
if (!dump_trace) if (!dump_trace)
return; return;
...@@ -918,10 +929,12 @@ static void dump_sample(struct perf_session *session, union perf_event *event, ...@@ -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, event->header.misc, sample->pid, sample->tid, sample->ip,
sample->period, sample->addr); 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); callchain__printf(sample);
if (session->sample_type & PERF_SAMPLE_BRANCH_STACK) if (sample_type & PERF_SAMPLE_BRANCH_STACK)
branch_stack__printf(sample); branch_stack__printf(sample);
} }
...@@ -1018,7 +1031,7 @@ static int perf_session__preprocess_sample(struct perf_session *session, ...@@ -1018,7 +1031,7 @@ static int perf_session__preprocess_sample(struct perf_session *session,
union perf_event *event, struct perf_sample *sample) union perf_event *event, struct perf_sample *sample)
{ {
if (event->header.type != PERF_RECORD_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; return 0;
if (!ip_callchain__valid(sample->callchain, event)) { if (!ip_callchain__valid(sample->callchain, event)) {
...@@ -1401,9 +1414,9 @@ int perf_session__process_events(struct perf_session *self, ...@@ -1401,9 +1414,9 @@ int perf_session__process_events(struct perf_session *self,
return err; 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); pr_err("No trace sample to read. Did you call 'perf %s'?\n", msg);
return false; return false;
} }
......
...@@ -41,7 +41,6 @@ struct perf_session { ...@@ -41,7 +41,6 @@ struct perf_session {
* perf.data file. * perf.data file.
*/ */
struct hists hists; struct hists hists;
u64 sample_type;
int fd; int fd;
bool fd_pipe; bool fd_pipe;
bool repipe; bool repipe;
...@@ -133,13 +132,9 @@ int perf_session__parse_sample(struct perf_session *session, ...@@ -133,13 +132,9 @@ int perf_session__parse_sample(struct perf_session *session,
const union perf_event *event, const union perf_event *event,
struct perf_sample *sample); 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, union perf_event *event,
const struct perf_sample *sample) const struct perf_sample *sample);
{
return perf_event__synthesize_sample(event, session->sample_type,
sample, session->header.needs_swap);
}
struct perf_evsel *perf_session__find_first_evtype(struct perf_session *session, struct perf_evsel *perf_session__find_first_evtype(struct perf_session *session,
unsigned int type); unsigned int type);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment