diff options
Diffstat (limited to 'tools/perf/util/session.c')
-rw-r--r-- | tools/perf/util/session.c | 54 |
1 files changed, 44 insertions, 10 deletions
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 4008dab73424..7271c6bcb2dc 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c | |||
@@ -15,12 +15,13 @@ | |||
15 | #include "cpumap.h" | 15 | #include "cpumap.h" |
16 | #include "perf_regs.h" | 16 | #include "perf_regs.h" |
17 | #include "asm/bug.h" | 17 | #include "asm/bug.h" |
18 | #include "auxtrace.h" | ||
18 | 19 | ||
19 | static int machines__deliver_event(struct machines *machines, | 20 | static int perf_session__deliver_event(struct perf_session *session, |
20 | struct perf_evlist *evlist, | 21 | union perf_event *event, |
21 | union perf_event *event, | 22 | struct perf_sample *sample, |
22 | struct perf_sample *sample, | 23 | struct perf_tool *tool, |
23 | struct perf_tool *tool, u64 file_offset); | 24 | u64 file_offset); |
24 | 25 | ||
25 | static int perf_session__open(struct perf_session *session) | 26 | static int perf_session__open(struct perf_session *session) |
26 | { | 27 | { |
@@ -105,8 +106,8 @@ static int ordered_events__deliver_event(struct ordered_events *oe, | |||
105 | return ret; | 106 | return ret; |
106 | } | 107 | } |
107 | 108 | ||
108 | return machines__deliver_event(&session->machines, session->evlist, event->event, | 109 | return perf_session__deliver_event(session, event->event, &sample, |
109 | &sample, session->tool, event->file_offset); | 110 | session->tool, event->file_offset); |
110 | } | 111 | } |
111 | 112 | ||
112 | struct perf_session *perf_session__new(struct perf_data_file *file, | 113 | struct perf_session *perf_session__new(struct perf_data_file *file, |
@@ -185,6 +186,7 @@ static void perf_session_env__delete(struct perf_session_env *env) | |||
185 | 186 | ||
186 | void perf_session__delete(struct perf_session *session) | 187 | void perf_session__delete(struct perf_session *session) |
187 | { | 188 | { |
189 | auxtrace__free(session); | ||
188 | perf_session__destroy_kernel_maps(session); | 190 | perf_session__destroy_kernel_maps(session); |
189 | perf_session__delete_threads(session); | 191 | perf_session__delete_threads(session); |
190 | perf_session_env__delete(&session->header.env); | 192 | perf_session_env__delete(&session->header.env); |
@@ -1030,6 +1032,24 @@ static int machines__deliver_event(struct machines *machines, | |||
1030 | } | 1032 | } |
1031 | } | 1033 | } |
1032 | 1034 | ||
1035 | static int perf_session__deliver_event(struct perf_session *session, | ||
1036 | union perf_event *event, | ||
1037 | struct perf_sample *sample, | ||
1038 | struct perf_tool *tool, | ||
1039 | u64 file_offset) | ||
1040 | { | ||
1041 | int ret; | ||
1042 | |||
1043 | ret = auxtrace__process_event(session, event, sample, tool); | ||
1044 | if (ret < 0) | ||
1045 | return ret; | ||
1046 | if (ret > 0) | ||
1047 | return 0; | ||
1048 | |||
1049 | return machines__deliver_event(&session->machines, session->evlist, | ||
1050 | event, sample, tool, file_offset); | ||
1051 | } | ||
1052 | |||
1033 | static s64 perf_session__process_user_event(struct perf_session *session, | 1053 | static s64 perf_session__process_user_event(struct perf_session *session, |
1034 | union perf_event *event, | 1054 | union perf_event *event, |
1035 | u64 file_offset) | 1055 | u64 file_offset) |
@@ -1190,8 +1210,8 @@ static s64 perf_session__process_event(struct perf_session *session, | |||
1190 | return ret; | 1210 | return ret; |
1191 | } | 1211 | } |
1192 | 1212 | ||
1193 | return machines__deliver_event(&session->machines, evlist, event, | 1213 | return perf_session__deliver_event(session, event, &sample, tool, |
1194 | &sample, tool, file_offset); | 1214 | file_offset); |
1195 | } | 1215 | } |
1196 | 1216 | ||
1197 | void perf_event_header__bswap(struct perf_event_header *hdr) | 1217 | void perf_event_header__bswap(struct perf_event_header *hdr) |
@@ -1350,10 +1370,14 @@ more: | |||
1350 | done: | 1370 | done: |
1351 | /* do the final flush for ordered samples */ | 1371 | /* do the final flush for ordered samples */ |
1352 | err = ordered_events__flush(oe, OE_FLUSH__FINAL); | 1372 | err = ordered_events__flush(oe, OE_FLUSH__FINAL); |
1373 | if (err) | ||
1374 | goto out_err; | ||
1375 | err = auxtrace__flush_events(session, tool); | ||
1353 | out_err: | 1376 | out_err: |
1354 | free(buf); | 1377 | free(buf); |
1355 | perf_session__warn_about_errors(session); | 1378 | perf_session__warn_about_errors(session); |
1356 | ordered_events__free(&session->ordered_events); | 1379 | ordered_events__free(&session->ordered_events); |
1380 | auxtrace__free_events(session); | ||
1357 | return err; | 1381 | return err; |
1358 | } | 1382 | } |
1359 | 1383 | ||
@@ -1496,10 +1520,14 @@ more: | |||
1496 | out: | 1520 | out: |
1497 | /* do the final flush for ordered samples */ | 1521 | /* do the final flush for ordered samples */ |
1498 | err = ordered_events__flush(oe, OE_FLUSH__FINAL); | 1522 | err = ordered_events__flush(oe, OE_FLUSH__FINAL); |
1523 | if (err) | ||
1524 | goto out_err; | ||
1525 | err = auxtrace__flush_events(session, tool); | ||
1499 | out_err: | 1526 | out_err: |
1500 | ui_progress__finish(); | 1527 | ui_progress__finish(); |
1501 | perf_session__warn_about_errors(session); | 1528 | perf_session__warn_about_errors(session); |
1502 | ordered_events__free(&session->ordered_events); | 1529 | ordered_events__free(&session->ordered_events); |
1530 | auxtrace__free_events(session); | ||
1503 | session->one_mmap = false; | 1531 | session->one_mmap = false; |
1504 | return err; | 1532 | return err; |
1505 | } | 1533 | } |
@@ -1582,7 +1610,13 @@ size_t perf_session__fprintf_dsos_buildid(struct perf_session *session, FILE *fp | |||
1582 | 1610 | ||
1583 | size_t perf_session__fprintf_nr_events(struct perf_session *session, FILE *fp) | 1611 | size_t perf_session__fprintf_nr_events(struct perf_session *session, FILE *fp) |
1584 | { | 1612 | { |
1585 | size_t ret = fprintf(fp, "Aggregated stats:\n"); | 1613 | size_t ret; |
1614 | const char *msg = ""; | ||
1615 | |||
1616 | if (perf_header__has_feat(&session->header, HEADER_AUXTRACE)) | ||
1617 | msg = " (excludes AUX area (e.g. instruction trace) decoded / synthesized events)"; | ||
1618 | |||
1619 | ret = fprintf(fp, "Aggregated stats:%s\n", msg); | ||
1586 | 1620 | ||
1587 | ret += events_stats__fprintf(&session->evlist->stats, fp); | 1621 | ret += events_stats__fprintf(&session->evlist->stats, fp); |
1588 | return ret; | 1622 | return ret; |