aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/perf/util/session.c19
-rw-r--r--tools/perf/util/tool.h2
2 files changed, 20 insertions, 1 deletions
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index bad5f87ae001..ec1dec86d0e1 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -358,6 +358,14 @@ static int process_stat_round_stub(struct perf_session *perf_session __maybe_unu
358 return 0; 358 return 0;
359} 359}
360 360
361static int perf_session__process_compressed_event_stub(struct perf_session *session __maybe_unused,
362 union perf_event *event __maybe_unused,
363 u64 file_offset __maybe_unused)
364{
365 dump_printf(": unhandled!\n");
366 return 0;
367}
368
361void perf_tool__fill_defaults(struct perf_tool *tool) 369void perf_tool__fill_defaults(struct perf_tool *tool)
362{ 370{
363 if (tool->sample == NULL) 371 if (tool->sample == NULL)
@@ -430,6 +438,8 @@ void perf_tool__fill_defaults(struct perf_tool *tool)
430 tool->time_conv = process_event_op2_stub; 438 tool->time_conv = process_event_op2_stub;
431 if (tool->feature == NULL) 439 if (tool->feature == NULL)
432 tool->feature = process_event_op2_stub; 440 tool->feature = process_event_op2_stub;
441 if (tool->compressed == NULL)
442 tool->compressed = perf_session__process_compressed_event_stub;
433} 443}
434 444
435static void swap_sample_id_all(union perf_event *event, void *data) 445static void swap_sample_id_all(union perf_event *event, void *data)
@@ -1373,7 +1383,9 @@ static s64 perf_session__process_user_event(struct perf_session *session,
1373 int fd = perf_data__fd(session->data); 1383 int fd = perf_data__fd(session->data);
1374 int err; 1384 int err;
1375 1385
1376 dump_event(session->evlist, event, file_offset, &sample); 1386 if (event->header.type != PERF_RECORD_COMPRESSED ||
1387 tool->compressed == perf_session__process_compressed_event_stub)
1388 dump_event(session->evlist, event, file_offset, &sample);
1377 1389
1378 /* These events are processed right away */ 1390 /* These events are processed right away */
1379 switch (event->header.type) { 1391 switch (event->header.type) {
@@ -1426,6 +1438,11 @@ static s64 perf_session__process_user_event(struct perf_session *session,
1426 return tool->time_conv(session, event); 1438 return tool->time_conv(session, event);
1427 case PERF_RECORD_HEADER_FEATURE: 1439 case PERF_RECORD_HEADER_FEATURE:
1428 return tool->feature(session, event); 1440 return tool->feature(session, event);
1441 case PERF_RECORD_COMPRESSED:
1442 err = tool->compressed(session, event, file_offset);
1443 if (err)
1444 dump_event(session->evlist, event, file_offset, &sample);
1445 return err;
1429 default: 1446 default:
1430 return -EINVAL; 1447 return -EINVAL;
1431 } 1448 }
diff --git a/tools/perf/util/tool.h b/tools/perf/util/tool.h
index 250391672f9f..9096a6e3de59 100644
--- a/tools/perf/util/tool.h
+++ b/tools/perf/util/tool.h
@@ -28,6 +28,7 @@ typedef int (*event_attr_op)(struct perf_tool *tool,
28 28
29typedef int (*event_op2)(struct perf_session *session, union perf_event *event); 29typedef int (*event_op2)(struct perf_session *session, union perf_event *event);
30typedef s64 (*event_op3)(struct perf_session *session, union perf_event *event); 30typedef s64 (*event_op3)(struct perf_session *session, union perf_event *event);
31typedef int (*event_op4)(struct perf_session *session, union perf_event *event, u64 data);
31 32
32typedef int (*event_oe)(struct perf_tool *tool, union perf_event *event, 33typedef int (*event_oe)(struct perf_tool *tool, union perf_event *event,
33 struct ordered_events *oe); 34 struct ordered_events *oe);
@@ -72,6 +73,7 @@ struct perf_tool {
72 stat, 73 stat,
73 stat_round, 74 stat_round,
74 feature; 75 feature;
76 event_op4 compressed;
75 event_op3 auxtrace; 77 event_op3 auxtrace;
76 bool ordered_events; 78 bool ordered_events;
77 bool ordering_requires_timestamps; 79 bool ordering_requires_timestamps;