diff options
author | Jiri Olsa <jolsa@kernel.org> | 2014-06-05 10:29:45 +0200 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2014-08-12 12:02:56 -0300 |
commit | d8836b5d1736632aa1a38a8ed0c9361c96d7c95a (patch) | |
tree | 1371f0e513c28426da4e2800f1420368e0f7c293 /tools/perf/util/session.c | |
parent | c64c7e1a5addf93b7dec98a27b8c48457506aa06 (diff) |
perf tools: Factor ordered_events__flush to be more generic
Centralizing the next_flush calculation under the ordered_events__flush
function.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Acked-by: David Ahern <dsahern@gmail.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jean Pihet <jean.pihet@linaro.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/n/tip-srwunsy7o5wl17vpt4a10oxp@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/session.c')
-rw-r--r-- | tools/perf/util/session.c | 47 |
1 files changed, 36 insertions, 11 deletions
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index ff0188c6578..72c7b0d3d0d 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -451,6 +451,11 @@ struct ordered_event { struct list_head list; }; +enum oe_flush { + OE_FLUSH__FINAL, + OE_FLUSH__ROUND, +}; + static void perf_session_free_sample_buffers(struct perf_session *session) { struct ordered_events *oe = &session->ordered_events; @@ -564,8 +569,8 @@ static int perf_session_deliver_event(struct perf_session *session, struct perf_tool *tool, u64 file_offset); -static int ordered_events__flush(struct perf_session *s, - struct perf_tool *tool) +static int __ordered_events__flush(struct perf_session *s, + struct perf_tool *tool) { struct ordered_events *oe = &s->ordered_events; struct list_head *head = &oe->events; @@ -615,6 +620,32 @@ static int ordered_events__flush(struct perf_session *s, return 0; } +static int ordered_events__flush(struct perf_session *s, struct perf_tool *tool, + enum oe_flush how) +{ + struct ordered_events *oe = &s->ordered_events; + int err; + + switch (how) { + case OE_FLUSH__FINAL: + oe->next_flush = ULLONG_MAX; + break; + + case OE_FLUSH__ROUND: + default: + break; + }; + + err = __ordered_events__flush(s, tool); + + if (!err) { + if (how == OE_FLUSH__ROUND) + oe->next_flush = oe->max_timestamp; + } + + return err; +} + /* * When perf record finishes a pass on every buffers, it records this pseudo * event. @@ -658,11 +689,7 @@ static int process_finished_round(struct perf_tool *tool, union perf_event *event __maybe_unused, struct perf_session *session) { - int ret = ordered_events__flush(session, tool); - if (!ret) - session->ordered_events.next_flush = session->ordered_events.max_timestamp; - - return ret; + return ordered_events__flush(session, tool, OE_FLUSH__ROUND); } int perf_session_queue_event(struct perf_session *s, union perf_event *event, @@ -1247,8 +1274,7 @@ more: goto more; done: /* do the final flush for ordered samples */ - session->ordered_events.next_flush = ULLONG_MAX; - err = ordered_events__flush(session, tool); + err = ordered_events__flush(session, tool, OE_FLUSH__FINAL); out_err: free(buf); perf_session__warn_about_errors(session, tool); @@ -1393,8 +1419,7 @@ more: out: /* do the final flush for ordered samples */ - session->ordered_events.next_flush = ULLONG_MAX; - err = ordered_events__flush(session, tool); + err = ordered_events__flush(session, tool, OE_FLUSH__FINAL); out_err: ui_progress__finish(); perf_session__warn_about_errors(session, tool); |