perf ordered_events: Allow tools to specify a deliver method
So that we can simplify the deliver method to pass just: (ordered_events, ordered_event, sample); Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Borislav Petkov <bp@suse.de> Cc: David Ahern <dsahern@gmail.com> Cc: Don Zickus <dzickus@redhat.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/n/tip-j0s4bpxs5qza5tnkvjwom9rw@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
b7b61cbebd
commit
d10eb1eb76
|
@ -181,8 +181,7 @@ static int __ordered_events__flush(struct ordered_events *oe)
|
||||||
if (ret)
|
if (ret)
|
||||||
pr_err("Can't parse sample, err = %d\n", ret);
|
pr_err("Can't parse sample, err = %d\n", ret);
|
||||||
else {
|
else {
|
||||||
ret = machines__deliver_event(oe->machines, oe->evlist, iter->event,
|
ret = oe->deliver(oe, iter, &sample);
|
||||||
&sample, oe->tool, iter->file_offset);
|
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -264,7 +263,8 @@ int ordered_events__flush(struct ordered_events *oe, enum oe_flush how)
|
||||||
}
|
}
|
||||||
|
|
||||||
void ordered_events__init(struct ordered_events *oe, struct machines *machines,
|
void ordered_events__init(struct ordered_events *oe, struct machines *machines,
|
||||||
struct perf_evlist *evlist, struct perf_tool *tool)
|
struct perf_evlist *evlist, struct perf_tool *tool,
|
||||||
|
ordered_events__deliver_t deliver)
|
||||||
{
|
{
|
||||||
INIT_LIST_HEAD(&oe->events);
|
INIT_LIST_HEAD(&oe->events);
|
||||||
INIT_LIST_HEAD(&oe->cache);
|
INIT_LIST_HEAD(&oe->cache);
|
||||||
|
@ -274,6 +274,7 @@ void ordered_events__init(struct ordered_events *oe, struct machines *machines,
|
||||||
oe->evlist = evlist;
|
oe->evlist = evlist;
|
||||||
oe->machines = machines;
|
oe->machines = machines;
|
||||||
oe->tool = tool;
|
oe->tool = tool;
|
||||||
|
oe->deliver = deliver;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ordered_events__free(struct ordered_events *oe)
|
void ordered_events__free(struct ordered_events *oe)
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
struct perf_tool;
|
struct perf_tool;
|
||||||
struct perf_evlist;
|
struct perf_evlist;
|
||||||
|
struct perf_sample;
|
||||||
struct machines;
|
struct machines;
|
||||||
|
|
||||||
struct ordered_event {
|
struct ordered_event {
|
||||||
|
@ -21,6 +22,12 @@ enum oe_flush {
|
||||||
OE_FLUSH__HALF,
|
OE_FLUSH__HALF,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ordered_events;
|
||||||
|
|
||||||
|
typedef int (*ordered_events__deliver_t)(struct ordered_events *oe,
|
||||||
|
struct ordered_event *event,
|
||||||
|
struct perf_sample *sample);
|
||||||
|
|
||||||
struct ordered_events {
|
struct ordered_events {
|
||||||
u64 last_flush;
|
u64 last_flush;
|
||||||
u64 next_flush;
|
u64 next_flush;
|
||||||
|
@ -35,6 +42,7 @@ struct ordered_events {
|
||||||
struct machines *machines;
|
struct machines *machines;
|
||||||
struct perf_evlist *evlist;
|
struct perf_evlist *evlist;
|
||||||
struct perf_tool *tool;
|
struct perf_tool *tool;
|
||||||
|
ordered_events__deliver_t deliver;
|
||||||
int buffer_idx;
|
int buffer_idx;
|
||||||
unsigned int nr_events;
|
unsigned int nr_events;
|
||||||
enum oe_flush last_flush_type;
|
enum oe_flush last_flush_type;
|
||||||
|
@ -46,7 +54,8 @@ struct ordered_event *ordered_events__new(struct ordered_events *oe, u64 timesta
|
||||||
void ordered_events__delete(struct ordered_events *oe, struct ordered_event *event);
|
void ordered_events__delete(struct ordered_events *oe, struct ordered_event *event);
|
||||||
int ordered_events__flush(struct ordered_events *oe, enum oe_flush how);
|
int ordered_events__flush(struct ordered_events *oe, enum oe_flush how);
|
||||||
void ordered_events__init(struct ordered_events *oe, struct machines *machines,
|
void ordered_events__init(struct ordered_events *oe, struct machines *machines,
|
||||||
struct perf_evlist *evlsit, struct perf_tool *tool);
|
struct perf_evlist *evlsit, struct perf_tool *tool,
|
||||||
|
ordered_events__deliver_t deliver);
|
||||||
void ordered_events__free(struct ordered_events *oe);
|
void ordered_events__free(struct ordered_events *oe);
|
||||||
|
|
||||||
static inline
|
static inline
|
||||||
|
|
|
@ -16,6 +16,12 @@
|
||||||
#include "perf_regs.h"
|
#include "perf_regs.h"
|
||||||
#include "asm/bug.h"
|
#include "asm/bug.h"
|
||||||
|
|
||||||
|
static int machines__deliver_event(struct machines *machines,
|
||||||
|
struct perf_evlist *evlist,
|
||||||
|
union perf_event *event,
|
||||||
|
struct perf_sample *sample,
|
||||||
|
struct perf_tool *tool, u64 file_offset);
|
||||||
|
|
||||||
static int perf_session__open(struct perf_session *session)
|
static int perf_session__open(struct perf_session *session)
|
||||||
{
|
{
|
||||||
struct perf_data_file *file = session->file;
|
struct perf_data_file *file = session->file;
|
||||||
|
@ -86,6 +92,14 @@ static void perf_session__set_comm_exec(struct perf_session *session)
|
||||||
machines__set_comm_exec(&session->machines, comm_exec);
|
machines__set_comm_exec(&session->machines, comm_exec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ordered_events__deliver_event(struct ordered_events *oe,
|
||||||
|
struct ordered_event *event,
|
||||||
|
struct perf_sample *sample)
|
||||||
|
{
|
||||||
|
return machines__deliver_event(oe->machines, oe->evlist, event->event,
|
||||||
|
sample, oe->tool, event->file_offset);
|
||||||
|
}
|
||||||
|
|
||||||
struct perf_session *perf_session__new(struct perf_data_file *file,
|
struct perf_session *perf_session__new(struct perf_data_file *file,
|
||||||
bool repipe, struct perf_tool *tool)
|
bool repipe, struct perf_tool *tool)
|
||||||
{
|
{
|
||||||
|
@ -125,8 +139,10 @@ struct perf_session *perf_session__new(struct perf_data_file *file,
|
||||||
tool->ordered_events && !perf_evlist__sample_id_all(session->evlist)) {
|
tool->ordered_events && !perf_evlist__sample_id_all(session->evlist)) {
|
||||||
dump_printf("WARNING: No sample_id_all support, falling back to unordered processing\n");
|
dump_printf("WARNING: No sample_id_all support, falling back to unordered processing\n");
|
||||||
tool->ordered_events = false;
|
tool->ordered_events = false;
|
||||||
} else
|
} else {
|
||||||
ordered_events__init(&session->ordered_events, &session->machines, session->evlist, tool);
|
ordered_events__init(&session->ordered_events, &session->machines,
|
||||||
|
session->evlist, tool, ordered_events__deliver_event);
|
||||||
|
}
|
||||||
|
|
||||||
return session;
|
return session;
|
||||||
|
|
||||||
|
@ -888,7 +904,7 @@ static int
|
||||||
&sample->read.one, machine);
|
&sample->read.one, machine);
|
||||||
}
|
}
|
||||||
|
|
||||||
int machines__deliver_event(struct machines *machines,
|
static int machines__deliver_event(struct machines *machines,
|
||||||
struct perf_evlist *evlist,
|
struct perf_evlist *evlist,
|
||||||
union perf_event *event,
|
union perf_event *event,
|
||||||
struct perf_sample *sample,
|
struct perf_sample *sample,
|
||||||
|
|
|
@ -55,12 +55,6 @@ int perf_session__queue_event(struct perf_session *s, union perf_event *event,
|
||||||
|
|
||||||
void perf_tool__fill_defaults(struct perf_tool *tool);
|
void perf_tool__fill_defaults(struct perf_tool *tool);
|
||||||
|
|
||||||
int machines__deliver_event(struct machines *machines,
|
|
||||||
struct perf_evlist *evlist,
|
|
||||||
union perf_event *event,
|
|
||||||
struct perf_sample *sample,
|
|
||||||
struct perf_tool *tool, u64 file_offset);
|
|
||||||
|
|
||||||
int perf_session__resolve_callchain(struct perf_session *session,
|
int perf_session__resolve_callchain(struct perf_session *session,
|
||||||
struct perf_evsel *evsel,
|
struct perf_evsel *evsel,
|
||||||
struct thread *thread,
|
struct thread *thread,
|
||||||
|
|
Loading…
Reference in New Issue