aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-report.c
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2009-11-27 13:29:22 -0500
committerIngo Molnar <mingo@elte.hu>2009-11-27 14:22:01 -0500
commit62daacb51a2bf8480e6f6b3696b03f102fc15eb0 (patch)
tree5b9ed87005a5e59bcc95dd9a42e3d09d6481362d /tools/perf/builtin-report.c
parent1de8e24520ffdcf2a90c842eed937f59079a2abd (diff)
perf tools: Reorganize event processing routines, lotsa dups killed
While implementing event__preprocess_sample, that will do all of the symbol lookup in one convenient function, I noticed that util/process_event.[ch] were not being used at all, then started looking if there were other functions that could be shared and... All those functions really don't need to receive offset + head, the only thing they did was common to all of them, so do it at one place instead. Stats about number of each type of event processed now is done in a central place. Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Frédéric Weisbecker <fweisbec@gmail.com> Cc: John Kacur <jkacur@redhat.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Paul Mackerras <paulus@samba.org> LKML-Reference: <1259346563-12568-11-git-send-email-acme@infradead.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
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);