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.c54
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
19static int machines__deliver_event(struct machines *machines, 20static 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
25static int perf_session__open(struct perf_session *session) 26static 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
112struct perf_session *perf_session__new(struct perf_data_file *file, 113struct 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
186void perf_session__delete(struct perf_session *session) 187void 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
1035static 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
1033static s64 perf_session__process_user_event(struct perf_session *session, 1053static 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
1197void perf_event_header__bswap(struct perf_event_header *hdr) 1217void perf_event_header__bswap(struct perf_event_header *hdr)
@@ -1350,10 +1370,14 @@ more:
1350done: 1370done:
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);
1353out_err: 1376out_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:
1496out: 1520out:
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);
1499out_err: 1526out_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
1583size_t perf_session__fprintf_nr_events(struct perf_session *session, FILE *fp) 1611size_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;