perf hist: Adopt filter by dso and by thread methods from the newt browser
[pandora-kernel.git] / tools / perf / util / session.h
index f2b2c6a..ce00fa6 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef __PERF_SESSION_H
 #define __PERF_SESSION_H
 
+#include "hist.h"
 #include "event.h"
 #include "header.h"
 #include "symbol.h"
@@ -14,7 +15,8 @@ struct thread;
 
 struct ordered_samples {
        u64                     last_flush;
-       u64                     flush_limit;
+       u64                     next_flush;
+       u64                     max_timestamp;
        struct list_head        samples_head;
        struct sample_queue     *last_inserted;
 };
@@ -25,12 +27,18 @@ struct perf_session {
        unsigned long           mmap_window;
        struct rb_root          threads;
        struct thread           *last_match;
+       struct machine          host_machine;
        struct rb_root          machines;
-       struct events_stats     events_stats;
-       struct rb_root          stats_by_id;
+       struct rb_root          hists_tree;
        unsigned long           event_total[PERF_RECORD_MAX];
        unsigned long           unknown_events;
-       struct rb_root          hists;
+       /*
+        * FIXME: should point to the first entry in hists_tree and
+        *        be a hists instance. Right now its only 'report'
+        *        that is using ->hists_tree while all the rest use
+        *        ->hists.
+        */
+       struct hists            hists;
        u64                     sample_type;
        int                     fd;
        bool                    fd_pipe;
@@ -41,23 +49,28 @@ struct perf_session {
        char filename[0];
 };
 
+struct perf_event_ops;
+
 typedef int (*event_op)(event_t *self, struct perf_session *session);
+typedef int (*event_op2)(event_t *self, struct perf_session *session,
+                        struct perf_event_ops *ops);
 
 struct perf_event_ops {
-       event_op sample,
-                mmap,
-                comm,
-                fork,
-                exit,
-                lost,
-                read,
-                throttle,
-                unthrottle,
-                attr,
-                event_type,
-                tracing_data,
-                build_id;
-       bool    ordered_samples;
+       event_op        sample,
+                       mmap,
+                       comm,
+                       fork,
+                       exit,
+                       lost,
+                       read,
+                       throttle,
+                       unthrottle,
+                       attr,
+                       event_type,
+                       tracing_data,
+                       build_id;
+       event_op2       finished_round;
+       bool            ordered_samples;
 };
 
 struct perf_session *perf_session__new(const char *filename, int mode, bool force, bool repipe);
@@ -89,36 +102,25 @@ int perf_session__create_kernel_maps(struct perf_session *self);
 int do_read(int fd, void *buf, size_t size);
 void perf_session__update_sample_type(struct perf_session *self);
 
-#ifdef NO_NEWT_SUPPORT
-static inline int perf_session__browse_hists(struct rb_root *hists __used,
-                                             u64 nr_hists __used,
-                                             u64 session_total __used,
-                                            const char *helpline __used,
-                                            const char *input_name __used)
-{
-       return 0;
-}
-#else
-int perf_session__browse_hists(struct rb_root *hists, u64 nr_hists,
-                              u64 session_total, const char *helpline,
-                              const char *input_name);
-#endif
-
 static inline
 struct machine *perf_session__find_host_machine(struct perf_session *self)
 {
-       return machines__find_host(&self->machines);
+       return &self->host_machine;
 }
 
 static inline
 struct machine *perf_session__find_machine(struct perf_session *self, pid_t pid)
 {
+       if (pid == HOST_KERNEL_ID)
+               return &self->host_machine;
        return machines__find(&self->machines, pid);
 }
 
 static inline
 struct machine *perf_session__findnew_machine(struct perf_session *self, pid_t pid)
 {
+       if (pid == HOST_KERNEL_ID)
+               return &self->host_machine;
        return machines__findnew(&self->machines, pid);
 }
 
@@ -126,14 +128,11 @@ static inline
 void perf_session__process_machines(struct perf_session *self,
                                    machine__process_t process)
 {
+       process(&self->host_machine, self);
        return machines__process(&self->machines, process, self);
 }
 
-static inline
-size_t perf_session__fprintf_dsos(struct perf_session *self, FILE *fp)
-{
-       return machines__fprintf_dsos(&self->machines, fp);
-}
+size_t perf_session__fprintf_dsos(struct perf_session *self, FILE *fp);
 
 static inline
 size_t perf_session__fprintf_dsos_buildid(struct perf_session *self, FILE *fp,