Commit cb0b29e0861659c9eef9664772cd7e845ba1104a
1 parent
7b56cce271
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
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); |