diff options
Diffstat (limited to 'tools/perf/util/session.c')
-rw-r--r-- | tools/perf/util/session.c | 54 |
1 files changed, 26 insertions, 28 deletions
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 5c412310f266..c71ced7db152 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 | ||
@@ -873,9 +865,9 @@ static int process_finished_round(struct perf_tool *tool __maybe_unused, | |||
873 | } | 865 | } |
874 | 866 | ||
875 | int perf_session__queue_event(struct perf_session *s, union perf_event *event, | 867 | int perf_session__queue_event(struct perf_session *s, union perf_event *event, |
876 | struct perf_sample *sample, u64 file_offset) | 868 | u64 timestamp, u64 file_offset) |
877 | { | 869 | { |
878 | return ordered_events__queue(&s->ordered_events, event, sample, file_offset); | 870 | return ordered_events__queue(&s->ordered_events, event, timestamp, file_offset); |
879 | } | 871 | } |
880 | 872 | ||
881 | static void callchain__lbr_callstack_printf(struct perf_sample *sample) | 873 | static void callchain__lbr_callstack_printf(struct perf_sample *sample) |
@@ -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, |
@@ -1350,10 +1348,11 @@ static s64 perf_session__process_user_event(struct perf_session *session, | |||
1350 | { | 1348 | { |
1351 | struct ordered_events *oe = &session->ordered_events; | 1349 | struct ordered_events *oe = &session->ordered_events; |
1352 | struct perf_tool *tool = session->tool; | 1350 | struct perf_tool *tool = session->tool; |
1351 | struct perf_sample sample = { .time = 0, }; | ||
1353 | int fd = perf_data__fd(session->data); | 1352 | int fd = perf_data__fd(session->data); |
1354 | int err; | 1353 | int err; |
1355 | 1354 | ||
1356 | dump_event(session->evlist, event, file_offset, NULL); | 1355 | dump_event(session->evlist, event, file_offset, &sample); |
1357 | 1356 | ||
1358 | /* These events are processed right away */ | 1357 | /* These events are processed right away */ |
1359 | switch (event->header.type) { | 1358 | switch (event->header.type) { |
@@ -1495,7 +1494,6 @@ static s64 perf_session__process_event(struct perf_session *session, | |||
1495 | { | 1494 | { |
1496 | struct perf_evlist *evlist = session->evlist; | 1495 | struct perf_evlist *evlist = session->evlist; |
1497 | struct perf_tool *tool = session->tool; | 1496 | struct perf_tool *tool = session->tool; |
1498 | struct perf_sample sample; | ||
1499 | int ret; | 1497 | int ret; |
1500 | 1498 | ||
1501 | if (session->header.needs_swap) | 1499 | if (session->header.needs_swap) |
@@ -1509,21 +1507,19 @@ static s64 perf_session__process_event(struct perf_session *session, | |||
1509 | if (event->header.type >= PERF_RECORD_USER_TYPE_START) | 1507 | if (event->header.type >= PERF_RECORD_USER_TYPE_START) |
1510 | return perf_session__process_user_event(session, event, file_offset); | 1508 | return perf_session__process_user_event(session, event, file_offset); |
1511 | 1509 | ||
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) { | 1510 | if (tool->ordered_events) { |
1520 | ret = perf_session__queue_event(session, event, &sample, file_offset); | 1511 | u64 timestamp = -1ULL; |
1512 | |||
1513 | ret = perf_evlist__parse_sample_timestamp(evlist, event, ×tamp); | ||
1514 | if (ret && ret != -1) | ||
1515 | return ret; | ||
1516 | |||
1517 | ret = perf_session__queue_event(session, event, timestamp, file_offset); | ||
1521 | if (ret != -ETIME) | 1518 | if (ret != -ETIME) |
1522 | return ret; | 1519 | return ret; |
1523 | } | 1520 | } |
1524 | 1521 | ||
1525 | return perf_session__deliver_event(session, event, &sample, tool, | 1522 | return perf_session__deliver_event(session, event, tool, file_offset); |
1526 | file_offset); | ||
1527 | } | 1523 | } |
1528 | 1524 | ||
1529 | void perf_event_header__bswap(struct perf_event_header *hdr) | 1525 | void perf_event_header__bswap(struct perf_event_header *hdr) |
@@ -1777,7 +1773,8 @@ done: | |||
1777 | err = perf_session__flush_thread_stacks(session); | 1773 | err = perf_session__flush_thread_stacks(session); |
1778 | out_err: | 1774 | out_err: |
1779 | free(buf); | 1775 | free(buf); |
1780 | perf_session__warn_about_errors(session); | 1776 | if (!tool->no_warn) |
1777 | perf_session__warn_about_errors(session); | ||
1781 | ordered_events__free(&session->ordered_events); | 1778 | ordered_events__free(&session->ordered_events); |
1782 | auxtrace__free_events(session); | 1779 | auxtrace__free_events(session); |
1783 | return err; | 1780 | return err; |
@@ -1933,7 +1930,8 @@ out: | |||
1933 | err = perf_session__flush_thread_stacks(session); | 1930 | err = perf_session__flush_thread_stacks(session); |
1934 | out_err: | 1931 | out_err: |
1935 | ui_progress__finish(); | 1932 | ui_progress__finish(); |
1936 | perf_session__warn_about_errors(session); | 1933 | if (!tool->no_warn) |
1934 | perf_session__warn_about_errors(session); | ||
1937 | /* | 1935 | /* |
1938 | * We may switching perf.data output, make ordered_events | 1936 | * We may switching perf.data output, make ordered_events |
1939 | * reusable. | 1937 | * reusable. |