Commit cb0b29e0861659c9eef9664772cd7e845ba1104a

Authored by Arnaldo Carvalho de Melo
1 parent 7b56cce271

perf evlist: Introduce perf_evlist__parse_sample

That is a more compact form of perf_session__parse_sample and to support
multiple evlists per perf_session is the way to go anyway.

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-vkxx3j5qktoj11bvcwmfjj13@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

Showing 7 changed files with 21 additions and 31 deletions Side-by-side Diff

tools/perf/builtin-test.c
... ... @@ -562,9 +562,7 @@
562 562 goto out_munmap;
563 563 }
564 564  
565   - err = perf_event__parse_sample(event, attr.sample_type,
566   - evsels[0]->sample_size,
567   - false, &sample, false);
  565 + err = perf_evlist__parse_sample(evlist, event, &sample, false);
568 566 if (err) {
569 567 pr_err("Can't parse sample, err = %d\n", err);
570 568 goto out_munmap;
... ... @@ -781,9 +779,7 @@
781 779 if (type < PERF_RECORD_MAX)
782 780 nr_events[type]++;
783 781  
784   - err = perf_event__parse_sample(event, evsel->attr.sample_type,
785   - evsel->sample_size, true,
786   - &sample, false);
  782 + err = perf_evlist__parse_sample(evlist, event, &sample, false);
787 783 if (err < 0) {
788 784 if (verbose)
789 785 perf_event__fprintf(event, stderr);
tools/perf/builtin-top.c
... ... @@ -811,7 +811,7 @@
811 811 int ret;
812 812  
813 813 while ((event = perf_evlist__mmap_read(top->evlist, idx)) != NULL) {
814   - ret = perf_session__parse_sample(session, event, &sample);
  814 + ret = perf_evlist__parse_sample(top->evlist, event, &sample, false);
815 815 if (ret) {
816 816 pr_err("Can't parse sample, err = %d\n", ret);
817 817 continue;
tools/perf/util/evlist.c
... ... @@ -881,4 +881,13 @@
881 881  
882 882 return 0;
883 883 }
  884 +
  885 +int perf_evlist__parse_sample(struct perf_evlist *evlist,
  886 + const union perf_event *event,
  887 + struct perf_sample *sample, bool swapped)
  888 +{
  889 + struct perf_evsel *e = list_entry(evlist->entries.next, struct perf_evsel, node);
  890 + return perf_event__parse_sample(event, e->attr.sample_type, e->sample_size,
  891 + e->attr.sample_id_all, sample, swapped);
  892 +}
tools/perf/util/evlist.h
... ... @@ -122,6 +122,10 @@
122 122 bool perf_evlist__sample_id_all(const const struct perf_evlist *evlist);
123 123 u16 perf_evlist__id_hdr_size(const struct perf_evlist *evlist);
124 124  
  125 +int perf_evlist__parse_sample(struct perf_evlist *evlist,
  126 + const union perf_event *event,
  127 + struct perf_sample *sample, bool swapped);
  128 +
125 129 bool perf_evlist__valid_sample_type(const struct perf_evlist *evlist);
126 130 bool perf_evlist__valid_sample_id_all(const struct perf_evlist *evlist);
127 131  
tools/perf/util/python.c
... ... @@ -797,17 +797,13 @@
797 797  
798 798 event = perf_evlist__mmap_read(evlist, cpu);
799 799 if (event != NULL) {
800   - struct perf_evsel *first;
801 800 PyObject *pyevent = pyrf_event__new(event);
802 801 struct pyrf_event *pevent = (struct pyrf_event *)pyevent;
803 802  
804 803 if (pyevent == NULL)
805 804 return PyErr_NoMemory();
806 805  
807   - first = list_entry(evlist->entries.next, struct perf_evsel, node);
808   - err = perf_event__parse_sample(event, first->attr.sample_type,
809   - first->sample_size,
810   - sample_id_all, &pevent->sample, false);
  806 + err = perf_evlist__parse_sample(evlist, event, &pevent->sample, false);
811 807 if (err)
812 808 return PyErr_Format(PyExc_OSError,
813 809 "perf: can't parse sample, err=%d", err);
tools/perf/util/session.c
... ... @@ -16,19 +16,6 @@
16 16 #include "cpumap.h"
17 17 #include "event-parse.h"
18 18  
19   -int perf_session__parse_sample(struct perf_session *session,
20   - const union perf_event *event,
21   - struct perf_sample *sample)
22   -{
23   - struct perf_evsel *first;
24   - first = list_entry(session->evlist->entries.next, struct perf_evsel, node);
25   -
26   - return perf_event__parse_sample(event, first->attr.sample_type,
27   - first->sample_size,
28   - first->attr.sample_id_all, sample,
29   - session->header.needs_swap);
30   -}
31   -
32 19 int perf_session__synthesize_sample(struct perf_session *session,
33 20 union perf_event *event,
34 21 const struct perf_sample *sample)
... ... @@ -692,7 +679,8 @@
692 679 if (iter->timestamp > limit)
693 680 break;
694 681  
695   - ret = perf_session__parse_sample(s, iter->event, &sample);
  682 + ret = perf_evlist__parse_sample(s->evlist, iter->event, &sample,
  683 + s->header.needs_swap);
696 684 if (ret)
697 685 pr_err("Can't parse sample, err = %d\n", ret);
698 686 else
... ... @@ -1103,7 +1091,8 @@
1103 1091 /*
1104 1092 * For all kernel events we get the sample data
1105 1093 */
1106   - ret = perf_session__parse_sample(session, event, &sample);
  1094 + ret = perf_evlist__parse_sample(session->evlist, event, &sample,
  1095 + session->header.needs_swap);
1107 1096 if (ret)
1108 1097 return ret;
1109 1098  
tools/perf/util/session.h
... ... @@ -126,10 +126,6 @@
126 126  
127 127 size_t perf_session__fprintf_nr_events(struct perf_session *session, FILE *fp);
128 128  
129   -int perf_session__parse_sample(struct perf_session *session,
130   - const union perf_event *event,
131   - struct perf_sample *sample);
132   -
133 129 int perf_session__synthesize_sample(struct perf_session *session,
134 130 union perf_event *event,
135 131 const struct perf_sample *sample);