Commit-ID:  d10eb1eb76a86266354ecab6e42c1606e3b8bc4c
Gitweb:     http://git.kernel.org/tip/d10eb1eb76a86266354ecab6e42c1606e3b8bc4c
Author:     Arnaldo Carvalho de Melo <a...@redhat.com>
AuthorDate: Tue, 3 Mar 2015 12:20:38 -0300
Committer:  Arnaldo Carvalho de Melo <a...@redhat.com>
CommitDate: Thu, 12 Mar 2015 12:39:46 -0300

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.hun...@intel.com>
Cc: Borislav Petkov <b...@suse.de>
Cc: David Ahern <dsah...@gmail.com>
Cc: Don Zickus <dzic...@redhat.com>
Cc: Frederic Weisbecker <fweis...@gmail.com>
Cc: Jiri Olsa <jo...@redhat.com>
Cc: Namhyung Kim <namhy...@kernel.org>
Cc: Stephane Eranian <eran...@google.com>
Link: http://lkml.kernel.org/n/tip-j0s4bpxs5qza5tnkvjwom...@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <a...@redhat.com>
---
 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 bad46ce..0d8cea9 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 ef7d73e..c6cf0ba 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 c6dd89f..e2f318a 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 06e0777..1310998 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,
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to