aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/session.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/util/session.c')
-rw-r--r--tools/perf/util/session.c41
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
28static int perf_session__deliver_event(struct perf_session *session, 28static 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)
107static int ordered_events__deliver_event(struct ordered_events *oe, 106static 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
1329static int perf_session__deliver_event(struct perf_session *session, 1321static 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
1347static s64 perf_session__process_user_event(struct perf_session *session, 1345static 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, &timestamp);
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
1529void perf_event_header__bswap(struct perf_event_header *hdr) 1524void perf_event_header__bswap(struct perf_event_header *hdr)