diff options
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 */ |