aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-report.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/builtin-report.c')
-rw-r--r--tools/perf/builtin-report.c72
1 files changed, 19 insertions, 53 deletions
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index 9bd20c2ee3dd..01ef35cac5f9 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -30,7 +30,6 @@
30#include "util/thread.h" 30#include "util/thread.h"
31#include "util/sort.h" 31#include "util/sort.h"
32#include "util/hist.h" 32#include "util/hist.h"
33#include "util/process_events.h"
34 33
35static char const *input_name = "perf.data"; 34static char const *input_name = "perf.data";
36 35
@@ -655,8 +654,7 @@ static int validate_chain(struct ip_callchain *chain, event_t *event)
655 return 0; 654 return 0;
656} 655}
657 656
658static int 657static int process_sample_event(event_t *event)
659process_sample_event(event_t *event, unsigned long offset, unsigned long head)
660{ 658{
661 char level; 659 char level;
662 struct symbol *sym = NULL; 660 struct symbol *sym = NULL;
@@ -673,9 +671,7 @@ process_sample_event(event_t *event, unsigned long offset, unsigned long head)
673 more_data += sizeof(u64); 671 more_data += sizeof(u64);
674 } 672 }
675 673
676 dump_printf("%p [%p]: PERF_RECORD_SAMPLE (IP, %d): %d/%d: %p period: %Ld\n", 674 dump_printf("(IP, %d): %d/%d: %p period: %Ld\n",
677 (void *)(offset + head),
678 (void *)(long)(event->header.size),
679 event->header.misc, 675 event->header.misc,
680 event->ip.pid, event->ip.tid, 676 event->ip.pid, event->ip.tid,
681 (void *)(long)ip, 677 (void *)(long)ip,
@@ -743,47 +739,27 @@ process_sample_event(event_t *event, unsigned long offset, unsigned long head)
743 return -1; 739 return -1;
744 } 740 }
745 741
746 total += period; 742 event__stats.total += period;
747 743
748 return 0; 744 return 0;
749} 745}
750 746
751static int 747static int process_comm_event(event_t *event)
752process_comm_event(event_t *event, unsigned long offset, unsigned long head)
753{ 748{
754 struct thread *thread = threads__findnew(event->comm.pid); 749 struct thread *thread = threads__findnew(event->comm.pid);
755 750
756 dump_printf("%p [%p]: PERF_RECORD_COMM: %s:%d\n", 751 dump_printf(": %s:%d\n", event->comm.comm, event->comm.pid);
757 (void *)(offset + head),
758 (void *)(long)(event->header.size),
759 event->comm.comm, event->comm.pid);
760 752
761 if (thread == NULL || 753 if (thread == NULL ||
762 thread__set_comm_adjust(thread, event->comm.comm)) { 754 thread__set_comm_adjust(thread, event->comm.comm)) {
763 dump_printf("problem processing PERF_RECORD_COMM, skipping event.\n"); 755 dump_printf("problem processing PERF_RECORD_COMM, skipping event.\n");
764 return -1; 756 return -1;
765 } 757 }
766 total_comm++;
767
768 return 0;
769}
770
771static int
772process_lost_event(event_t *event, unsigned long offset, unsigned long head)
773{
774 dump_printf("%p [%p]: PERF_RECORD_LOST: id:%Ld: lost:%Ld\n",
775 (void *)(offset + head),
776 (void *)(long)(event->header.size),
777 event->lost.id,
778 event->lost.lost);
779
780 total_lost += event->lost.lost;
781 758
782 return 0; 759 return 0;
783} 760}
784 761
785static int 762static int process_read_event(event_t *event)
786process_read_event(event_t *event, unsigned long offset, unsigned long head)
787{ 763{
788 struct perf_event_attr *attr; 764 struct perf_event_attr *attr;
789 765
@@ -799,14 +775,9 @@ process_read_event(event_t *event, unsigned long offset, unsigned long head)
799 event->read.value); 775 event->read.value);
800 } 776 }
801 777
802 dump_printf("%p [%p]: PERF_RECORD_READ: %d %d %s %Lu\n", 778 dump_printf(": %d %d %s %Lu\n", event->read.pid, event->read.tid,
803 (void *)(offset + head), 779 attr ? __event_name(attr->type, attr->config) : "FAIL",
804 (void *)(long)(event->header.size), 780 event->read.value);
805 event->read.pid,
806 event->read.tid,
807 attr ? __event_name(attr->type, attr->config)
808 : "FAIL",
809 event->read.value);
810 781
811 return 0; 782 return 0;
812} 783}
@@ -842,11 +813,11 @@ static int sample_type_check(u64 type)
842 813
843static struct perf_file_handler file_handler = { 814static struct perf_file_handler file_handler = {
844 .process_sample_event = process_sample_event, 815 .process_sample_event = process_sample_event,
845 .process_mmap_event = process_mmap_event, 816 .process_mmap_event = event__process_mmap,
846 .process_comm_event = process_comm_event, 817 .process_comm_event = process_comm_event,
847 .process_exit_event = process_task_event, 818 .process_exit_event = event__process_task,
848 .process_fork_event = process_task_event, 819 .process_fork_event = event__process_task,
849 .process_lost_event = process_lost_event, 820 .process_lost_event = event__process_lost,
850 .process_read_event = process_read_event, 821 .process_read_event = process_read_event,
851 .sample_type_check = sample_type_check, 822 .sample_type_check = sample_type_check,
852}; 823};
@@ -866,19 +837,14 @@ static int __cmd_report(void)
866 register_perf_file_handler(&file_handler); 837 register_perf_file_handler(&file_handler);
867 838
868 ret = mmap_dispatch_perf_file(&header, input_name, force, 839 ret = mmap_dispatch_perf_file(&header, input_name, force,
869 full_paths, &cwdlen, &cwd); 840 full_paths, &event__cwdlen, &event__cwd);
870 if (ret) 841 if (ret)
871 return ret; 842 return ret;
872 843
873 dump_printf(" IP events: %10ld\n", total); 844 if (dump_trace) {
874 dump_printf(" mmap events: %10ld\n", total_mmap); 845 event__print_totals();
875 dump_printf(" comm events: %10ld\n", total_comm);
876 dump_printf(" fork events: %10ld\n", total_fork);
877 dump_printf(" lost events: %10ld\n", total_lost);
878 dump_printf(" unknown events: %10ld\n", file_handler.total_unknown);
879
880 if (dump_trace)
881 return 0; 846 return 0;
847 }
882 848
883 if (verbose > 3) 849 if (verbose > 3)
884 threads__fprintf(stdout); 850 threads__fprintf(stdout);
@@ -887,8 +853,8 @@ static int __cmd_report(void)
887 dsos__fprintf(stdout); 853 dsos__fprintf(stdout);
888 854
889 collapse__resort(); 855 collapse__resort();
890 output__resort(total); 856 output__resort(event__stats.total);
891 output__fprintf(stdout, total); 857 output__fprintf(stdout, event__stats.total);
892 858
893 if (show_threads) 859 if (show_threads)
894 perf_read_values_destroy(&show_threads_values); 860 perf_read_values_destroy(&show_threads_values);