perf session: Use perf_evlist__sample_type more extensively
authorArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 1 Aug 2012 22:15:52 +0000 (19:15 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 1 Aug 2012 22:15:52 +0000 (19:15 -0300)
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
tools/perf/builtin-test.c
tools/perf/util/session.c
tools/perf/util/session.h

index 69b1c1185159174f070425d15c17afc8d5325f50..7c88a243b5db04308c9faf2e6aaf32d19bf0bb54 100644 (file)
@@ -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;
index 2ea5fe4cc940b6009798b2d4fa6ec6bd05a0ea51..e5032ed2f2596d4830bf80f0bdb045f1af9c441a 100644 (file)
@@ -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) {
index b8da60d1ecb5d349a8b39f5ab3df81c0306f55d3..00e180e116e7b0031d3ec030b8f87b041cf2aeb2 100644 (file)
@@ -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;
        }
index 4d549e28248f314fc99a277effe44190c5987662..c45ce4348b839a4ed8323079b2e22a8ea4df8df9 100644 (file)
@@ -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);