perf script: Add more filter to find_scripts()
[deliverable/linux.git] / tools / perf / util / sort.h
1 #ifndef __PERF_SORT_H
2 #define __PERF_SORT_H
3 #include "../builtin.h"
4
5 #include "util.h"
6
7 #include "color.h"
8 #include <linux/list.h>
9 #include "cache.h"
10 #include <linux/rbtree.h>
11 #include "symbol.h"
12 #include "string.h"
13 #include "callchain.h"
14 #include "strlist.h"
15 #include "values.h"
16
17 #include "../perf.h"
18 #include "debug.h"
19 #include "header.h"
20
21 #include "parse-options.h"
22 #include "parse-events.h"
23
24 #include "thread.h"
25 #include "sort.h"
26
27 extern regex_t parent_regex;
28 extern const char *sort_order;
29 extern const char default_parent_pattern[];
30 extern const char *parent_pattern;
31 extern const char default_sort_order[];
32 extern int sort__need_collapse;
33 extern int sort__has_parent;
34 extern int sort__has_sym;
35 extern int sort__branch_mode;
36 extern struct sort_entry sort_comm;
37 extern struct sort_entry sort_dso;
38 extern struct sort_entry sort_sym;
39 extern struct sort_entry sort_parent;
40 extern struct sort_entry sort_dso_from;
41 extern struct sort_entry sort_dso_to;
42 extern struct sort_entry sort_sym_from;
43 extern struct sort_entry sort_sym_to;
44 extern enum sort_type sort__first_dimension;
45
46 struct he_stat {
47 u64 period;
48 u64 period_sys;
49 u64 period_us;
50 u64 period_guest_sys;
51 u64 period_guest_us;
52 u32 nr_events;
53 };
54
55 struct hist_entry_diff {
56 bool computed;
57
58 /* PERF_HPP__DISPL */
59 int displacement;
60
61 /* PERF_HPP__DELTA */
62 double period_ratio_delta;
63
64 /* PERF_HPP__RATIO */
65 double period_ratio;
66
67 /* HISTC_WEIGHTED_DIFF */
68 s64 wdiff;
69 };
70
71 /**
72 * struct hist_entry - histogram entry
73 *
74 * @row_offset - offset from the first callchain expanded to appear on screen
75 * @nr_rows - rows expanded in callchain, recalculated on folding/unfolding
76 */
77 struct hist_entry {
78 struct rb_node rb_node_in;
79 struct rb_node rb_node;
80 struct he_stat stat;
81 struct map_symbol ms;
82 struct thread *thread;
83 u64 ip;
84 s32 cpu;
85
86 struct hist_entry_diff diff;
87
88 /* XXX These two should move to some tree widget lib */
89 u16 row_offset;
90 u16 nr_rows;
91
92 bool init_have_children;
93 char level;
94 bool used;
95 u8 filtered;
96 char *srcline;
97 struct symbol *parent;
98 unsigned long position;
99 union {
100 struct hist_entry *pair;
101 struct rb_root sorted_chain;
102 };
103 struct branch_info *branch_info;
104 struct hists *hists;
105 struct callchain_root callchain[0];
106 };
107
108 enum sort_type {
109 SORT_PID,
110 SORT_COMM,
111 SORT_DSO,
112 SORT_SYM,
113 SORT_PARENT,
114 SORT_CPU,
115 SORT_DSO_FROM,
116 SORT_DSO_TO,
117 SORT_SYM_FROM,
118 SORT_SYM_TO,
119 SORT_MISPREDICT,
120 SORT_SRCLINE,
121 };
122
123 /*
124 * configurable sorting bits
125 */
126
127 struct sort_entry {
128 struct list_head list;
129
130 const char *se_header;
131
132 int64_t (*se_cmp)(struct hist_entry *, struct hist_entry *);
133 int64_t (*se_collapse)(struct hist_entry *, struct hist_entry *);
134 int (*se_snprintf)(struct hist_entry *self, char *bf, size_t size,
135 unsigned int width);
136 u8 se_width_idx;
137 bool elide;
138 };
139
140 extern struct sort_entry sort_thread;
141 extern struct list_head hist_entry__sort_list;
142
143 void setup_sorting(const char * const usagestr[], const struct option *opts);
144 extern int sort_dimension__add(const char *);
145 void sort_entry__setup_elide(struct sort_entry *self, struct strlist *list,
146 const char *list_name, FILE *fp);
147
148 #endif /* __PERF_SORT_H */
This page took 0.076298 seconds and 5 git commands to generate.