aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/util')
-rw-r--r--tools/perf/util/event.c54
-rw-r--r--tools/perf/util/event.h6
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
436size_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
436int perf_event__process_comm(struct perf_tool *tool __used, 441int 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
575size_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
569int perf_event__process_mmap(struct perf_tool *tool, 582int 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
621size_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
609int perf_event__process_task(struct perf_tool *tool __used, 628int 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
653size_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
634int perf_event__process(struct perf_tool *tool, union perf_event *event, 676int 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
203size_t perf_event__fprintf_comm(union perf_event *event, FILE *fp);
204size_t perf_event__fprintf_mmap(union perf_event *event, FILE *fp);
205size_t perf_event__fprintf_task(union perf_event *event, FILE *fp);
206size_t perf_event__fprintf(union perf_event *event, FILE *fp);
207
202#endif /* __PERF_RECORD_H */ 208#endif /* __PERF_RECORD_H */