mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 21:38:32 +08:00
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: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
bde09467b5
commit
7f3be652c1
@ -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;
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user