perf tools: Apply percent-limit to cumulative percentage
[firefly-linux-kernel-4.4.55.git] / tools / perf / util / sort.h
index 43e5ff42a609a6cb61675bd3cd3bacbd3d9b1c29..426b873e16ff9f9ea755c2cdda67911984a8662b 100644 (file)
 
 #include "parse-options.h"
 #include "parse-events.h"
-
+#include "hist.h"
 #include "thread.h"
 
 extern regex_t parent_regex;
 extern const char *sort_order;
+extern const char *field_order;
 extern const char default_parent_pattern[];
 extern const char *parent_pattern;
 extern const char default_sort_order[];
@@ -81,6 +82,7 @@ struct hist_entry {
                struct list_head head;
        } pairs;
        struct he_stat          stat;
+       struct he_stat          *stat_acc;
        struct map_symbol       ms;
        struct thread           *thread;
        struct comm             *comm;
@@ -129,10 +131,27 @@ static inline void hist_entry__add_pair(struct hist_entry *pair,
        list_add_tail(&pair->pairs.node, &he->pairs.head);
 }
 
+static inline float hist_entry__get_percent_limit(struct hist_entry *he)
+{
+       u64 period = he->stat.period;
+       u64 total_period = hists__total_period(he->hists);
+
+       if (unlikely(total_period == 0))
+               return 0;
+
+       if (symbol_conf.cumulate_callchain)
+               period = he->stat_acc->period;
+
+       return period * 100.0 / total_period;
+}
+
+
 enum sort_mode {
        SORT_MODE__NORMAL,
        SORT_MODE__BRANCH,
        SORT_MODE__MEMORY,
+       SORT_MODE__TOP,
+       SORT_MODE__DIFF,
 };
 
 enum sort_type {
@@ -179,6 +198,7 @@ struct sort_entry {
 
        int64_t (*se_cmp)(struct hist_entry *, struct hist_entry *);
        int64_t (*se_collapse)(struct hist_entry *, struct hist_entry *);
+       int64_t (*se_sort)(struct hist_entry *, struct hist_entry *);
        int     (*se_snprintf)(struct hist_entry *he, char *bf, size_t size,
                               unsigned int width);
        u8      se_width_idx;
@@ -189,6 +209,8 @@ extern struct sort_entry sort_thread;
 extern struct list_head hist_entry__sort_list;
 
 int setup_sorting(void);
+int setup_output_field(void);
+void reset_output_field(void);
 extern int sort_dimension__add(const char *);
 void sort__setup_elide(FILE *fp);