diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2011-11-28 05:30:20 -0500 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2011-11-28 07:39:28 -0500 |
commit | 45694aa7702bc44d538a3bcb51bb2bb96cf190c0 (patch) | |
tree | 81bc1f449f55984556d89b63c461dcf181dc97e5 /tools/perf/util | |
parent | 743eb868657bdb1b26c7b24077ca21c67c82c777 (diff) |
perf tools: Rename perf_event_ops to perf_tool
To better reflect that it became the base class for all tools, that must
be in each tool struct and where common stuff will be put.
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-qgpc4msetqlwr8y2k7537cxe@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util')
-rw-r--r-- | tools/perf/util/build-id.c | 7 | ||||
-rw-r--r-- | tools/perf/util/build-id.h | 2 | ||||
-rw-r--r-- | tools/perf/util/event.c | 54 | ||||
-rw-r--r-- | tools/perf/util/event.h | 22 | ||||
-rw-r--r-- | tools/perf/util/header.c | 28 | ||||
-rw-r--r-- | tools/perf/util/header.h | 16 | ||||
-rw-r--r-- | tools/perf/util/session.c | 163 | ||||
-rw-r--r-- | tools/perf/util/session.h | 49 | ||||
-rw-r--r-- | tools/perf/util/tool.h | 45 | ||||
-rw-r--r-- | tools/perf/util/top.h | 7 |
10 files changed, 203 insertions, 190 deletions
diff --git a/tools/perf/util/build-id.c b/tools/perf/util/build-id.c index 2f84c4802ac..dff9c7a725f 100644 --- a/tools/perf/util/build-id.c +++ b/tools/perf/util/build-id.c | |||
@@ -14,8 +14,9 @@ | |||
14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
15 | #include "debug.h" | 15 | #include "debug.h" |
16 | #include "session.h" | 16 | #include "session.h" |
17 | #include "tool.h" | ||
17 | 18 | ||
18 | static int build_id__mark_dso_hit(struct perf_event_ops *ops __used, | 19 | static int build_id__mark_dso_hit(struct perf_tool *tool __used, |
19 | union perf_event *event, | 20 | union perf_event *event, |
20 | struct perf_sample *sample __used, | 21 | struct perf_sample *sample __used, |
21 | struct perf_evsel *evsel __used, | 22 | struct perf_evsel *evsel __used, |
@@ -40,7 +41,7 @@ static int build_id__mark_dso_hit(struct perf_event_ops *ops __used, | |||
40 | return 0; | 41 | return 0; |
41 | } | 42 | } |
42 | 43 | ||
43 | static int perf_event__exit_del_thread(struct perf_event_ops *ops __used, | 44 | static int perf_event__exit_del_thread(struct perf_tool *tool __used, |
44 | union perf_event *event, | 45 | union perf_event *event, |
45 | struct perf_sample *sample __used, | 46 | struct perf_sample *sample __used, |
46 | struct machine *machine) | 47 | struct machine *machine) |
@@ -59,7 +60,7 @@ static int perf_event__exit_del_thread(struct perf_event_ops *ops __used, | |||
59 | return 0; | 60 | return 0; |
60 | } | 61 | } |
61 | 62 | ||
62 | struct perf_event_ops build_id__mark_dso_hit_ops = { | 63 | struct perf_tool build_id__mark_dso_hit_ops = { |
63 | .sample = build_id__mark_dso_hit, | 64 | .sample = build_id__mark_dso_hit, |
64 | .mmap = perf_event__process_mmap, | 65 | .mmap = perf_event__process_mmap, |
65 | .fork = perf_event__process_task, | 66 | .fork = perf_event__process_task, |
diff --git a/tools/perf/util/build-id.h b/tools/perf/util/build-id.h index 5dafb00eaa0..a993ba87d99 100644 --- a/tools/perf/util/build-id.h +++ b/tools/perf/util/build-id.h | |||
@@ -3,7 +3,7 @@ | |||
3 | 3 | ||
4 | #include "session.h" | 4 | #include "session.h" |
5 | 5 | ||
6 | extern struct perf_event_ops build_id__mark_dso_hit_ops; | 6 | extern struct perf_tool build_id__mark_dso_hit_ops; |
7 | 7 | ||
8 | char *dso__build_id_filename(struct dso *self, char *bf, size_t size); | 8 | char *dso__build_id_filename(struct dso *self, char *bf, size_t size); |
9 | 9 | ||
diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index 0cdc811c48e..0ebbe764133 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c | |||
@@ -43,7 +43,7 @@ static struct perf_sample synth_sample = { | |||
43 | .period = 1, | 43 | .period = 1, |
44 | }; | 44 | }; |
45 | 45 | ||
46 | static pid_t perf_event__synthesize_comm(struct perf_event_ops *ops, | 46 | static pid_t perf_event__synthesize_comm(struct perf_tool *tool, |
47 | union perf_event *event, pid_t pid, | 47 | union perf_event *event, pid_t pid, |
48 | int full, perf_event__handler_t process, | 48 | int full, perf_event__handler_t process, |
49 | struct machine *machine) | 49 | struct machine *machine) |
@@ -99,7 +99,7 @@ out_race: | |||
99 | if (!full) { | 99 | if (!full) { |
100 | event->comm.tid = pid; | 100 | event->comm.tid = pid; |
101 | 101 | ||
102 | process(ops, event, &synth_sample, machine); | 102 | process(tool, event, &synth_sample, machine); |
103 | goto out; | 103 | goto out; |
104 | } | 104 | } |
105 | 105 | ||
@@ -117,7 +117,7 @@ out_race: | |||
117 | 117 | ||
118 | event->comm.tid = pid; | 118 | event->comm.tid = pid; |
119 | 119 | ||
120 | process(ops, event, &synth_sample, machine); | 120 | process(tool, event, &synth_sample, machine); |
121 | } | 121 | } |
122 | 122 | ||
123 | closedir(tasks); | 123 | closedir(tasks); |
@@ -127,7 +127,7 @@ out: | |||
127 | return tgid; | 127 | return tgid; |
128 | } | 128 | } |
129 | 129 | ||
130 | static int perf_event__synthesize_mmap_events(struct perf_event_ops *ops, | 130 | static int perf_event__synthesize_mmap_events(struct perf_tool *tool, |
131 | union perf_event *event, | 131 | union perf_event *event, |
132 | pid_t pid, pid_t tgid, | 132 | pid_t pid, pid_t tgid, |
133 | perf_event__handler_t process, | 133 | perf_event__handler_t process, |
@@ -199,7 +199,7 @@ static int perf_event__synthesize_mmap_events(struct perf_event_ops *ops, | |||
199 | event->mmap.pid = tgid; | 199 | event->mmap.pid = tgid; |
200 | event->mmap.tid = pid; | 200 | event->mmap.tid = pid; |
201 | 201 | ||
202 | process(ops, event, &synth_sample, machine); | 202 | process(tool, event, &synth_sample, machine); |
203 | } | 203 | } |
204 | } | 204 | } |
205 | 205 | ||
@@ -207,7 +207,7 @@ static int perf_event__synthesize_mmap_events(struct perf_event_ops *ops, | |||
207 | return 0; | 207 | return 0; |
208 | } | 208 | } |
209 | 209 | ||
210 | int perf_event__synthesize_modules(struct perf_event_ops *ops, | 210 | int perf_event__synthesize_modules(struct perf_tool *tool, |
211 | perf_event__handler_t process, | 211 | perf_event__handler_t process, |
212 | struct machine *machine) | 212 | struct machine *machine) |
213 | { | 213 | { |
@@ -252,7 +252,7 @@ int perf_event__synthesize_modules(struct perf_event_ops *ops, | |||
252 | 252 | ||
253 | memcpy(event->mmap.filename, pos->dso->long_name, | 253 | memcpy(event->mmap.filename, pos->dso->long_name, |
254 | pos->dso->long_name_len + 1); | 254 | pos->dso->long_name_len + 1); |
255 | process(ops, event, &synth_sample, machine); | 255 | process(tool, event, &synth_sample, machine); |
256 | } | 256 | } |
257 | 257 | ||
258 | free(event); | 258 | free(event); |
@@ -262,18 +262,18 @@ int perf_event__synthesize_modules(struct perf_event_ops *ops, | |||
262 | static int __event__synthesize_thread(union perf_event *comm_event, | 262 | static int __event__synthesize_thread(union perf_event *comm_event, |
263 | union perf_event *mmap_event, | 263 | union perf_event *mmap_event, |
264 | pid_t pid, perf_event__handler_t process, | 264 | pid_t pid, perf_event__handler_t process, |
265 | struct perf_event_ops *ops, | 265 | struct perf_tool *tool, |
266 | struct machine *machine) | 266 | struct machine *machine) |
267 | { | 267 | { |
268 | pid_t tgid = perf_event__synthesize_comm(ops, comm_event, pid, 1, | 268 | pid_t tgid = perf_event__synthesize_comm(tool, comm_event, pid, 1, |
269 | process, machine); | 269 | process, machine); |
270 | if (tgid == -1) | 270 | if (tgid == -1) |
271 | return -1; | 271 | return -1; |
272 | return perf_event__synthesize_mmap_events(ops, mmap_event, pid, tgid, | 272 | return perf_event__synthesize_mmap_events(tool, mmap_event, pid, tgid, |
273 | process, machine); | 273 | process, machine); |
274 | } | 274 | } |
275 | 275 | ||
276 | int perf_event__synthesize_thread_map(struct perf_event_ops *ops, | 276 | int perf_event__synthesize_thread_map(struct perf_tool *tool, |
277 | struct thread_map *threads, | 277 | struct thread_map *threads, |
278 | perf_event__handler_t process, | 278 | perf_event__handler_t process, |
279 | struct machine *machine) | 279 | struct machine *machine) |
@@ -293,7 +293,7 @@ int perf_event__synthesize_thread_map(struct perf_event_ops *ops, | |||
293 | for (thread = 0; thread < threads->nr; ++thread) { | 293 | for (thread = 0; thread < threads->nr; ++thread) { |
294 | if (__event__synthesize_thread(comm_event, mmap_event, | 294 | if (__event__synthesize_thread(comm_event, mmap_event, |
295 | threads->map[thread], | 295 | threads->map[thread], |
296 | process, ops, machine)) { | 296 | process, tool, machine)) { |
297 | err = -1; | 297 | err = -1; |
298 | break; | 298 | break; |
299 | } | 299 | } |
@@ -305,7 +305,7 @@ out: | |||
305 | return err; | 305 | return err; |
306 | } | 306 | } |
307 | 307 | ||
308 | int perf_event__synthesize_threads(struct perf_event_ops *ops, | 308 | int perf_event__synthesize_threads(struct perf_tool *tool, |
309 | perf_event__handler_t process, | 309 | perf_event__handler_t process, |
310 | struct machine *machine) | 310 | struct machine *machine) |
311 | { | 311 | { |
@@ -334,7 +334,7 @@ int perf_event__synthesize_threads(struct perf_event_ops *ops, | |||
334 | continue; | 334 | continue; |
335 | 335 | ||
336 | __event__synthesize_thread(comm_event, mmap_event, pid, | 336 | __event__synthesize_thread(comm_event, mmap_event, pid, |
337 | process, ops, machine); | 337 | process, tool, machine); |
338 | } | 338 | } |
339 | 339 | ||
340 | closedir(proc); | 340 | closedir(proc); |
@@ -369,7 +369,7 @@ static int find_symbol_cb(void *arg, const char *name, char type, | |||
369 | return 1; | 369 | return 1; |
370 | } | 370 | } |
371 | 371 | ||
372 | int perf_event__synthesize_kernel_mmap(struct perf_event_ops *ops, | 372 | int perf_event__synthesize_kernel_mmap(struct perf_tool *tool, |
373 | perf_event__handler_t process, | 373 | perf_event__handler_t process, |
374 | struct machine *machine, | 374 | struct machine *machine, |
375 | const char *symbol_name) | 375 | const char *symbol_name) |
@@ -427,13 +427,13 @@ int perf_event__synthesize_kernel_mmap(struct perf_event_ops *ops, | |||
427 | event->mmap.len = map->end - event->mmap.start; | 427 | event->mmap.len = map->end - event->mmap.start; |
428 | event->mmap.pid = machine->pid; | 428 | event->mmap.pid = machine->pid; |
429 | 429 | ||
430 | err = process(ops, event, &synth_sample, machine); | 430 | err = process(tool, event, &synth_sample, machine); |
431 | free(event); | 431 | free(event); |
432 | 432 | ||
433 | return err; | 433 | return err; |
434 | } | 434 | } |
435 | 435 | ||
436 | int perf_event__process_comm(struct perf_event_ops *ops __used, | 436 | int perf_event__process_comm(struct perf_tool *tool __used, |
437 | union perf_event *event, | 437 | union perf_event *event, |
438 | struct perf_sample *sample __used, | 438 | struct perf_sample *sample __used, |
439 | struct machine *machine) | 439 | struct machine *machine) |
@@ -450,7 +450,7 @@ int perf_event__process_comm(struct perf_event_ops *ops __used, | |||
450 | return 0; | 450 | return 0; |
451 | } | 451 | } |
452 | 452 | ||
453 | int perf_event__process_lost(struct perf_event_ops *ops __used, | 453 | int perf_event__process_lost(struct perf_tool *tool __used, |
454 | union perf_event *event, | 454 | union perf_event *event, |
455 | struct perf_sample *sample __used, | 455 | struct perf_sample *sample __used, |
456 | struct machine *machine __used) | 456 | struct machine *machine __used) |
@@ -473,7 +473,7 @@ static void perf_event__set_kernel_mmap_len(union perf_event *event, | |||
473 | maps[MAP__FUNCTION]->end = ~0ULL; | 473 | maps[MAP__FUNCTION]->end = ~0ULL; |
474 | } | 474 | } |
475 | 475 | ||
476 | static int perf_event__process_kernel_mmap(struct perf_event_ops *ops __used, | 476 | static int perf_event__process_kernel_mmap(struct perf_tool *tool __used, |
477 | union perf_event *event, | 477 | union perf_event *event, |
478 | struct machine *machine) | 478 | struct machine *machine) |
479 | { | 479 | { |
@@ -566,7 +566,7 @@ out_problem: | |||
566 | return -1; | 566 | return -1; |
567 | } | 567 | } |
568 | 568 | ||
569 | int perf_event__process_mmap(struct perf_event_ops *ops, | 569 | int perf_event__process_mmap(struct perf_tool *tool, |
570 | union perf_event *event, | 570 | union perf_event *event, |
571 | struct perf_sample *sample __used, | 571 | struct perf_sample *sample __used, |
572 | struct machine *machine) | 572 | struct machine *machine) |
@@ -582,7 +582,7 @@ int perf_event__process_mmap(struct perf_event_ops *ops, | |||
582 | 582 | ||
583 | if (cpumode == PERF_RECORD_MISC_GUEST_KERNEL || | 583 | if (cpumode == PERF_RECORD_MISC_GUEST_KERNEL || |
584 | cpumode == PERF_RECORD_MISC_KERNEL) { | 584 | cpumode == PERF_RECORD_MISC_KERNEL) { |
585 | ret = perf_event__process_kernel_mmap(ops, event, machine); | 585 | ret = perf_event__process_kernel_mmap(tool, event, machine); |
586 | if (ret < 0) | 586 | if (ret < 0) |
587 | goto out_problem; | 587 | goto out_problem; |
588 | return 0; | 588 | return 0; |
@@ -606,7 +606,7 @@ out_problem: | |||
606 | return 0; | 606 | return 0; |
607 | } | 607 | } |
608 | 608 | ||
609 | int perf_event__process_task(struct perf_event_ops *ops __used, | 609 | int perf_event__process_task(struct perf_tool *tool __used, |
610 | union perf_event *event, | 610 | union perf_event *event, |
611 | struct perf_sample *sample __used, | 611 | struct perf_sample *sample __used, |
612 | struct machine *machine) | 612 | struct machine *machine) |
@@ -631,22 +631,22 @@ int perf_event__process_task(struct perf_event_ops *ops __used, | |||
631 | return 0; | 631 | return 0; |
632 | } | 632 | } |
633 | 633 | ||
634 | int perf_event__process(struct perf_event_ops *ops, union perf_event *event, | 634 | int perf_event__process(struct perf_tool *tool, union perf_event *event, |
635 | struct perf_sample *sample, struct machine *machine) | 635 | struct perf_sample *sample, struct machine *machine) |
636 | { | 636 | { |
637 | switch (event->header.type) { | 637 | switch (event->header.type) { |
638 | case PERF_RECORD_COMM: | 638 | case PERF_RECORD_COMM: |
639 | perf_event__process_comm(ops, event, sample, machine); | 639 | perf_event__process_comm(tool, event, sample, machine); |
640 | break; | 640 | break; |
641 | case PERF_RECORD_MMAP: | 641 | case PERF_RECORD_MMAP: |
642 | perf_event__process_mmap(ops, event, sample, machine); | 642 | perf_event__process_mmap(tool, event, sample, machine); |
643 | break; | 643 | break; |
644 | case PERF_RECORD_FORK: | 644 | case PERF_RECORD_FORK: |
645 | case PERF_RECORD_EXIT: | 645 | case PERF_RECORD_EXIT: |
646 | perf_event__process_task(ops, event, sample, machine); | 646 | perf_event__process_task(tool, event, sample, machine); |
647 | break; | 647 | break; |
648 | case PERF_RECORD_LOST: | 648 | case PERF_RECORD_LOST: |
649 | perf_event__process_lost(ops, event, sample, machine); | 649 | perf_event__process_lost(tool, event, sample, machine); |
650 | default: | 650 | default: |
651 | break; | 651 | break; |
652 | } | 652 | } |
diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h index 1564877e870..d8499e7cf64 100644 --- a/tools/perf/util/event.h +++ b/tools/perf/util/event.h | |||
@@ -141,47 +141,47 @@ union perf_event { | |||
141 | 141 | ||
142 | void perf_event__print_totals(void); | 142 | void perf_event__print_totals(void); |
143 | 143 | ||
144 | struct perf_event_ops; | 144 | struct perf_tool; |
145 | struct thread_map; | 145 | struct thread_map; |
146 | 146 | ||
147 | typedef int (*perf_event__handler_t)(struct perf_event_ops *ops, | 147 | typedef int (*perf_event__handler_t)(struct perf_tool *tool, |
148 | union perf_event *event, | 148 | union perf_event *event, |
149 | struct perf_sample *sample, | 149 | struct perf_sample *sample, |
150 | struct machine *machine); | 150 | struct machine *machine); |
151 | 151 | ||
152 | int perf_event__synthesize_thread_map(struct perf_event_ops *ops, | 152 | int perf_event__synthesize_thread_map(struct perf_tool *tool, |
153 | struct thread_map *threads, | 153 | struct thread_map *threads, |
154 | perf_event__handler_t process, | 154 | perf_event__handler_t process, |
155 | struct machine *machine); | 155 | struct machine *machine); |
156 | int perf_event__synthesize_threads(struct perf_event_ops *ops, | 156 | int perf_event__synthesize_threads(struct perf_tool *tool, |
157 | perf_event__handler_t process, | 157 | perf_event__handler_t process, |
158 | struct machine *machine); | 158 | struct machine *machine); |
159 | int perf_event__synthesize_kernel_mmap(struct perf_event_ops *ops, | 159 | int perf_event__synthesize_kernel_mmap(struct perf_tool *tool, |
160 | perf_event__handler_t process, | 160 | perf_event__handler_t process, |
161 | struct machine *machine, | 161 | struct machine *machine, |
162 | const char *symbol_name); | 162 | const char *symbol_name); |
163 | 163 | ||
164 | int perf_event__synthesize_modules(struct perf_event_ops *ops, | 164 | int perf_event__synthesize_modules(struct perf_tool *tool, |
165 | perf_event__handler_t process, | 165 | perf_event__handler_t process, |
166 | struct machine *machine); | 166 | struct machine *machine); |
167 | 167 | ||
168 | int perf_event__process_comm(struct perf_event_ops *ops, | 168 | int perf_event__process_comm(struct perf_tool *tool, |
169 | union perf_event *event, | 169 | union perf_event *event, |
170 | struct perf_sample *sample, | 170 | struct perf_sample *sample, |
171 | struct machine *machine); | 171 | struct machine *machine); |
172 | int perf_event__process_lost(struct perf_event_ops *ops, | 172 | int perf_event__process_lost(struct perf_tool *tool, |
173 | union perf_event *event, | 173 | union perf_event *event, |
174 | struct perf_sample *sample, | 174 | struct perf_sample *sample, |
175 | struct machine *machine); | 175 | struct machine *machine); |
176 | int perf_event__process_mmap(struct perf_event_ops *ops, | 176 | int perf_event__process_mmap(struct perf_tool *tool, |
177 | union perf_event *event, | 177 | union perf_event *event, |
178 | struct perf_sample *sample, | 178 | struct perf_sample *sample, |
179 | struct machine *machine); | 179 | struct machine *machine); |
180 | int perf_event__process_task(struct perf_event_ops *ops, | 180 | int perf_event__process_task(struct perf_tool *tool, |
181 | union perf_event *event, | 181 | union perf_event *event, |
182 | struct perf_sample *sample, | 182 | struct perf_sample *sample, |
183 | struct machine *machine); | 183 | struct machine *machine); |
184 | int perf_event__process(struct perf_event_ops *ops, | 184 | int perf_event__process(struct perf_tool *tool, |
185 | union perf_event *event, | 185 | union perf_event *event, |
186 | struct perf_sample *sample, | 186 | struct perf_sample *sample, |
187 | struct machine *machine); | 187 | struct machine *machine); |
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index db280d6ca89..9272f3a20ca 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c | |||
@@ -2070,7 +2070,7 @@ out_delete_evlist: | |||
2070 | return -ENOMEM; | 2070 | return -ENOMEM; |
2071 | } | 2071 | } |
2072 | 2072 | ||
2073 | int perf_event__synthesize_attr(struct perf_event_ops *ops, | 2073 | int perf_event__synthesize_attr(struct perf_tool *tool, |
2074 | struct perf_event_attr *attr, u16 ids, u64 *id, | 2074 | struct perf_event_attr *attr, u16 ids, u64 *id, |
2075 | perf_event__handler_t process) | 2075 | perf_event__handler_t process) |
2076 | { | 2076 | { |
@@ -2094,14 +2094,14 @@ int perf_event__synthesize_attr(struct perf_event_ops *ops, | |||
2094 | ev->attr.header.type = PERF_RECORD_HEADER_ATTR; | 2094 | ev->attr.header.type = PERF_RECORD_HEADER_ATTR; |
2095 | ev->attr.header.size = size; | 2095 | ev->attr.header.size = size; |
2096 | 2096 | ||
2097 | err = process(ops, ev, NULL, NULL); | 2097 | err = process(tool, ev, NULL, NULL); |
2098 | 2098 | ||
2099 | free(ev); | 2099 | free(ev); |
2100 | 2100 | ||
2101 | return err; | 2101 | return err; |
2102 | } | 2102 | } |
2103 | 2103 | ||
2104 | int perf_event__synthesize_attrs(struct perf_event_ops *ops, | 2104 | int perf_event__synthesize_attrs(struct perf_tool *tool, |
2105 | struct perf_session *session, | 2105 | struct perf_session *session, |
2106 | perf_event__handler_t process) | 2106 | perf_event__handler_t process) |
2107 | { | 2107 | { |
@@ -2109,7 +2109,7 @@ int perf_event__synthesize_attrs(struct perf_event_ops *ops, | |||
2109 | int err = 0; | 2109 | int err = 0; |
2110 | 2110 | ||
2111 | list_for_each_entry(attr, &session->evlist->entries, node) { | 2111 | list_for_each_entry(attr, &session->evlist->entries, node) { |
2112 | err = perf_event__synthesize_attr(ops, &attr->attr, attr->ids, | 2112 | err = perf_event__synthesize_attr(tool, &attr->attr, attr->ids, |
2113 | attr->id, process); | 2113 | attr->id, process); |
2114 | if (err) { | 2114 | if (err) { |
2115 | pr_debug("failed to create perf header attribute\n"); | 2115 | pr_debug("failed to create perf header attribute\n"); |
@@ -2157,7 +2157,7 @@ int perf_event__process_attr(union perf_event *event, | |||
2157 | return 0; | 2157 | return 0; |
2158 | } | 2158 | } |
2159 | 2159 | ||
2160 | int perf_event__synthesize_event_type(struct perf_event_ops *ops, | 2160 | int perf_event__synthesize_event_type(struct perf_tool *tool, |
2161 | u64 event_id, char *name, | 2161 | u64 event_id, char *name, |
2162 | perf_event__handler_t process, | 2162 | perf_event__handler_t process, |
2163 | struct machine *machine) | 2163 | struct machine *machine) |
@@ -2178,12 +2178,12 @@ int perf_event__synthesize_event_type(struct perf_event_ops *ops, | |||
2178 | ev.event_type.header.size = sizeof(ev.event_type) - | 2178 | ev.event_type.header.size = sizeof(ev.event_type) - |
2179 | (sizeof(ev.event_type.event_type.name) - size); | 2179 | (sizeof(ev.event_type.event_type.name) - size); |
2180 | 2180 | ||
2181 | err = process(ops, &ev, NULL, machine); | 2181 | err = process(tool, &ev, NULL, machine); |
2182 | 2182 | ||
2183 | return err; | 2183 | return err; |
2184 | } | 2184 | } |
2185 | 2185 | ||
2186 | int perf_event__synthesize_event_types(struct perf_event_ops *ops, | 2186 | int perf_event__synthesize_event_types(struct perf_tool *tool, |
2187 | perf_event__handler_t process, | 2187 | perf_event__handler_t process, |
2188 | struct machine *machine) | 2188 | struct machine *machine) |
2189 | { | 2189 | { |
@@ -2193,7 +2193,7 @@ int perf_event__synthesize_event_types(struct perf_event_ops *ops, | |||
2193 | for (i = 0; i < event_count; i++) { | 2193 | for (i = 0; i < event_count; i++) { |
2194 | type = &events[i]; | 2194 | type = &events[i]; |
2195 | 2195 | ||
2196 | err = perf_event__synthesize_event_type(ops, type->event_id, | 2196 | err = perf_event__synthesize_event_type(tool, type->event_id, |
2197 | type->name, process, | 2197 | type->name, process, |
2198 | machine); | 2198 | machine); |
2199 | if (err) { | 2199 | if (err) { |
@@ -2205,7 +2205,7 @@ int perf_event__synthesize_event_types(struct perf_event_ops *ops, | |||
2205 | return err; | 2205 | return err; |
2206 | } | 2206 | } |
2207 | 2207 | ||
2208 | int perf_event__process_event_type(struct perf_event_ops *ops __unused, | 2208 | int perf_event__process_event_type(struct perf_tool *tool __unused, |
2209 | union perf_event *event) | 2209 | union perf_event *event) |
2210 | { | 2210 | { |
2211 | if (perf_header__push_event(event->event_type.event_type.event_id, | 2211 | if (perf_header__push_event(event->event_type.event_type.event_id, |
@@ -2215,7 +2215,7 @@ int perf_event__process_event_type(struct perf_event_ops *ops __unused, | |||
2215 | return 0; | 2215 | return 0; |
2216 | } | 2216 | } |
2217 | 2217 | ||
2218 | int perf_event__synthesize_tracing_data(struct perf_event_ops *ops, int fd, | 2218 | int perf_event__synthesize_tracing_data(struct perf_tool *tool, int fd, |
2219 | struct perf_evlist *evlist, | 2219 | struct perf_evlist *evlist, |
2220 | perf_event__handler_t process) | 2220 | perf_event__handler_t process) |
2221 | { | 2221 | { |
@@ -2248,7 +2248,7 @@ int perf_event__synthesize_tracing_data(struct perf_event_ops *ops, int fd, | |||
2248 | ev.tracing_data.header.size = sizeof(ev.tracing_data); | 2248 | ev.tracing_data.header.size = sizeof(ev.tracing_data); |
2249 | ev.tracing_data.size = aligned_size; | 2249 | ev.tracing_data.size = aligned_size; |
2250 | 2250 | ||
2251 | process(ops, &ev, NULL, NULL); | 2251 | process(tool, &ev, NULL, NULL); |
2252 | 2252 | ||
2253 | /* | 2253 | /* |
2254 | * The put function will copy all the tracing data | 2254 | * The put function will copy all the tracing data |
@@ -2290,7 +2290,7 @@ int perf_event__process_tracing_data(union perf_event *event, | |||
2290 | return size_read + padding; | 2290 | return size_read + padding; |
2291 | } | 2291 | } |
2292 | 2292 | ||
2293 | int perf_event__synthesize_build_id(struct perf_event_ops *ops, | 2293 | int perf_event__synthesize_build_id(struct perf_tool *tool, |
2294 | struct dso *pos, u16 misc, | 2294 | struct dso *pos, u16 misc, |
2295 | perf_event__handler_t process, | 2295 | perf_event__handler_t process, |
2296 | struct machine *machine) | 2296 | struct machine *machine) |
@@ -2313,12 +2313,12 @@ int perf_event__synthesize_build_id(struct perf_event_ops *ops, | |||
2313 | ev.build_id.header.size = sizeof(ev.build_id) + len; | 2313 | ev.build_id.header.size = sizeof(ev.build_id) + len; |
2314 | memcpy(&ev.build_id.filename, pos->long_name, pos->long_name_len); | 2314 | memcpy(&ev.build_id.filename, pos->long_name, pos->long_name_len); |
2315 | 2315 | ||
2316 | err = process(ops, &ev, NULL, machine); | 2316 | err = process(tool, &ev, NULL, machine); |
2317 | 2317 | ||
2318 | return err; | 2318 | return err; |
2319 | } | 2319 | } |
2320 | 2320 | ||
2321 | int perf_event__process_build_id(struct perf_event_ops *ops __used, | 2321 | int perf_event__process_build_id(struct perf_tool *tool __used, |
2322 | union perf_event *event, | 2322 | union perf_event *event, |
2323 | struct perf_session *session) | 2323 | struct perf_session *session) |
2324 | { | 2324 | { |
diff --git a/tools/perf/util/header.h b/tools/perf/util/header.h index a604962fc43..09365b32098 100644 --- a/tools/perf/util/header.h +++ b/tools/perf/util/header.h | |||
@@ -97,35 +97,35 @@ int build_id_cache__add_s(const char *sbuild_id, const char *debugdir, | |||
97 | const char *name, bool is_kallsyms); | 97 | const char *name, bool is_kallsyms); |
98 | int build_id_cache__remove_s(const char *sbuild_id, const char *debugdir); | 98 | int build_id_cache__remove_s(const char *sbuild_id, const char *debugdir); |
99 | 99 | ||
100 | int perf_event__synthesize_attr(struct perf_event_ops *ops, | 100 | int perf_event__synthesize_attr(struct perf_tool *tool, |
101 | struct perf_event_attr *attr, u16 ids, u64 *id, | 101 | struct perf_event_attr *attr, u16 ids, u64 *id, |
102 | perf_event__handler_t process); | 102 | perf_event__handler_t process); |
103 | int perf_event__synthesize_attrs(struct perf_event_ops *ops, | 103 | int perf_event__synthesize_attrs(struct perf_tool *tool, |
104 | struct perf_session *session, | 104 | struct perf_session *session, |
105 | perf_event__handler_t process); | 105 | perf_event__handler_t process); |
106 | int perf_event__process_attr(union perf_event *event, struct perf_evlist **pevlist); | 106 | int perf_event__process_attr(union perf_event *event, struct perf_evlist **pevlist); |
107 | 107 | ||
108 | int perf_event__synthesize_event_type(struct perf_event_ops *ops, | 108 | int perf_event__synthesize_event_type(struct perf_tool *tool, |
109 | u64 event_id, char *name, | 109 | u64 event_id, char *name, |
110 | perf_event__handler_t process, | 110 | perf_event__handler_t process, |
111 | struct machine *machine); | 111 | struct machine *machine); |
112 | int perf_event__synthesize_event_types(struct perf_event_ops *ops, | 112 | int perf_event__synthesize_event_types(struct perf_tool *tool, |
113 | perf_event__handler_t process, | 113 | perf_event__handler_t process, |
114 | struct machine *machine); | 114 | struct machine *machine); |
115 | int perf_event__process_event_type(struct perf_event_ops *ops, | 115 | int perf_event__process_event_type(struct perf_tool *tool, |
116 | union perf_event *event); | 116 | union perf_event *event); |
117 | 117 | ||
118 | int perf_event__synthesize_tracing_data(struct perf_event_ops *ops, | 118 | int perf_event__synthesize_tracing_data(struct perf_tool *tool, |
119 | int fd, struct perf_evlist *evlist, | 119 | int fd, struct perf_evlist *evlist, |
120 | perf_event__handler_t process); | 120 | perf_event__handler_t process); |
121 | int perf_event__process_tracing_data(union perf_event *event, | 121 | int perf_event__process_tracing_data(union perf_event *event, |
122 | struct perf_session *session); | 122 | struct perf_session *session); |
123 | 123 | ||
124 | int perf_event__synthesize_build_id(struct perf_event_ops *ops, | 124 | int perf_event__synthesize_build_id(struct perf_tool *tool, |
125 | struct dso *pos, u16 misc, | 125 | struct dso *pos, u16 misc, |
126 | perf_event__handler_t process, | 126 | perf_event__handler_t process, |
127 | struct machine *machine); | 127 | struct machine *machine); |
128 | int perf_event__process_build_id(struct perf_event_ops *ops, | 128 | int perf_event__process_build_id(struct perf_tool *tool, |
129 | union perf_event *event, | 129 | union perf_event *event, |
130 | struct perf_session *session); | 130 | struct perf_session *session); |
131 | 131 | ||
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index be33606386b..7d159088c4a 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c | |||
@@ -10,6 +10,7 @@ | |||
10 | #include "evlist.h" | 10 | #include "evlist.h" |
11 | #include "evsel.h" | 11 | #include "evsel.h" |
12 | #include "session.h" | 12 | #include "session.h" |
13 | #include "tool.h" | ||
13 | #include "sort.h" | 14 | #include "sort.h" |
14 | #include "util.h" | 15 | #include "util.h" |
15 | #include "cpumap.h" | 16 | #include "cpumap.h" |
@@ -104,7 +105,7 @@ static void perf_session__destroy_kernel_maps(struct perf_session *self) | |||
104 | 105 | ||
105 | struct perf_session *perf_session__new(const char *filename, int mode, | 106 | struct perf_session *perf_session__new(const char *filename, int mode, |
106 | bool force, bool repipe, | 107 | bool force, bool repipe, |
107 | struct perf_event_ops *ops) | 108 | struct perf_tool *tool) |
108 | { | 109 | { |
109 | size_t len = filename ? strlen(filename) + 1 : 0; | 110 | size_t len = filename ? strlen(filename) + 1 : 0; |
110 | struct perf_session *self = zalloc(sizeof(*self) + len); | 111 | struct perf_session *self = zalloc(sizeof(*self) + len); |
@@ -142,10 +143,10 @@ struct perf_session *perf_session__new(const char *filename, int mode, | |||
142 | goto out_delete; | 143 | goto out_delete; |
143 | } | 144 | } |
144 | 145 | ||
145 | if (ops && ops->ordering_requires_timestamps && | 146 | if (tool && tool->ordering_requires_timestamps && |
146 | ops->ordered_samples && !self->sample_id_all) { | 147 | tool->ordered_samples && !self->sample_id_all) { |
147 | dump_printf("WARNING: No sample_id_all support, falling back to unordered processing\n"); | 148 | dump_printf("WARNING: No sample_id_all support, falling back to unordered processing\n"); |
148 | ops->ordered_samples = false; | 149 | tool->ordered_samples = false; |
149 | } | 150 | } |
150 | 151 | ||
151 | out: | 152 | out: |
@@ -285,7 +286,7 @@ static int process_event_synth_attr_stub(union perf_event *event __used, | |||
285 | return 0; | 286 | return 0; |
286 | } | 287 | } |
287 | 288 | ||
288 | static int process_event_sample_stub(struct perf_event_ops *ops __used, | 289 | static int process_event_sample_stub(struct perf_tool *tool __used, |
289 | union perf_event *event __used, | 290 | union perf_event *event __used, |
290 | struct perf_sample *sample __used, | 291 | struct perf_sample *sample __used, |
291 | struct perf_evsel *evsel __used, | 292 | struct perf_evsel *evsel __used, |
@@ -295,7 +296,7 @@ static int process_event_sample_stub(struct perf_event_ops *ops __used, | |||
295 | return 0; | 296 | return 0; |
296 | } | 297 | } |
297 | 298 | ||
298 | static int process_event_stub(struct perf_event_ops *ops __used, | 299 | static int process_event_stub(struct perf_tool *tool __used, |
299 | union perf_event *event __used, | 300 | union perf_event *event __used, |
300 | struct perf_sample *sample __used, | 301 | struct perf_sample *sample __used, |
301 | struct machine *machine __used) | 302 | struct machine *machine __used) |
@@ -304,7 +305,7 @@ static int process_event_stub(struct perf_event_ops *ops __used, | |||
304 | return 0; | 305 | return 0; |
305 | } | 306 | } |
306 | 307 | ||
307 | static int process_finished_round_stub(struct perf_event_ops *ops __used, | 308 | static int process_finished_round_stub(struct perf_tool *tool __used, |
308 | union perf_event *event __used, | 309 | union perf_event *event __used, |
309 | struct perf_session *perf_session __used) | 310 | struct perf_session *perf_session __used) |
310 | { | 311 | { |
@@ -312,50 +313,50 @@ static int process_finished_round_stub(struct perf_event_ops *ops __used, | |||
312 | return 0; | 313 | return 0; |
313 | } | 314 | } |
314 | 315 | ||
315 | static int process_event_type_stub(struct perf_event_ops *ops __used, | 316 | static int process_event_type_stub(struct perf_tool *tool __used, |
316 | union perf_event *event __used) | 317 | union perf_event *event __used) |
317 | { | 318 | { |
318 | dump_printf(": unhandled!\n"); | 319 | dump_printf(": unhandled!\n"); |
319 | return 0; | 320 | return 0; |
320 | } | 321 | } |
321 | 322 | ||
322 | static int process_finished_round(struct perf_event_ops *ops, | 323 | static int process_finished_round(struct perf_tool *tool, |
323 | union perf_event *event, | 324 | union perf_event *event, |
324 | struct perf_session *session); | 325 | struct perf_session *session); |
325 | 326 | ||
326 | static void perf_event_ops__fill_defaults(struct perf_event_ops *handler) | 327 | static void perf_tool__fill_defaults(struct perf_tool *tool) |
327 | { | 328 | { |
328 | if (handler->sample == NULL) | 329 | if (tool->sample == NULL) |
329 | handler->sample = process_event_sample_stub; | 330 | tool->sample = process_event_sample_stub; |
330 | if (handler->mmap == NULL) | 331 | if (tool->mmap == NULL) |
331 | handler->mmap = process_event_stub; | 332 | tool->mmap = process_event_stub; |
332 | if (handler->comm == NULL) | 333 | if (tool->comm == NULL) |
333 | handler->comm = process_event_stub; | 334 | tool->comm = process_event_stub; |
334 | if (handler->fork == NULL) | 335 | if (tool->fork == NULL) |
335 | handler->fork = process_event_stub; | 336 | tool->fork = process_event_stub; |
336 | if (handler->exit == NULL) | 337 | if (tool->exit == NULL) |
337 | handler->exit = process_event_stub; | 338 | tool->exit = process_event_stub; |
338 | if (handler->lost == NULL) | 339 | if (tool->lost == NULL) |
339 | handler->lost = perf_event__process_lost; | 340 | tool->lost = perf_event__process_lost; |
340 | if (handler->read == NULL) | 341 | if (tool->read == NULL) |
341 | handler->read = process_event_sample_stub; | 342 | tool->read = process_event_sample_stub; |
342 | if (handler->throttle == NULL) | 343 | if (tool->throttle == NULL) |
343 | handler->throttle = process_event_stub; | 344 | tool->throttle = process_event_stub; |
344 | if (handler->unthrottle == NULL) | 345 | if (tool->unthrottle == NULL) |
345 | handler->unthrottle = process_event_stub; | 346 | tool->unthrottle = process_event_stub; |
346 | if (handler->attr == NULL) | 347 | if (tool->attr == NULL) |
347 | handler->attr = process_event_synth_attr_stub; | 348 | tool->attr = process_event_synth_attr_stub; |
348 | if (handler->event_type == NULL) | 349 | if (tool->event_type == NULL) |
349 | handler->event_type = process_event_type_stub; | 350 | tool->event_type = process_event_type_stub; |
350 | if (handler->tracing_data == NULL) | 351 | if (tool->tracing_data == NULL) |
351 | handler->tracing_data = process_event_synth_tracing_data_stub; | 352 | tool->tracing_data = process_event_synth_tracing_data_stub; |
352 | if (handler->build_id == NULL) | 353 | if (tool->build_id == NULL) |
353 | handler->build_id = process_finished_round_stub; | 354 | tool->build_id = process_finished_round_stub; |
354 | if (handler->finished_round == NULL) { | 355 | if (tool->finished_round == NULL) { |
355 | if (handler->ordered_samples) | 356 | if (tool->ordered_samples) |
356 | handler->finished_round = process_finished_round; | 357 | tool->finished_round = process_finished_round; |
357 | else | 358 | else |
358 | handler->finished_round = process_finished_round_stub; | 359 | tool->finished_round = process_finished_round_stub; |
359 | } | 360 | } |
360 | } | 361 | } |
361 | 362 | ||
@@ -487,11 +488,11 @@ static void perf_session_free_sample_buffers(struct perf_session *session) | |||
487 | static int perf_session_deliver_event(struct perf_session *session, | 488 | static int perf_session_deliver_event(struct perf_session *session, |
488 | union perf_event *event, | 489 | union perf_event *event, |
489 | struct perf_sample *sample, | 490 | struct perf_sample *sample, |
490 | struct perf_event_ops *ops, | 491 | struct perf_tool *tool, |
491 | u64 file_offset); | 492 | u64 file_offset); |
492 | 493 | ||
493 | static void flush_sample_queue(struct perf_session *s, | 494 | static void flush_sample_queue(struct perf_session *s, |
494 | struct perf_event_ops *ops) | 495 | struct perf_tool *tool) |
495 | { | 496 | { |
496 | struct ordered_samples *os = &s->ordered_samples; | 497 | struct ordered_samples *os = &s->ordered_samples; |
497 | struct list_head *head = &os->samples; | 498 | struct list_head *head = &os->samples; |
@@ -502,7 +503,7 @@ static void flush_sample_queue(struct perf_session *s, | |||
502 | unsigned idx = 0, progress_next = os->nr_samples / 16; | 503 | unsigned idx = 0, progress_next = os->nr_samples / 16; |
503 | int ret; | 504 | int ret; |
504 | 505 | ||
505 | if (!ops->ordered_samples || !limit) | 506 | if (!tool->ordered_samples || !limit) |
506 | return; | 507 | return; |
507 | 508 | ||
508 | list_for_each_entry_safe(iter, tmp, head, list) { | 509 | list_for_each_entry_safe(iter, tmp, head, list) { |
@@ -513,7 +514,7 @@ static void flush_sample_queue(struct perf_session *s, | |||
513 | if (ret) | 514 | if (ret) |
514 | pr_err("Can't parse sample, err = %d\n", ret); | 515 | pr_err("Can't parse sample, err = %d\n", ret); |
515 | else | 516 | else |
516 | perf_session_deliver_event(s, iter->event, &sample, ops, | 517 | perf_session_deliver_event(s, iter->event, &sample, tool, |
517 | iter->file_offset); | 518 | iter->file_offset); |
518 | 519 | ||
519 | os->last_flush = iter->timestamp; | 520 | os->last_flush = iter->timestamp; |
@@ -575,11 +576,11 @@ static void flush_sample_queue(struct perf_session *s, | |||
575 | * Flush every events below timestamp 7 | 576 | * Flush every events below timestamp 7 |
576 | * etc... | 577 | * etc... |
577 | */ | 578 | */ |
578 | static int process_finished_round(struct perf_event_ops *ops, | 579 | static int process_finished_round(struct perf_tool *tool, |
579 | union perf_event *event __used, | 580 | union perf_event *event __used, |
580 | struct perf_session *session) | 581 | struct perf_session *session) |
581 | { | 582 | { |
582 | flush_sample_queue(session, ops); | 583 | flush_sample_queue(session, tool); |
583 | session->ordered_samples.next_flush = session->ordered_samples.max_timestamp; | 584 | session->ordered_samples.next_flush = session->ordered_samples.max_timestamp; |
584 | 585 | ||
585 | return 0; | 586 | return 0; |
@@ -749,7 +750,7 @@ static struct machine * | |||
749 | static int perf_session_deliver_event(struct perf_session *session, | 750 | static int perf_session_deliver_event(struct perf_session *session, |
750 | union perf_event *event, | 751 | union perf_event *event, |
751 | struct perf_sample *sample, | 752 | struct perf_sample *sample, |
752 | struct perf_event_ops *ops, | 753 | struct perf_tool *tool, |
753 | u64 file_offset) | 754 | u64 file_offset) |
754 | { | 755 | { |
755 | struct perf_evsel *evsel; | 756 | struct perf_evsel *evsel; |
@@ -784,25 +785,25 @@ static int perf_session_deliver_event(struct perf_session *session, | |||
784 | ++session->hists.stats.nr_unknown_id; | 785 | ++session->hists.stats.nr_unknown_id; |
785 | return -1; | 786 | return -1; |
786 | } | 787 | } |
787 | return ops->sample(ops, event, sample, evsel, machine); | 788 | return tool->sample(tool, event, sample, evsel, machine); |
788 | case PERF_RECORD_MMAP: | 789 | case PERF_RECORD_MMAP: |
789 | return ops->mmap(ops, event, sample, machine); | 790 | return tool->mmap(tool, event, sample, machine); |
790 | case PERF_RECORD_COMM: | 791 | case PERF_RECORD_COMM: |
791 | return ops->comm(ops, event, sample, machine); | 792 | return tool->comm(tool, event, sample, machine); |
792 | case PERF_RECORD_FORK: | 793 | case PERF_RECORD_FORK: |
793 | return ops->fork(ops, event, sample, machine); | 794 | return tool->fork(tool, event, sample, machine); |
794 | case PERF_RECORD_EXIT: | 795 | case PERF_RECORD_EXIT: |
795 | return ops->exit(ops, event, sample, machine); | 796 | return tool->exit(tool, event, sample, machine); |
796 | case PERF_RECORD_LOST: | 797 | case PERF_RECORD_LOST: |
797 | if (ops->lost == perf_event__process_lost) | 798 | if (tool->lost == perf_event__process_lost) |
798 | session->hists.stats.total_lost += event->lost.lost; | 799 | session->hists.stats.total_lost += event->lost.lost; |
799 | return ops->lost(ops, event, sample, machine); | 800 | return tool->lost(tool, event, sample, machine); |
800 | case PERF_RECORD_READ: | 801 | case PERF_RECORD_READ: |
801 | return ops->read(ops, event, sample, evsel, machine); | 802 | return tool->read(tool, event, sample, evsel, machine); |
802 | case PERF_RECORD_THROTTLE: | 803 | case PERF_RECORD_THROTTLE: |
803 | return ops->throttle(ops, event, sample, machine); | 804 | return tool->throttle(tool, event, sample, machine); |
804 | case PERF_RECORD_UNTHROTTLE: | 805 | case PERF_RECORD_UNTHROTTLE: |
805 | return ops->unthrottle(ops, event, sample, machine); | 806 | return tool->unthrottle(tool, event, sample, machine); |
806 | default: | 807 | default: |
807 | ++session->hists.stats.nr_unknown_events; | 808 | ++session->hists.stats.nr_unknown_events; |
808 | return -1; | 809 | return -1; |
@@ -826,7 +827,7 @@ static int perf_session__preprocess_sample(struct perf_session *session, | |||
826 | } | 827 | } |
827 | 828 | ||
828 | static int perf_session__process_user_event(struct perf_session *session, union perf_event *event, | 829 | static int perf_session__process_user_event(struct perf_session *session, union perf_event *event, |
829 | struct perf_event_ops *ops, u64 file_offset) | 830 | struct perf_tool *tool, u64 file_offset) |
830 | { | 831 | { |
831 | int err; | 832 | int err; |
832 | 833 | ||
@@ -835,20 +836,20 @@ static int perf_session__process_user_event(struct perf_session *session, union | |||
835 | /* These events are processed right away */ | 836 | /* These events are processed right away */ |
836 | switch (event->header.type) { | 837 | switch (event->header.type) { |
837 | case PERF_RECORD_HEADER_ATTR: | 838 | case PERF_RECORD_HEADER_ATTR: |
838 | err = ops->attr(event, &session->evlist); | 839 | err = tool->attr(event, &session->evlist); |
839 | if (err == 0) | 840 | if (err == 0) |
840 | perf_session__update_sample_type(session); | 841 | perf_session__update_sample_type(session); |
841 | return err; | 842 | return err; |
842 | case PERF_RECORD_HEADER_EVENT_TYPE: | 843 | case PERF_RECORD_HEADER_EVENT_TYPE: |
843 | return ops->event_type(ops, event); | 844 | return tool->event_type(tool, event); |
844 | case PERF_RECORD_HEADER_TRACING_DATA: | 845 | case PERF_RECORD_HEADER_TRACING_DATA: |
845 | /* setup for reading amidst mmap */ | 846 | /* setup for reading amidst mmap */ |
846 | lseek(session->fd, file_offset, SEEK_SET); | 847 | lseek(session->fd, file_offset, SEEK_SET); |
847 | return ops->tracing_data(event, session); | 848 | return tool->tracing_data(event, session); |
848 | case PERF_RECORD_HEADER_BUILD_ID: | 849 | case PERF_RECORD_HEADER_BUILD_ID: |
849 | return ops->build_id(ops, event, session); | 850 | return tool->build_id(tool, event, session); |
850 | case PERF_RECORD_FINISHED_ROUND: | 851 | case PERF_RECORD_FINISHED_ROUND: |
851 | return ops->finished_round(ops, event, session); | 852 | return tool->finished_round(tool, event, session); |
852 | default: | 853 | default: |
853 | return -EINVAL; | 854 | return -EINVAL; |
854 | } | 855 | } |
@@ -856,7 +857,7 @@ static int perf_session__process_user_event(struct perf_session *session, union | |||
856 | 857 | ||
857 | static int perf_session__process_event(struct perf_session *session, | 858 | static int perf_session__process_event(struct perf_session *session, |
858 | union perf_event *event, | 859 | union perf_event *event, |
859 | struct perf_event_ops *ops, | 860 | struct perf_tool *tool, |
860 | u64 file_offset) | 861 | u64 file_offset) |
861 | { | 862 | { |
862 | struct perf_sample sample; | 863 | struct perf_sample sample; |
@@ -872,7 +873,7 @@ static int perf_session__process_event(struct perf_session *session, | |||
872 | hists__inc_nr_events(&session->hists, event->header.type); | 873 | hists__inc_nr_events(&session->hists, event->header.type); |
873 | 874 | ||
874 | if (event->header.type >= PERF_RECORD_USER_TYPE_START) | 875 | if (event->header.type >= PERF_RECORD_USER_TYPE_START) |
875 | return perf_session__process_user_event(session, event, ops, file_offset); | 876 | return perf_session__process_user_event(session, event, tool, file_offset); |
876 | 877 | ||
877 | /* | 878 | /* |
878 | * For all kernel events we get the sample data | 879 | * For all kernel events we get the sample data |
@@ -885,14 +886,14 @@ static int perf_session__process_event(struct perf_session *session, | |||
885 | if (perf_session__preprocess_sample(session, event, &sample)) | 886 | if (perf_session__preprocess_sample(session, event, &sample)) |
886 | return 0; | 887 | return 0; |
887 | 888 | ||
888 | if (ops->ordered_samples) { | 889 | if (tool->ordered_samples) { |
889 | ret = perf_session_queue_event(session, event, &sample, | 890 | ret = perf_session_queue_event(session, event, &sample, |
890 | file_offset); | 891 | file_offset); |
891 | if (ret != -ETIME) | 892 | if (ret != -ETIME) |
892 | return ret; | 893 | return ret; |
893 | } | 894 | } |
894 | 895 | ||
895 | return perf_session_deliver_event(session, event, &sample, ops, | 896 | return perf_session_deliver_event(session, event, &sample, tool, |
896 | file_offset); | 897 | file_offset); |
897 | } | 898 | } |
898 | 899 | ||
@@ -921,9 +922,9 @@ static struct thread *perf_session__register_idle_thread(struct perf_session *se | |||
921 | } | 922 | } |
922 | 923 | ||
923 | static void perf_session__warn_about_errors(const struct perf_session *session, | 924 | static void perf_session__warn_about_errors(const struct perf_session *session, |
924 | const struct perf_event_ops *ops) | 925 | const struct perf_tool *tool) |
925 | { | 926 | { |
926 | if (ops->lost == perf_event__process_lost && | 927 | if (tool->lost == perf_event__process_lost && |
927 | session->hists.stats.nr_events[PERF_RECORD_LOST] != 0) { | 928 | session->hists.stats.nr_events[PERF_RECORD_LOST] != 0) { |
928 | ui__warning("Processed %d events and lost %d chunks!\n\n" | 929 | ui__warning("Processed %d events and lost %d chunks!\n\n" |
929 | "Check IO/CPU overload!\n\n", | 930 | "Check IO/CPU overload!\n\n", |
@@ -958,7 +959,7 @@ static void perf_session__warn_about_errors(const struct perf_session *session, | |||
958 | volatile int session_done; | 959 | volatile int session_done; |
959 | 960 | ||
960 | static int __perf_session__process_pipe_events(struct perf_session *self, | 961 | static int __perf_session__process_pipe_events(struct perf_session *self, |
961 | struct perf_event_ops *ops) | 962 | struct perf_tool *tool) |
962 | { | 963 | { |
963 | union perf_event event; | 964 | union perf_event event; |
964 | uint32_t size; | 965 | uint32_t size; |
@@ -967,7 +968,7 @@ static int __perf_session__process_pipe_events(struct perf_session *self, | |||
967 | int err; | 968 | int err; |
968 | void *p; | 969 | void *p; |
969 | 970 | ||
970 | perf_event_ops__fill_defaults(ops); | 971 | perf_tool__fill_defaults(tool); |
971 | 972 | ||
972 | head = 0; | 973 | head = 0; |
973 | more: | 974 | more: |
@@ -1004,7 +1005,7 @@ more: | |||
1004 | } | 1005 | } |
1005 | 1006 | ||
1006 | if (size == 0 || | 1007 | if (size == 0 || |
1007 | (skip = perf_session__process_event(self, &event, ops, head)) < 0) { | 1008 | (skip = perf_session__process_event(self, &event, tool, head)) < 0) { |
1008 | dump_printf("%#" PRIx64 " [%#x]: skipping unknown header type: %d\n", | 1009 | dump_printf("%#" PRIx64 " [%#x]: skipping unknown header type: %d\n", |
1009 | head, event.header.size, event.header.type); | 1010 | head, event.header.size, event.header.type); |
1010 | /* | 1011 | /* |
@@ -1027,7 +1028,7 @@ more: | |||
1027 | done: | 1028 | done: |
1028 | err = 0; | 1029 | err = 0; |
1029 | out_err: | 1030 | out_err: |
1030 | perf_session__warn_about_errors(self, ops); | 1031 | perf_session__warn_about_errors(self, tool); |
1031 | perf_session_free_sample_buffers(self); | 1032 | perf_session_free_sample_buffers(self); |
1032 | return err; | 1033 | return err; |
1033 | } | 1034 | } |
@@ -1058,7 +1059,7 @@ fetch_mmaped_event(struct perf_session *session, | |||
1058 | 1059 | ||
1059 | int __perf_session__process_events(struct perf_session *session, | 1060 | int __perf_session__process_events(struct perf_session *session, |
1060 | u64 data_offset, u64 data_size, | 1061 | u64 data_offset, u64 data_size, |
1061 | u64 file_size, struct perf_event_ops *ops) | 1062 | u64 file_size, struct perf_tool *tool) |
1062 | { | 1063 | { |
1063 | u64 head, page_offset, file_offset, file_pos, progress_next; | 1064 | u64 head, page_offset, file_offset, file_pos, progress_next; |
1064 | int err, mmap_prot, mmap_flags, map_idx = 0; | 1065 | int err, mmap_prot, mmap_flags, map_idx = 0; |
@@ -1067,7 +1068,7 @@ int __perf_session__process_events(struct perf_session *session, | |||
1067 | union perf_event *event; | 1068 | union perf_event *event; |
1068 | uint32_t size; | 1069 | uint32_t size; |
1069 | 1070 | ||
1070 | perf_event_ops__fill_defaults(ops); | 1071 | perf_tool__fill_defaults(tool); |
1071 | 1072 | ||
1072 | page_size = sysconf(_SC_PAGESIZE); | 1073 | page_size = sysconf(_SC_PAGESIZE); |
1073 | 1074 | ||
@@ -1122,7 +1123,7 @@ more: | |||
1122 | size = event->header.size; | 1123 | size = event->header.size; |
1123 | 1124 | ||
1124 | if (size == 0 || | 1125 | if (size == 0 || |
1125 | perf_session__process_event(session, event, ops, file_pos) < 0) { | 1126 | perf_session__process_event(session, event, tool, file_pos) < 0) { |
1126 | dump_printf("%#" PRIx64 " [%#x]: skipping unknown header type: %d\n", | 1127 | dump_printf("%#" PRIx64 " [%#x]: skipping unknown header type: %d\n", |
1127 | file_offset + head, event->header.size, | 1128 | file_offset + head, event->header.size, |
1128 | event->header.type); | 1129 | event->header.type); |
@@ -1151,15 +1152,15 @@ more: | |||
1151 | err = 0; | 1152 | err = 0; |
1152 | /* do the final flush for ordered samples */ | 1153 | /* do the final flush for ordered samples */ |
1153 | session->ordered_samples.next_flush = ULLONG_MAX; | 1154 | session->ordered_samples.next_flush = ULLONG_MAX; |
1154 | flush_sample_queue(session, ops); | 1155 | flush_sample_queue(session, tool); |
1155 | out_err: | 1156 | out_err: |
1156 | perf_session__warn_about_errors(session, ops); | 1157 | perf_session__warn_about_errors(session, tool); |
1157 | perf_session_free_sample_buffers(session); | 1158 | perf_session_free_sample_buffers(session); |
1158 | return err; | 1159 | return err; |
1159 | } | 1160 | } |
1160 | 1161 | ||
1161 | int perf_session__process_events(struct perf_session *self, | 1162 | int perf_session__process_events(struct perf_session *self, |
1162 | struct perf_event_ops *ops) | 1163 | struct perf_tool *tool) |
1163 | { | 1164 | { |
1164 | int err; | 1165 | int err; |
1165 | 1166 | ||
@@ -1170,9 +1171,9 @@ int perf_session__process_events(struct perf_session *self, | |||
1170 | err = __perf_session__process_events(self, | 1171 | err = __perf_session__process_events(self, |
1171 | self->header.data_offset, | 1172 | self->header.data_offset, |
1172 | self->header.data_size, | 1173 | self->header.data_size, |
1173 | self->size, ops); | 1174 | self->size, tool); |
1174 | else | 1175 | else |
1175 | err = __perf_session__process_pipe_events(self, ops); | 1176 | err = __perf_session__process_pipe_events(self, tool); |
1176 | 1177 | ||
1177 | return err; | 1178 | return err; |
1178 | } | 1179 | } |
diff --git a/tools/perf/util/session.h b/tools/perf/util/session.h index 1c5823c7d6d..30e9c6b6fc3 100644 --- a/tools/perf/util/session.h +++ b/tools/perf/util/session.h | |||
@@ -53,55 +53,20 @@ struct perf_session { | |||
53 | char filename[0]; | 53 | char filename[0]; |
54 | }; | 54 | }; |
55 | 55 | ||
56 | struct perf_evsel; | 56 | struct perf_tool; |
57 | struct perf_event_ops; | ||
58 | |||
59 | typedef int (*event_sample)(struct perf_event_ops *ops, | ||
60 | union perf_event *event, struct perf_sample *sample, | ||
61 | struct perf_evsel *evsel, struct machine *machine); | ||
62 | typedef int (*event_op)(struct perf_event_ops *ops, union perf_event *event, | ||
63 | struct perf_sample *sample, | ||
64 | struct machine *machine); | ||
65 | typedef int (*event_synth_op)(union perf_event *self, | ||
66 | struct perf_session *session); | ||
67 | typedef int (*event_attr_op)(union perf_event *event, | ||
68 | struct perf_evlist **pevlist); | ||
69 | typedef int (*event_simple_op)(struct perf_event_ops *ops, | ||
70 | union perf_event *event); | ||
71 | typedef int (*event_op2)(struct perf_event_ops *ops, union perf_event *event, | ||
72 | struct perf_session *session); | ||
73 | |||
74 | struct perf_event_ops { | ||
75 | event_sample sample, | ||
76 | read; | ||
77 | event_op mmap, | ||
78 | comm, | ||
79 | fork, | ||
80 | exit, | ||
81 | lost, | ||
82 | throttle, | ||
83 | unthrottle; | ||
84 | event_attr_op attr; | ||
85 | event_synth_op tracing_data; | ||
86 | event_simple_op event_type; | ||
87 | event_op2 finished_round, | ||
88 | build_id; | ||
89 | bool ordered_samples; | ||
90 | bool ordering_requires_timestamps; | ||
91 | }; | ||
92 | 57 | ||
93 | struct perf_session *perf_session__new(const char *filename, int mode, | 58 | struct perf_session *perf_session__new(const char *filename, int mode, |
94 | bool force, bool repipe, | 59 | bool force, bool repipe, |
95 | struct perf_event_ops *ops); | 60 | struct perf_tool *tool); |
96 | void perf_session__delete(struct perf_session *self); | 61 | void perf_session__delete(struct perf_session *self); |
97 | 62 | ||
98 | void perf_event_header__bswap(struct perf_event_header *self); | 63 | void perf_event_header__bswap(struct perf_event_header *self); |
99 | 64 | ||
100 | int __perf_session__process_events(struct perf_session *self, | 65 | int __perf_session__process_events(struct perf_session *self, |
101 | u64 data_offset, u64 data_size, u64 size, | 66 | u64 data_offset, u64 data_size, u64 size, |
102 | struct perf_event_ops *ops); | 67 | struct perf_tool *tool); |
103 | int perf_session__process_events(struct perf_session *self, | 68 | int perf_session__process_events(struct perf_session *self, |
104 | struct perf_event_ops *event_ops); | 69 | struct perf_tool *tool); |
105 | 70 | ||
106 | int perf_session__resolve_callchain(struct perf_session *self, struct perf_evsel *evsel, | 71 | int perf_session__resolve_callchain(struct perf_session *self, struct perf_evsel *evsel, |
107 | struct thread *thread, | 72 | struct thread *thread, |
@@ -142,11 +107,11 @@ struct machine *perf_session__findnew_machine(struct perf_session *self, pid_t p | |||
142 | 107 | ||
143 | static inline | 108 | static inline |
144 | void perf_session__process_machines(struct perf_session *self, | 109 | void perf_session__process_machines(struct perf_session *self, |
145 | struct perf_event_ops *ops, | 110 | struct perf_tool *tool, |
146 | machine__process_t process) | 111 | machine__process_t process) |
147 | { | 112 | { |
148 | process(&self->host_machine, ops); | 113 | process(&self->host_machine, tool); |
149 | return machines__process(&self->machines, process, ops); | 114 | return machines__process(&self->machines, process, tool); |
150 | } | 115 | } |
151 | 116 | ||
152 | struct thread *perf_session__findnew(struct perf_session *self, pid_t pid); | 117 | struct thread *perf_session__findnew(struct perf_session *self, pid_t pid); |
diff --git a/tools/perf/util/tool.h b/tools/perf/util/tool.h new file mode 100644 index 00000000000..89ff1b551a7 --- /dev/null +++ b/tools/perf/util/tool.h | |||
@@ -0,0 +1,45 @@ | |||
1 | #ifndef __PERF_TOOL_H | ||
2 | #define __PERF_TOOL_H | ||
3 | |||
4 | struct perf_session; | ||
5 | struct perf_evsel; | ||
6 | struct perf_tool; | ||
7 | struct machine; | ||
8 | |||
9 | typedef int (*event_sample)(struct perf_tool *tool, union perf_event *event, | ||
10 | struct perf_sample *sample, | ||
11 | struct perf_evsel *evsel, struct machine *machine); | ||
12 | |||
13 | typedef int (*event_op)(struct perf_tool *tool, union perf_event *event, | ||
14 | struct perf_sample *sample, struct machine *machine); | ||
15 | |||
16 | typedef int (*event_attr_op)(union perf_event *event, | ||
17 | struct perf_evlist **pevlist); | ||
18 | typedef int (*event_simple_op)(struct perf_tool *tool, union perf_event *event); | ||
19 | |||
20 | typedef int (*event_synth_op)(union perf_event *event, | ||
21 | struct perf_session *session); | ||
22 | |||
23 | typedef int (*event_op2)(struct perf_tool *tool, union perf_event *event, | ||
24 | struct perf_session *session); | ||
25 | |||
26 | struct perf_tool { | ||
27 | event_sample sample, | ||
28 | read; | ||
29 | event_op mmap, | ||
30 | comm, | ||
31 | fork, | ||
32 | exit, | ||
33 | lost, | ||
34 | throttle, | ||
35 | unthrottle; | ||
36 | event_attr_op attr; | ||
37 | event_synth_op tracing_data; | ||
38 | event_simple_op event_type; | ||
39 | event_op2 finished_round, | ||
40 | build_id; | ||
41 | bool ordered_samples; | ||
42 | bool ordering_requires_timestamps; | ||
43 | }; | ||
44 | |||
45 | #endif /* __PERF_TOOL_H */ | ||
diff --git a/tools/perf/util/top.h b/tools/perf/util/top.h index 44eda6fc6b3..40430ec5c26 100644 --- a/tools/perf/util/top.h +++ b/tools/perf/util/top.h | |||
@@ -1,16 +1,17 @@ | |||
1 | #ifndef __PERF_TOP_H | 1 | #ifndef __PERF_TOP_H |
2 | #define __PERF_TOP_H 1 | 2 | #define __PERF_TOP_H 1 |
3 | 3 | ||
4 | #include "tool.h" | ||
4 | #include "types.h" | 5 | #include "types.h" |
5 | #include "session.h" | ||
6 | #include "../perf.h" | ||
7 | #include <stddef.h> | 6 | #include <stddef.h> |
7 | #include <stdbool.h> | ||
8 | 8 | ||
9 | struct perf_evlist; | 9 | struct perf_evlist; |
10 | struct perf_evsel; | 10 | struct perf_evsel; |
11 | struct perf_session; | ||
11 | 12 | ||
12 | struct perf_top { | 13 | struct perf_top { |
13 | struct perf_event_ops ops; | 14 | struct perf_tool tool; |
14 | struct perf_evlist *evlist; | 15 | struct perf_evlist *evlist; |
15 | /* | 16 | /* |
16 | * Symbols will be added here in perf_event__process_sample and will | 17 | * Symbols will be added here in perf_event__process_sample and will |