]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
perf session: Add process callback to reader object
authorJiri Olsa <jolsa@kernel.org>
Fri, 8 Mar 2019 13:47:40 +0000 (14:47 +0100)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 11 Mar 2019 14:56:03 +0000 (11:56 -0300)
Adding callback function to reader object so callers can process data in
different ways.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/20190308134745.5057-7-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/session.c

index de777bdc0ed3d9c7f9c1b599873ff5713763d8dc..0ec34227bd60986f71223988a4f15187b9b70de2 100644 (file)
@@ -1847,10 +1847,17 @@ fetch_mmaped_event(struct perf_session *session,
 #define NUM_MMAPS 128
 #endif
 
+struct reader;
+
+typedef s64 (*reader_cb_t)(struct perf_session *session,
+                          union perf_event *event,
+                          u64 file_offset);
+
 struct reader {
-       int     fd;
-       u64     data_size;
-       u64     data_offset;
+       int              fd;
+       u64              data_size;
+       u64              data_offset;
+       reader_cb_t      process;
 };
 
 static int
@@ -1921,7 +1928,7 @@ reader__process_events(struct reader *rd, struct perf_session *session,
        size = event->header.size;
 
        if (size < sizeof(struct perf_event_header) ||
-           (skip = perf_session__process_event(session, event, file_pos)) < 0) {
+           (skip = rd->process(session, event, file_pos)) < 0) {
                pr_err("%#" PRIx64 " [%#x]: failed to process type: %d\n",
                       file_offset + head, event->header.size,
                       event->header.type);
@@ -1947,12 +1954,20 @@ reader__process_events(struct reader *rd, struct perf_session *session,
        return err;
 }
 
+static s64 process_simple(struct perf_session *session,
+                         union perf_event *event,
+                         u64 file_offset)
+{
+       return perf_session__process_event(session, event, file_offset);
+}
+
 static int __perf_session__process_events(struct perf_session *session)
 {
        struct reader rd = {
                .fd             = perf_data__fd(session->data),
                .data_size      = session->header.data_size,
                .data_offset    = session->header.data_offset,
+               .process        = process_simple,
        };
        struct ordered_events *oe = &session->ordered_events;
        struct perf_tool *tool = session->tool;