diff options
| author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2011-12-02 08:06:37 -0500 |
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2011-12-02 08:06:37 -0500 |
| commit | 482ad89745f7121020f6cee38aa4e894a4e7d642 (patch) | |
| tree | 189b3becabfaebcdccf93c27fbde03233610d17f /tools/perf/util | |
| parent | e60770a01bd889707faaaeb794f1e278e7160458 (diff) | |
perf event: Introduce perf_event__fprintf
So that tools like 'perf test' can print the events when in verbose
mode, for instance.
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-xnovdqfi25nc48gy6604k7yp@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/event.c | 54 | ||||
| -rw-r--r-- | tools/perf/util/event.h | 6 |
2 files changed, 54 insertions, 6 deletions
diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index 0ebbe764133..97c479bcb0d 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c | |||
| @@ -433,6 +433,11 @@ int perf_event__synthesize_kernel_mmap(struct perf_tool *tool, | |||
| 433 | return err; | 433 | return err; |
| 434 | } | 434 | } |
| 435 | 435 | ||
| 436 | size_t perf_event__fprintf_comm(union perf_event *event, FILE *fp) | ||
| 437 | { | ||
| 438 | return fprintf(fp, ": %s:%d\n", event->comm.comm, event->comm.tid); | ||
| 439 | } | ||
| 440 | |||
| 436 | int perf_event__process_comm(struct perf_tool *tool __used, | 441 | int perf_event__process_comm(struct perf_tool *tool __used, |
| 437 | union perf_event *event, | 442 | union perf_event *event, |
| 438 | struct perf_sample *sample __used, | 443 | struct perf_sample *sample __used, |
| @@ -440,7 +445,8 @@ int perf_event__process_comm(struct perf_tool *tool __used, | |||
| 440 | { | 445 | { |
| 441 | struct thread *thread = machine__findnew_thread(machine, event->comm.tid); | 446 | struct thread *thread = machine__findnew_thread(machine, event->comm.tid); |
| 442 | 447 | ||
| 443 | dump_printf(": %s:%d\n", event->comm.comm, event->comm.tid); | 448 | if (dump_trace) |
| 449 | perf_event__fprintf_comm(event, stdout); | ||
| 444 | 450 | ||
| 445 | if (thread == NULL || thread__set_comm(thread, event->comm.comm)) { | 451 | if (thread == NULL || thread__set_comm(thread, event->comm.comm)) { |
| 446 | dump_printf("problem processing PERF_RECORD_COMM, skipping event.\n"); | 452 | dump_printf("problem processing PERF_RECORD_COMM, skipping event.\n"); |
| @@ -566,6 +572,13 @@ out_problem: | |||
| 566 | return -1; | 572 | return -1; |
| 567 | } | 573 | } |
| 568 | 574 | ||
| 575 | size_t perf_event__fprintf_mmap(union perf_event *event, FILE *fp) | ||
| 576 | { | ||
| 577 | return fprintf(fp, " %d/%d: [%#" PRIx64 "(%#" PRIx64 ") @ %#" PRIx64 "]: %s\n", | ||
| 578 | event->mmap.pid, event->mmap.tid, event->mmap.start, | ||
| 579 | event->mmap.len, event->mmap.pgoff, event->mmap.filename); | ||
| 580 | } | ||
| 581 | |||
| 569 | int perf_event__process_mmap(struct perf_tool *tool, | 582 | int perf_event__process_mmap(struct perf_tool *tool, |
| 570 | union perf_event *event, | 583 | union perf_event *event, |
| 571 | struct perf_sample *sample __used, | 584 | struct perf_sample *sample __used, |
| @@ -576,9 +589,8 @@ int perf_event__process_mmap(struct perf_tool *tool, | |||
| 576 | u8 cpumode = event->header.misc & PERF_RECORD_MISC_CPUMODE_MASK; | 589 | u8 cpumode = event->header.misc & PERF_RECORD_MISC_CPUMODE_MASK; |
| 577 | int ret = 0; | 590 | int ret = 0; |
| 578 | 591 | ||
| 579 | dump_printf(" %d/%d: [%#" PRIx64 "(%#" PRIx64 ") @ %#" PRIx64 "]: %s\n", | 592 | if (dump_trace) |
| 580 | event->mmap.pid, event->mmap.tid, event->mmap.start, | 593 | perf_event__fprintf_mmap(event, stdout); |
| 581 | event->mmap.len, event->mmap.pgoff, event->mmap.filename); | ||
| 582 | 594 | ||
| 583 | if (cpumode == PERF_RECORD_MISC_GUEST_KERNEL || | 595 | if (cpumode == PERF_RECORD_MISC_GUEST_KERNEL || |
| 584 | cpumode == PERF_RECORD_MISC_KERNEL) { | 596 | cpumode == PERF_RECORD_MISC_KERNEL) { |
| @@ -606,6 +618,13 @@ out_problem: | |||
| 606 | return 0; | 618 | return 0; |
| 607 | } | 619 | } |
| 608 | 620 | ||
| 621 | size_t perf_event__fprintf_task(union perf_event *event, FILE *fp) | ||
| 622 | { | ||
| 623 | return fprintf(fp, "(%d:%d):(%d:%d)\n", | ||
| 624 | event->fork.pid, event->fork.tid, | ||
| 625 | event->fork.ppid, event->fork.ptid); | ||
| 626 | } | ||
| 627 | |||
| 609 | int perf_event__process_task(struct perf_tool *tool __used, | 628 | int perf_event__process_task(struct perf_tool *tool __used, |
| 610 | union perf_event *event, | 629 | union perf_event *event, |
| 611 | struct perf_sample *sample __used, | 630 | struct perf_sample *sample __used, |
| @@ -614,8 +633,8 @@ int perf_event__process_task(struct perf_tool *tool __used, | |||
| 614 | struct thread *thread = machine__findnew_thread(machine, event->fork.tid); | 633 | struct thread *thread = machine__findnew_thread(machine, event->fork.tid); |
| 615 | struct thread *parent = machine__findnew_thread(machine, event->fork.ptid); | 634 | struct thread *parent = machine__findnew_thread(machine, event->fork.ptid); |
| 616 | 635 | ||
| 617 | dump_printf("(%d:%d):(%d:%d)\n", event->fork.pid, event->fork.tid, | 636 | if (dump_trace) |
| 618 | event->fork.ppid, event->fork.ptid); | 637 | perf_event__fprintf_task(event, stdout); |
| 619 | 638 | ||
| 620 | if (event->header.type == PERF_RECORD_EXIT) { | 639 | if (event->header.type == PERF_RECORD_EXIT) { |
| 621 | machine__remove_thread(machine, thread); | 640 | machine__remove_thread(machine, thread); |
| @@ -631,6 +650,29 @@ int perf_event__process_task(struct perf_tool *tool __used, | |||
| 631 | return 0; | 650 | return 0; |
| 632 | } | 651 | } |
| 633 | 652 | ||
| 653 | size_t perf_event__fprintf(union perf_event *event, FILE *fp) | ||
| 654 | { | ||
| 655 | size_t ret = fprintf(fp, "PERF_RECORD_%s", | ||
| 656 | perf_event__name(event->header.type)); | ||
| 657 | |||
| 658 | switch (event->header.type) { | ||
| 659 | case PERF_RECORD_COMM: | ||
| 660 | ret += perf_event__fprintf_comm(event, fp); | ||
| 661 | break; | ||
| 662 | case PERF_RECORD_FORK: | ||
| 663 | case PERF_RECORD_EXIT: | ||
| 664 | ret += perf_event__fprintf_task(event, fp); | ||
| 665 | break; | ||
| 666 | case PERF_RECORD_MMAP: | ||
| 667 | ret += perf_event__fprintf_mmap(event, fp); | ||
| 668 | break; | ||
| 669 | default: | ||
| 670 | ret += fprintf(fp, "\n"); | ||
| 671 | } | ||
| 672 | |||
| 673 | return ret; | ||
| 674 | } | ||
| 675 | |||
| 634 | int perf_event__process(struct perf_tool *tool, union perf_event *event, | 676 | int perf_event__process(struct perf_tool *tool, union perf_event *event, |
| 635 | struct perf_sample *sample, struct machine *machine) | 677 | struct perf_sample *sample, struct machine *machine) |
| 636 | { | 678 | { |
diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h index d8499e7cf64..0d80201ce84 100644 --- a/tools/perf/util/event.h +++ b/tools/perf/util/event.h | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | #define __PERF_RECORD_H | 2 | #define __PERF_RECORD_H |
| 3 | 3 | ||
| 4 | #include <limits.h> | 4 | #include <limits.h> |
| 5 | #include <stdio.h> | ||
| 5 | 6 | ||
| 6 | #include "../perf.h" | 7 | #include "../perf.h" |
| 7 | #include "map.h" | 8 | #include "map.h" |
| @@ -199,4 +200,9 @@ int perf_event__parse_sample(const union perf_event *event, u64 type, | |||
| 199 | int sample_size, bool sample_id_all, | 200 | int sample_size, bool sample_id_all, |
| 200 | struct perf_sample *sample, bool swapped); | 201 | struct perf_sample *sample, bool swapped); |
| 201 | 202 | ||
| 203 | size_t perf_event__fprintf_comm(union perf_event *event, FILE *fp); | ||
| 204 | size_t perf_event__fprintf_mmap(union perf_event *event, FILE *fp); | ||
| 205 | size_t perf_event__fprintf_task(union perf_event *event, FILE *fp); | ||
| 206 | size_t perf_event__fprintf(union perf_event *event, FILE *fp); | ||
| 207 | |||
| 202 | #endif /* __PERF_RECORD_H */ | 208 | #endif /* __PERF_RECORD_H */ |
