diff options
Diffstat (limited to 'tools/perf/util/session.c')
| -rw-r--r-- | tools/perf/util/session.c | 41 |
1 files changed, 18 insertions, 23 deletions
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 8976e417eab2..df2857137908 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c | |||
| @@ -27,7 +27,6 @@ | |||
| 27 | 27 | ||
| 28 | static int perf_session__deliver_event(struct perf_session *session, | 28 | static int perf_session__deliver_event(struct perf_session *session, |
| 29 | union perf_event *event, | 29 | union perf_event *event, |
| 30 | struct perf_sample *sample, | ||
| 31 | struct perf_tool *tool, | 30 | struct perf_tool *tool, |
| 32 | u64 file_offset); | 31 | u64 file_offset); |
| 33 | 32 | ||
| @@ -107,17 +106,10 @@ static void perf_session__set_comm_exec(struct perf_session *session) | |||
| 107 | static int ordered_events__deliver_event(struct ordered_events *oe, | 106 | static int ordered_events__deliver_event(struct ordered_events *oe, |
| 108 | struct ordered_event *event) | 107 | struct ordered_event *event) |
| 109 | { | 108 | { |
| 110 | struct perf_sample sample; | ||
| 111 | struct perf_session *session = container_of(oe, struct perf_session, | 109 | struct perf_session *session = container_of(oe, struct perf_session, |
| 112 | ordered_events); | 110 | ordered_events); |
| 113 | int ret = perf_evlist__parse_sample(session->evlist, event->event, &sample); | ||
| 114 | |||
| 115 | if (ret) { | ||
| 116 | pr_err("Can't parse sample, err = %d\n", ret); | ||
| 117 | return ret; | ||
| 118 | } | ||
| 119 | 111 | ||
| 120 | return perf_session__deliver_event(session, event->event, &sample, | 112 | return perf_session__deliver_event(session, event->event, |
| 121 | session->tool, event->file_offset); | 113 | session->tool, event->file_offset); |
| 122 | } | 114 | } |
| 123 | 115 | ||
| @@ -1328,20 +1320,26 @@ static int machines__deliver_event(struct machines *machines, | |||
| 1328 | 1320 | ||
| 1329 | static int perf_session__deliver_event(struct perf_session *session, | 1321 | static int perf_session__deliver_event(struct perf_session *session, |
| 1330 | union perf_event *event, | 1322 | union perf_event *event, |
| 1331 | struct perf_sample *sample, | ||
| 1332 | struct perf_tool *tool, | 1323 | struct perf_tool *tool, |
| 1333 | u64 file_offset) | 1324 | u64 file_offset) |
| 1334 | { | 1325 | { |
| 1326 | struct perf_sample sample; | ||
| 1335 | int ret; | 1327 | int ret; |
| 1336 | 1328 | ||
| 1337 | ret = auxtrace__process_event(session, event, sample, tool); | 1329 | ret = perf_evlist__parse_sample(session->evlist, event, &sample); |
| 1330 | if (ret) { | ||
| 1331 | pr_err("Can't parse sample, err = %d\n", ret); | ||
| 1332 | return ret; | ||
| 1333 | } | ||
| 1334 | |||
| 1335 | ret = auxtrace__process_event(session, event, &sample, tool); | ||
| 1338 | if (ret < 0) | 1336 | if (ret < 0) |
| 1339 | return ret; | 1337 | return ret; |
| 1340 | if (ret > 0) | 1338 | if (ret > 0) |
| 1341 | return 0; | 1339 | return 0; |
| 1342 | 1340 | ||
| 1343 | return machines__deliver_event(&session->machines, session->evlist, | 1341 | return machines__deliver_event(&session->machines, session->evlist, |
| 1344 | event, sample, tool, file_offset); | 1342 | event, &sample, tool, file_offset); |
| 1345 | } | 1343 | } |
| 1346 | 1344 | ||
| 1347 | static s64 perf_session__process_user_event(struct perf_session *session, | 1345 | static s64 perf_session__process_user_event(struct perf_session *session, |
| @@ -1495,7 +1493,6 @@ static s64 perf_session__process_event(struct perf_session *session, | |||
| 1495 | { | 1493 | { |
| 1496 | struct perf_evlist *evlist = session->evlist; | 1494 | struct perf_evlist *evlist = session->evlist; |
| 1497 | struct perf_tool *tool = session->tool; | 1495 | struct perf_tool *tool = session->tool; |
| 1498 | struct perf_sample sample; | ||
| 1499 | int ret; | 1496 | int ret; |
| 1500 | 1497 | ||
| 1501 | if (session->header.needs_swap) | 1498 | if (session->header.needs_swap) |
| @@ -1509,21 +1506,19 @@ static s64 perf_session__process_event(struct perf_session *session, | |||
| 1509 | if (event->header.type >= PERF_RECORD_USER_TYPE_START) | 1506 | if (event->header.type >= PERF_RECORD_USER_TYPE_START) |
| 1510 | return perf_session__process_user_event(session, event, file_offset); | 1507 | return perf_session__process_user_event(session, event, file_offset); |
| 1511 | 1508 | ||
| 1512 | /* | ||
| 1513 | * For all kernel events we get the sample data | ||
| 1514 | */ | ||
| 1515 | ret = perf_evlist__parse_sample(evlist, event, &sample); | ||
| 1516 | if (ret) | ||
| 1517 | return ret; | ||
| 1518 | |||
| 1519 | if (tool->ordered_events) { | 1509 | if (tool->ordered_events) { |
| 1520 | ret = perf_session__queue_event(session, event, sample.time, file_offset); | 1510 | u64 timestamp; |
| 1511 | |||
| 1512 | ret = perf_evlist__parse_sample_timestamp(evlist, event, ×tamp); | ||
| 1513 | if (ret) | ||
| 1514 | return ret; | ||
| 1515 | |||
| 1516 | ret = perf_session__queue_event(session, event, timestamp, file_offset); | ||
| 1521 | if (ret != -ETIME) | 1517 | if (ret != -ETIME) |
| 1522 | return ret; | 1518 | return ret; |
| 1523 | } | 1519 | } |
| 1524 | 1520 | ||
| 1525 | return perf_session__deliver_event(session, event, &sample, tool, | 1521 | return perf_session__deliver_event(session, event, tool, file_offset); |
| 1526 | file_offset); | ||
| 1527 | } | 1522 | } |
| 1528 | 1523 | ||
| 1529 | void perf_event_header__bswap(struct perf_event_header *hdr) | 1524 | void perf_event_header__bswap(struct perf_event_header *hdr) |
