Merge branch 'perf/core' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux...
[pandora-kernel.git] / tools / perf / util / session.c
index 00ab298..8f83a18 100644 (file)
@@ -5,6 +5,7 @@
 #include <byteswap.h>
 #include <unistd.h>
 #include <sys/types.h>
+#include <sys/mman.h>
 
 #include "session.h"
 #include "sort.h"
@@ -69,11 +70,10 @@ void perf_session__update_sample_type(struct perf_session *self)
 
 int perf_session__create_kernel_maps(struct perf_session *self)
 {
-       struct rb_root *machines = &self->machines;
-       int ret = machines__create_kernel_maps(machines, HOST_KERNEL_ID);
+       int ret = machine__create_kernel_maps(&self->host_machine);
 
        if (ret >= 0)
-               ret = machines__create_guest_kernel_maps(machines);
+               ret = machines__create_guest_kernel_maps(&self->machines);
        return ret;
 }
 
@@ -90,15 +90,15 @@ struct perf_session *perf_session__new(const char *filename, int mode, bool forc
 
        memcpy(self->filename, filename, len);
        self->threads = RB_ROOT;
-       self->stats_by_id = RB_ROOT;
+       self->hists_tree = RB_ROOT;
        self->last_match = NULL;
        self->mmap_window = 32;
        self->cwd = NULL;
        self->cwdlen = 0;
-       self->unknown_events = 0;
        self->machines = RB_ROOT;
        self->repipe = repipe;
        INIT_LIST_HEAD(&self->ordered_samples.samples_head);
+       machine__init(&self->host_machine, "", HOST_KERNEL_ID);
 
        if (mode == O_RDONLY) {
                if (perf_session__open(self, force) < 0)
@@ -241,36 +241,6 @@ static void perf_event_ops__fill_defaults(struct perf_event_ops *handler)
        }
 }
 
-static const char *event__name[] = {
-       [0]                      = "TOTAL",
-       [PERF_RECORD_MMAP]       = "MMAP",
-       [PERF_RECORD_LOST]       = "LOST",
-       [PERF_RECORD_COMM]       = "COMM",
-       [PERF_RECORD_EXIT]       = "EXIT",
-       [PERF_RECORD_THROTTLE]   = "THROTTLE",
-       [PERF_RECORD_UNTHROTTLE] = "UNTHROTTLE",
-       [PERF_RECORD_FORK]       = "FORK",
-       [PERF_RECORD_READ]       = "READ",
-       [PERF_RECORD_SAMPLE]     = "SAMPLE",
-       [PERF_RECORD_HEADER_ATTR]        = "ATTR",
-       [PERF_RECORD_HEADER_EVENT_TYPE]  = "EVENT_TYPE",
-       [PERF_RECORD_HEADER_TRACING_DATA]        = "TRACING_DATA",
-       [PERF_RECORD_HEADER_BUILD_ID]    = "BUILD_ID",
-};
-
-unsigned long event__total[PERF_RECORD_HEADER_MAX];
-
-void event__print_totals(void)
-{
-       int i;
-       for (i = 0; i < PERF_RECORD_HEADER_MAX; ++i) {
-               if (!event__name[i])
-                       continue;
-               pr_info("%10s events: %10ld\n",
-                       event__name[i], event__total[i]);
-       }
-}
-
 void mem_bswap_64(void *src, int byte_size)
 {
        u64 *m = src;
@@ -580,8 +550,7 @@ static int perf_session__process_event(struct perf_session *self,
                dump_printf("%#Lx [%#x]: PERF_RECORD_%s",
                            offset + head, event->header.size,
                            event__name[event->header.type]);
-               ++event__total[0];
-               ++event__total[event->header.type];
+               hists__inc_nr_events(&self->hists, event->header.type);
        }
 
        if (self->header.needs_swap && event__swap_ops[event->header.type])
@@ -619,7 +588,7 @@ static int perf_session__process_event(struct perf_session *self,
        case PERF_RECORD_FINISHED_ROUND:
                return ops->finished_round(event, self, ops);
        default:
-               self->unknown_events++;
+               ++self->hists.stats.nr_unknown_events;
                return -1;
        }
 }
@@ -919,3 +888,17 @@ int perf_session__set_kallsyms_ref_reloc_sym(struct map **maps,
 
        return 0;
 }
+
+size_t perf_session__fprintf_dsos(struct perf_session *self, FILE *fp)
+{
+       return __dsos__fprintf(&self->host_machine.kernel_dsos, fp) +
+              __dsos__fprintf(&self->host_machine.user_dsos, fp) +
+              machines__fprintf_dsos(&self->machines, fp);
+}
+
+size_t perf_session__fprintf_dsos_buildid(struct perf_session *self, FILE *fp,
+                                         bool with_hits)
+{
+       size_t ret = machine__fprintf_dsos_buildid(&self->host_machine, fp, with_hits);
+       return ret + machines__fprintf_dsos_buildid(&self->machines, fp, with_hits);
+}