[PATCH 03/24] perf ordered_events: Allow tools to specify a deliver method
From: Arnaldo Carvalho de Melo
Date: Thu Mar 12 2015 - 17:34:25 EST
From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
So that we can simplify the deliver method to pass just:
(ordered_events, ordered_event, sample);
Cc: Adrian Hunter <adrian.hunter@xxxxxxxxx>
Cc: Borislav Petkov <bp@xxxxxxx>
Cc: David Ahern <dsahern@xxxxxxxxx>
Cc: Don Zickus <dzickus@xxxxxxxxxx>
Cc: Frederic Weisbecker <fweisbec@xxxxxxxxx>
Cc: Jiri Olsa <jolsa@xxxxxxxxxx>
Cc: Namhyung Kim <namhyung@xxxxxxxxxx>
Cc: Stephane Eranian <eranian@xxxxxxxxxx>
Link: http://lkml.kernel.org/n/tip-j0s4bpxs5qza5tnkvjwom9rw@xxxxxxxxxxxxxx
Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
---
tools/perf/util/ordered-events.c | 7 ++++---
tools/perf/util/ordered-events.h | 11 ++++++++++-
tools/perf/util/session.c | 30 +++++++++++++++++++++++-------
tools/perf/util/session.h | 6 ------
4 files changed, 37 insertions(+), 17 deletions(-)
diff --git a/tools/perf/util/ordered-events.c b/tools/perf/util/ordered-events.c
index bad46ce16591..0d8cea91d2c9 100644
--- a/tools/perf/util/ordered-events.c
+++ b/tools/perf/util/ordered-events.c
@@ -181,8 +181,7 @@ static int __ordered_events__flush(struct ordered_events *oe)
if (ret)
pr_err("Can't parse sample, err = %d\n", ret);
else {
- ret = machines__deliver_event(oe->machines, oe->evlist, iter->event,
- &sample, oe->tool, iter->file_offset);
+ ret = oe->deliver(oe, iter, &sample);
if (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,
- 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->cache);
@@ -274,6 +274,7 @@ void ordered_events__init(struct ordered_events *oe, struct machines *machines,
oe->evlist = evlist;
oe->machines = machines;
oe->tool = tool;
+ oe->deliver = deliver;
}
void ordered_events__free(struct ordered_events *oe)
diff --git a/tools/perf/util/ordered-events.h b/tools/perf/util/ordered-events.h
index ef7d73ecb0d0..c6cf0bafbb2c 100644
--- a/tools/perf/util/ordered-events.h
+++ b/tools/perf/util/ordered-events.h
@@ -5,6 +5,7 @@
struct perf_tool;
struct perf_evlist;
+struct perf_sample;
struct machines;
struct ordered_event {
@@ -21,6 +22,12 @@ enum oe_flush {
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 {
u64 last_flush;
u64 next_flush;
@@ -35,6 +42,7 @@ struct ordered_events {
struct machines *machines;
struct perf_evlist *evlist;
struct perf_tool *tool;
+ ordered_events__deliver_t deliver;
int buffer_idx;
unsigned int nr_events;
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);
int ordered_events__flush(struct ordered_events *oe, enum oe_flush how);
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);
static inline
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index c6dd89f62fc4..e2f318a3f17a 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -16,6 +16,12 @@
#include "perf_regs.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)
{
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);
}
+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,
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)) {
dump_printf("WARNING: No sample_id_all support, falling back to unordered processing\n");
tool->ordered_events = false;
- } else
- ordered_events__init(&session->ordered_events, &session->machines, session->evlist, tool);
+ } else {
+ ordered_events__init(&session->ordered_events, &session->machines,
+ session->evlist, tool, ordered_events__deliver_event);
+ }
return session;
@@ -888,11 +904,11 @@ static int
&sample->read.one, machine);
}
-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 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)
{
struct perf_evsel *evsel;
struct machine *machine;
diff --git a/tools/perf/util/session.h b/tools/perf/util/session.h
index 06e0777e9803..1310998f8318 100644
--- a/tools/perf/util/session.h
+++ b/tools/perf/util/session.h
@@ -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);
-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,
struct perf_evsel *evsel,
struct thread *thread,
--
1.9.3
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/