summaryrefslogtreecommitdiff
path: root/tools/perf/util
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/util')
-rw-r--r--tools/perf/util/data-convert-bt.c4
-rw-r--r--tools/perf/util/ordered-events.c23
-rw-r--r--tools/perf/util/ordered-events.h10
-rw-r--r--tools/perf/util/session.c65
-rw-r--r--tools/perf/util/session.h11
5 files changed, 49 insertions, 64 deletions
diff --git a/tools/perf/util/data-convert-bt.c b/tools/perf/util/data-convert-bt.c
index e372e03ff480..1afd381b2346 100644
--- a/tools/perf/util/data-convert-bt.c
+++ b/tools/perf/util/data-convert-bt.c
@@ -579,7 +579,7 @@ int bt_convert__perf2ctf(const char *input, const char *path)
return -1;
/* perf.data session */
- session = perf_session__new(&file, 0, NULL);
+ session = perf_session__new(&file, 0, &c.tool);
if (!session)
goto free_writer;
@@ -591,7 +591,7 @@ int bt_convert__perf2ctf(const char *input, const char *path)
if (setup_events(cw, session))
goto free_session;
- err = perf_session__process_events(session, &c.tool);
+ err = perf_session__process_events(session);
if (!err)
err = bt_ctf_stream_flush(cw->stream);
diff --git a/tools/perf/util/ordered-events.c b/tools/perf/util/ordered-events.c
index e6ab630dd374..bad46ce16591 100644
--- a/tools/perf/util/ordered-events.c
+++ b/tools/perf/util/ordered-events.c
@@ -153,10 +153,7 @@ void ordered_events__delete(struct ordered_events *oe, struct ordered_event *eve
free_dup_event(oe, event->event);
}
-static int __ordered_events__flush(struct ordered_events *oe,
- struct machines *machines,
- struct perf_evlist *evlist,
- struct perf_tool *tool)
+static int __ordered_events__flush(struct ordered_events *oe)
{
struct list_head *head = &oe->events;
struct ordered_event *tmp, *iter;
@@ -180,12 +177,12 @@ static int __ordered_events__flush(struct ordered_events *oe,
if (iter->timestamp > limit)
break;
- ret = perf_evlist__parse_sample(evlist, iter->event, &sample);
+ ret = perf_evlist__parse_sample(oe->evlist, iter->event, &sample);
if (ret)
pr_err("Can't parse sample, err = %d\n", ret);
else {
- ret = machines__deliver_event(machines, evlist, iter->event,
- &sample, tool, iter->file_offset);
+ ret = machines__deliver_event(oe->machines, oe->evlist, iter->event,
+ &sample, oe->tool, iter->file_offset);
if (ret)
return ret;
}
@@ -205,9 +202,7 @@ static int __ordered_events__flush(struct ordered_events *oe,
return 0;
}
-int ordered_events__flush(struct ordered_events *oe, struct machines *machines,
- struct perf_evlist *evlist, struct perf_tool *tool,
- enum oe_flush how)
+int ordered_events__flush(struct ordered_events *oe, enum oe_flush how)
{
static const char * const str[] = {
"NONE",
@@ -252,7 +247,7 @@ int ordered_events__flush(struct ordered_events *oe, struct machines *machines,
str[how], oe->nr_events);
pr_oe_time(oe->max_timestamp, "max_timestamp\n");
- err = __ordered_events__flush(oe, machines, evlist, tool);
+ err = __ordered_events__flush(oe);
if (!err) {
if (how == OE_FLUSH__ROUND)
@@ -268,13 +263,17 @@ int ordered_events__flush(struct ordered_events *oe, struct machines *machines,
return err;
}
-void ordered_events__init(struct ordered_events *oe)
+void ordered_events__init(struct ordered_events *oe, struct machines *machines,
+ struct perf_evlist *evlist, struct perf_tool *tool)
{
INIT_LIST_HEAD(&oe->events);
INIT_LIST_HEAD(&oe->cache);
INIT_LIST_HEAD(&oe->to_free);
oe->max_alloc_size = (u64) -1;
oe->cur_alloc_size = 0;
+ oe->evlist = evlist;
+ oe->machines = machines;
+ oe->tool = tool;
}
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 e09f2433c6d6..ef7d73ecb0d0 100644
--- a/tools/perf/util/ordered-events.h
+++ b/tools/perf/util/ordered-events.h
@@ -32,6 +32,9 @@ struct ordered_events {
struct list_head to_free;
struct ordered_event *buffer;
struct ordered_event *last;
+ struct machines *machines;
+ struct perf_evlist *evlist;
+ struct perf_tool *tool;
int buffer_idx;
unsigned int nr_events;
enum oe_flush last_flush_type;
@@ -41,10 +44,9 @@ struct ordered_events {
struct ordered_event *ordered_events__new(struct ordered_events *oe, u64 timestamp,
union perf_event *event);
void ordered_events__delete(struct ordered_events *oe, struct ordered_event *event);
-int ordered_events__flush(struct ordered_events *oe, struct machines *machines,
- struct perf_evlist *evlist, struct perf_tool *tool,
- enum oe_flush how);
-void ordered_events__init(struct ordered_events *oe);
+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);
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 23be146bd2fc..c6dd89f62fc4 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -95,7 +95,6 @@ struct perf_session *perf_session__new(struct perf_data_file *file,
goto out;
session->repipe = repipe;
- ordered_events__init(&session->ordered_events);
machines__init(&session->machines);
if (file) {
@@ -126,7 +125,8 @@ 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);
return session;
@@ -508,24 +508,19 @@ static perf_event__swap_op perf_event__swap_ops[] = {
* Flush every events below timestamp 7
* etc...
*/
-static int process_finished_round(struct perf_tool *tool,
+static int process_finished_round(struct perf_tool *tool __maybe_unused,
union perf_event *event __maybe_unused,
struct perf_session *session)
{
struct ordered_events *oe = &session->ordered_events;
- struct perf_evlist *evlist = session->evlist;
- struct machines *machines = &session->machines;
- return ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__ROUND);
+ return ordered_events__flush(oe, OE_FLUSH__ROUND);
}
-int perf_session_queue_event(struct perf_session *s, union perf_event *event,
- struct perf_tool *tool, struct perf_sample *sample,
- u64 file_offset)
+int perf_session__queue_event(struct perf_session *s, union perf_event *event,
+ struct perf_sample *sample, u64 file_offset)
{
struct ordered_events *oe = &s->ordered_events;
- struct perf_evlist *evlist = s->evlist;
- struct machines *machines = &s->machines;
u64 timestamp = sample->time;
struct ordered_event *new;
@@ -543,7 +538,7 @@ int perf_session_queue_event(struct perf_session *s, union perf_event *event,
new = ordered_events__new(oe, timestamp, event);
if (!new) {
- ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__HALF);
+ ordered_events__flush(oe, OE_FLUSH__HALF);
new = ordered_events__new(oe, timestamp, event);
}
@@ -948,9 +943,9 @@ int machines__deliver_event(struct machines *machines,
static s64 perf_session__process_user_event(struct perf_session *session,
union perf_event *event,
- struct perf_tool *tool,
u64 file_offset)
{
+ struct perf_tool *tool = session->ordered_events.tool;
int fd = perf_data_file__fd(session->file);
int err;
@@ -988,15 +983,15 @@ static s64 perf_session__process_user_event(struct perf_session *session,
int perf_session__deliver_synth_event(struct perf_session *session,
union perf_event *event,
- struct perf_sample *sample,
- struct perf_tool *tool)
+ struct perf_sample *sample)
{
struct perf_evlist *evlist = session->evlist;
+ struct perf_tool *tool = session->ordered_events.tool;
events_stats__inc(&evlist->stats, event->header.type);
if (event->header.type >= PERF_RECORD_USER_TYPE_START)
- return perf_session__process_user_event(session, event, tool, 0);
+ return perf_session__process_user_event(session, event, 0);
return machines__deliver_event(&session->machines, evlist, event, sample, tool, 0);
}
@@ -1066,11 +1061,10 @@ out_parse_sample:
}
static s64 perf_session__process_event(struct perf_session *session,
- union perf_event *event,
- struct perf_tool *tool,
- u64 file_offset)
+ union perf_event *event, u64 file_offset)
{
struct perf_evlist *evlist = session->evlist;
+ struct perf_tool *tool = session->ordered_events.tool;
struct perf_sample sample;
int ret;
@@ -1083,7 +1077,7 @@ static s64 perf_session__process_event(struct perf_session *session,
events_stats__inc(&evlist->stats, event->header.type);
if (event->header.type >= PERF_RECORD_USER_TYPE_START)
- return perf_session__process_user_event(session, event, tool, file_offset);
+ return perf_session__process_user_event(session, event, file_offset);
/*
* For all kernel events we get the sample data
@@ -1093,8 +1087,7 @@ static s64 perf_session__process_event(struct perf_session *session,
return ret;
if (tool->ordered_events) {
- ret = perf_session_queue_event(session, event, tool, &sample,
- file_offset);
+ ret = perf_session__queue_event(session, event, &sample, file_offset);
if (ret != -ETIME)
return ret;
}
@@ -1173,12 +1166,10 @@ static void perf_tool__warn_about_errors(const struct perf_tool *tool,
volatile int session_done;
-static int __perf_session__process_pipe_events(struct perf_session *session,
- struct perf_tool *tool)
+static int __perf_session__process_pipe_events(struct perf_session *session)
{
struct ordered_events *oe = &session->ordered_events;
- struct perf_evlist *evlist = session->evlist;
- struct machines *machines = &session->machines;
+ struct perf_tool *tool = oe->tool;
int fd = perf_data_file__fd(session->file);
union perf_event *event;
uint32_t size, cur_size = 0;
@@ -1242,7 +1233,7 @@ more:
}
}
- if ((skip = perf_session__process_event(session, event, tool, head)) < 0) {
+ if ((skip = perf_session__process_event(session, event, head)) < 0) {
pr_err("%#" PRIx64 " [%#x]: failed to process type: %d\n",
head, event->header.size, event->header.type);
err = -EINVAL;
@@ -1258,7 +1249,7 @@ more:
goto more;
done:
/* do the final flush for ordered samples */
- err = ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__FINAL);
+ err = ordered_events__flush(oe, OE_FLUSH__FINAL);
out_err:
free(buf);
perf_tool__warn_about_errors(tool, &session->evlist->stats);
@@ -1308,11 +1299,10 @@ fetch_mmaped_event(struct perf_session *session,
static int __perf_session__process_events(struct perf_session *session,
u64 data_offset, u64 data_size,
- u64 file_size, struct perf_tool *tool)
+ u64 file_size)
{
struct ordered_events *oe = &session->ordered_events;
- struct perf_evlist *evlist = session->evlist;
- struct machines *machines = &session->machines;
+ struct perf_tool *tool = oe->tool;
int fd = perf_data_file__fd(session->file);
u64 head, page_offset, file_offset, file_pos, size;
int err, mmap_prot, mmap_flags, map_idx = 0;
@@ -1381,8 +1371,7 @@ more:
size = event->header.size;
if (size < sizeof(struct perf_event_header) ||
- (skip = perf_session__process_event(session, event, tool, file_pos))
- < 0) {
+ (skip = perf_session__process_event(session, event, file_pos)) < 0) {
pr_err("%#" PRIx64 " [%#x]: failed to process type: %d\n",
file_offset + head, event->header.size,
event->header.type);
@@ -1406,7 +1395,7 @@ more:
out:
/* do the final flush for ordered samples */
- err = ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__FINAL);
+ err = ordered_events__flush(oe, OE_FLUSH__FINAL);
out_err:
ui_progress__finish();
perf_tool__warn_about_errors(tool, &session->evlist->stats);
@@ -1415,8 +1404,7 @@ out_err:
return err;
}
-int perf_session__process_events(struct perf_session *session,
- struct perf_tool *tool)
+int perf_session__process_events(struct perf_session *session)
{
u64 size = perf_data_file__size(session->file);
int err;
@@ -1427,10 +1415,9 @@ int perf_session__process_events(struct perf_session *session,
if (!perf_data_file__is_pipe(session->file))
err = __perf_session__process_events(session,
session->header.data_offset,
- session->header.data_size,
- size, tool);
+ session->header.data_size, size);
else
- err = __perf_session__process_pipe_events(session, tool);
+ err = __perf_session__process_pipe_events(session);
return err;
}
diff --git a/tools/perf/util/session.h b/tools/perf/util/session.h
index c08fa6be5bf3..06e0777e9803 100644
--- a/tools/perf/util/session.h
+++ b/tools/perf/util/session.h
@@ -48,12 +48,10 @@ int perf_session__peek_event(struct perf_session *session, off_t file_offset,
union perf_event **event_ptr,
struct perf_sample *sample);
-int perf_session__process_events(struct perf_session *session,
- struct perf_tool *tool);
+int perf_session__process_events(struct perf_session *session);
-int perf_session_queue_event(struct perf_session *s, union perf_event *event,
- struct perf_tool *tool, struct perf_sample *sample,
- u64 file_offset);
+int perf_session__queue_event(struct perf_session *s, union perf_event *event,
+ struct perf_sample *sample, u64 file_offset);
void perf_tool__fill_defaults(struct perf_tool *tool);
@@ -126,8 +124,7 @@ extern volatile int session_done;
int perf_session__deliver_synth_event(struct perf_session *session,
union perf_event *event,
- struct perf_sample *sample,
- struct perf_tool *tool);
+ struct perf_sample *sample);
int perf_event__process_id_index(struct perf_tool *tool,
union perf_event *event,