Commit 103ed40e authored by Adrian Hunter's avatar Adrian Hunter Committed by Arnaldo Carvalho de Melo

perf session: Add facility to peek at all events

AUX area samples are not limited in how far back in time the sample
could start. Consequently samples must be queued in advance to allow for
time-ordered processing. To achieve that, add
perf_session__peek_events() that walks and peeks at all the events.
Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lore.kernel.org/lkml/20191115124225.5247-11-adrian.hunter@intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent b04b8dd1
......@@ -1659,6 +1659,34 @@ int perf_session__peek_event(struct perf_session *session, off_t file_offset,
return 0;
}
int perf_session__peek_events(struct perf_session *session, u64 offset,
u64 size, peek_events_cb_t cb, void *data)
{
u64 max_offset = offset + size;
char buf[PERF_SAMPLE_MAX_SIZE];
union perf_event *event;
int err;
do {
err = perf_session__peek_event(session, offset, buf,
PERF_SAMPLE_MAX_SIZE, &event,
NULL);
if (err)
return err;
err = cb(session, event, offset, data);
if (err)
return err;
offset += event->header.size;
if (event->header.type == PERF_RECORD_AUXTRACE)
offset += event->auxtrace.size;
} while (offset < max_offset);
return err;
}
static s64 perf_session__process_event(struct perf_session *session,
union perf_event *event, u64 file_offset)
{
......
......@@ -64,6 +64,11 @@ int perf_session__peek_event(struct perf_session *session, off_t file_offset,
void *buf, size_t buf_sz,
union perf_event **event_ptr,
struct perf_sample *sample);
typedef int (*peek_events_cb_t)(struct perf_session *session,
union perf_event *event, u64 offset,
void *data);
int perf_session__peek_events(struct perf_session *session, u64 offset,
u64 size, peek_events_cb_t cb, void *data);
int perf_session__process_events(struct perf_session *session);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment