xref: /linux/tools/perf/util/sort.h (revision 2e21dee6a46a66e4c2ced778485e1044101edee4)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2dd68ada2SJohn Kacur #ifndef __PERF_SORT_H
3dd68ada2SJohn Kacur #define __PERF_SORT_H
41eae20c1SArnaldo Carvalho de Melo #include <regex.h>
5185bcb92SArnaldo Carvalho de Melo #include <stdbool.h>
6dd68ada2SJohn Kacur #include "hist.h"
7dd68ada2SJohn Kacur 
89f4e8ff2SArnaldo Carvalho de Melo struct option;
99f4e8ff2SArnaldo Carvalho de Melo struct perf_env;
10dd68ada2SJohn Kacur 
11dd68ada2SJohn Kacur extern regex_t parent_regex;
1214135663SNamhyung Kim extern const char *sort_order;
13cebf7d51SJin Yao extern const char *field_order;
14cebf7d51SJin Yao extern const char default_parent_pattern[];
15e7ff8920SArnaldo Carvalho de Melo extern const char *parent_pattern;
16185bcb92SArnaldo Carvalho de Melo extern const char *default_sort_order;
17e7ff8920SArnaldo Carvalho de Melo extern regex_t ignore_callees_regex;
182f2c41bdSNamhyung Kim extern int have_ignore_callees;
19dd68ada2SJohn Kacur extern enum sort_mode sort__mode;
20dd68ada2SJohn Kacur extern struct sort_entry sort_comm;
21edb7c60eSArnaldo Carvalho de Melo extern struct sort_entry sort_dso;
22a7d945bcSNamhyung Kim extern struct sort_entry sort_sym;
23edb7c60eSArnaldo Carvalho de Melo extern struct sort_entry sort_parent;
24edb7c60eSArnaldo Carvalho de Melo extern struct sort_entry sort_dso_from;
25fa1f4565SArnaldo Carvalho de Melo extern struct sort_entry sort_dso_to;
26b21484f1SGreg Price extern struct sort_entry sort_sym_from;
27b21484f1SGreg Price extern struct sort_entry sort_sym_to;
2855369fc1SNamhyung Kim extern struct sort_entry sort_srcline;
29dd68ada2SJohn Kacur extern struct sort_entry sort_type;
30dd68ada2SJohn Kacur extern const char default_mem_sort_order[];
31dd68ada2SJohn Kacur extern bool chk_double_cl;
32dd68ada2SJohn Kacur 
33a68c2c58SStephane Eranian enum sort_mode {
34a68c2c58SStephane Eranian 	SORT_MODE__NORMAL,
35a68c2c58SStephane Eranian 	SORT_MODE__BRANCH,
36a68c2c58SStephane Eranian 	SORT_MODE__MEMORY,
37f666ac0dSJiri Olsa 	SORT_MODE__TOP,
382f2c41bdSNamhyung Kim 	SORT_MODE__DIFF,
39228f14f2SYunlong Song 	SORT_MODE__TRACEPOINT,
401470a108SFeng Tang };
41dd68ada2SJohn Kacur 
424968ac8fSAndi Kleen enum sort_type {
434968ac8fSAndi Kleen 	/* common sort keys */
444968ac8fSAndi Kleen 	SORT_PID,
454968ac8fSAndi Kleen 	SORT_COMM,
464968ac8fSAndi Kleen 	SORT_DSO,
474968ac8fSAndi Kleen 	SORT_SYM,
48b24c28f7SNamhyung Kim 	SORT_PARENT,
49b24c28f7SNamhyung Kim 	SORT_CPU,
50b24c28f7SNamhyung Kim 	SORT_SOCKET,
51b24c28f7SNamhyung Kim 	SORT_SRCLINE,
52b24c28f7SNamhyung Kim 	SORT_SRCFILE,
53b24c28f7SNamhyung Kim 	SORT_LOCAL_WEIGHT,
54b24c28f7SNamhyung Kim 	SORT_GLOBAL_WEIGHT,
55b24c28f7SNamhyung Kim 	SORT_TRANSACTION,
56b24c28f7SNamhyung Kim 	SORT_TRACE,
57d890a98cSHari Bathini 	SORT_SYM_SIZE,
58d890a98cSHari Bathini 	SORT_DSO_SIZE,
59d890a98cSHari Bathini 	SORT_CGROUP,
60d890a98cSHari Bathini 	SORT_CGROUP_ID,
61d890a98cSHari Bathini 	SORT_SYM_IPC_NULL,
6296c47f19SJiri Olsa 	SORT_TIME,
6396c47f19SJiri Olsa 	SORT_CODE_PAGE_SIZE,
64a0b404f4SNamhyung Kim 	SORT_LOCAL_INS_LAT,
6596c47f19SJiri Olsa 	SORT_GLOBAL_INS_LAT,
6696c47f19SJiri Olsa 	SORT_LOCAL_PIPELINE_STAGE_CYC,
6796c47f19SJiri Olsa 	SORT_GLOBAL_PIPELINE_STAGE_CYC,
6896c47f19SJiri Olsa 	SORT_ADDR,
6996c47f19SJiri Olsa 	SORT_LOCAL_RETIRE_LAT,
7081d5f958SJiri Olsa 	SORT_GLOBAL_RETIRE_LAT,
7181d5f958SJiri Olsa 	SORT_SIMD,
7281d5f958SJiri Olsa 	SORT_ANNOTATE_DATA_TYPE,
7399150a1fSJin Yao 	SORT_ANNOTATE_DATA_TYPE_OFFSET,
7499150a1fSJin Yao 	SORT_SYM_OFFSET,
7599150a1fSJin Yao 	SORT_ANNOTATE_DATA_TYPE_CACHELINE,
7696c47f19SJiri Olsa 	SORT_PARALLELISM,
77cebf7d51SJin Yao 	SORT_TGID,
78cebf7d51SJin Yao 
79a0b404f4SNamhyung Kim 	/* branch stack specific sort keys */
8096c47f19SJiri Olsa 	__SORT_BRANCH_STACK,
81f542e767SJiri Olsa 	SORT_DSO_FROM = __SORT_BRANCH_STACK,
82f542e767SJiri Olsa 	SORT_DSO_TO,
83f542e767SJiri Olsa 	SORT_SYM_FROM,
84f542e767SJiri Olsa 	SORT_SYM_TO,
85f542e767SJiri Olsa 	SORT_MISPREDICT,
860f0cbf7aSArnaldo Carvalho de Melo 	SORT_ABORT,
870f0cbf7aSArnaldo Carvalho de Melo 	SORT_IN_TX,
880f0cbf7aSArnaldo Carvalho de Melo 	SORT_CYCLES,
890f0cbf7aSArnaldo Carvalho de Melo 	SORT_SRCLINE_FROM,
900f0cbf7aSArnaldo Carvalho de Melo 	SORT_SRCLINE_TO,
910f0cbf7aSArnaldo Carvalho de Melo 	SORT_SYM_IPC,
92dd68ada2SJohn Kacur 	SORT_ADDR_FROM,
931980c2ebSArnaldo Carvalho de Melo 	SORT_ADDR_TO,
94dd68ada2SJohn Kacur 	SORT_CALLCHAIN_BRANCH_PREDICTED,
95b821c732SArnaldo Carvalho de Melo 	SORT_CALLCHAIN_BRANCH_ABORT,
96b821c732SArnaldo Carvalho de Melo 	SORT_CALLCHAIN_BRANCH_CYCLES,
97b821c732SArnaldo Carvalho de Melo 
98b821c732SArnaldo Carvalho de Melo 	/* memory mode specific sort keys */
99b24c28f7SNamhyung Kim 	__SORT_MEMORY_MODE,
100f8be1c8cSNamhyung Kim 	SORT_MEM_DADDR_SYMBOL = __SORT_MEMORY_MODE,
10159fd5306SArnaldo Carvalho de Melo 	SORT_MEM_DADDR_DSO,
102a5e29acaSArnaldo Carvalho de Melo 	SORT_MEM_LOCKED,
1034dfced35SNamhyung Kim 	SORT_MEM_TLB,
104d890a98cSHari Bathini 	SORT_MEM_LVL,
105b629f3e9SNamhyung Kim 	SORT_MEM_SNOOP,
106dd68ada2SJohn Kacur 	SORT_MEM_DCACHELINE,
107475eeab9SAndi Kleen 	SORT_MEM_IADDR_SYMBOL,
1080c4c4debSKan Liang 	SORT_MEM_PHYS_DADDR,
109f60f3593SArun Sharma 	SORT_MEM_DATA_PAGE_SIZE,
1109fd74f20SStephane Eranian 	SORT_MEM_BLOCKED,
111784e8addSNamhyung Kim };
1124d03c753SNamhyung Kim 
113db4b2840SNamhyung Kim /*
1147365be55SDon Zickus  * configurable sorting bits
115aef810ecSNamhyung Kim  */
116871304a7SNamhyung Kim 
117ea15483eSGerman Gomez struct sort_entry {
1180f0cbf7aSArnaldo Carvalho de Melo 	const char *se_header;
119e0af43d2SJiri Olsa 
120e0af43d2SJiri Olsa 	int64_t (*se_cmp)(struct hist_entry *, struct hist_entry *);
121aef810ecSNamhyung Kim 	int64_t (*se_collapse)(struct hist_entry *, struct hist_entry *);
122e0af43d2SJiri Olsa 	int64_t	(*se_sort)(struct hist_entry *, struct hist_entry *);
123dd68ada2SJohn Kacur 	int	(*se_snprintf)(struct hist_entry *he, char *bf, size_t size,
124a5e29acaSArnaldo Carvalho de Melo 			       unsigned int width);
12541477acfSArnaldo Carvalho de Melo 	int	(*se_filter)(struct hist_entry *he, int type, const void *arg);
12641477acfSArnaldo Carvalho de Melo 	void	(*se_init)(struct hist_entry *he);
12729750821SNamhyung Kim 	u8	se_width_idx;
12829750821SNamhyung Kim };
12929750821SNamhyung Kim 
13029750821SNamhyung Kim extern struct sort_entry sort_thread;
13103440c4eSMasahiro Yamada 
13229750821SNamhyung Kim struct evlist;
13329750821SNamhyung Kim struct tep_handle;
13429750821SNamhyung Kim int setup_sorting(struct evlist *evlist, struct perf_env *env);
13529750821SNamhyung Kim int setup_output_field(void);
13629750821SNamhyung Kim void reset_output_field(void);
137d8a0f800SNamhyung Kim void sort__setup_elide(FILE *fp);
1383698dab1SNamhyung Kim void perf_hpp__set_elide(int idx, bool elide);
1393698dab1SNamhyung Kim 
14079dded87SNamhyung Kim char *sort_help(const char *prefix, enum sort_mode mode);
14129750821SNamhyung Kim 
14229750821SNamhyung Kim int report_parse_ignore_callees_opt(const struct option *opt, const char *arg, int unset);
143409a8be6SArnaldo Carvalho de Melo 
14431191a85SAndi Kleen bool is_strict_order(const char *order);
145439d473bSArnaldo Carvalho de Melo 
146b5387528SRoberto Agostino Vitillo int hpp_dimension__add_output(unsigned col, bool implicit);
1473723908dSAndi Kleen void reset_dimensions(void);
148ae359f19SJiri Olsa int sort_dimension__add(struct perf_hpp_list *list, const char *tok,
14998a3b32cSStephane Eranian 			struct evlist *evlist, struct perf_env *env,
150fe96245cSJin Yao 			int level);
151ebf39d29SLeo Yan int output_field_add(struct perf_hpp_list *list, const char *tok, int *level);
15272392834SNamhyung Kim int64_t
15372392834SNamhyung Kim sort__iaddr_cmp(struct hist_entry *left, struct hist_entry *right);
1544968ac8fSAndi Kleen int64_t
1554968ac8fSAndi Kleen sort__daddr_cmp(struct hist_entry *left, struct hist_entry *right);
15660517d28SNamhyung Kim int64_t
1571b2dbbf4SNamhyung Kim sort__dcacheline_cmp(struct hist_entry *left, struct hist_entry *right);
158aef810ecSNamhyung Kim int64_t
159f542e767SJiri Olsa _sort__sym_cmp(struct symbol *sym_l, struct symbol *sym_r);
1602f2c41bdSNamhyung Kim char *hist_entry__srcline(struct hist_entry *he);
161aef810ecSNamhyung Kim #endif	/* __PERF_SORT_H */
162aef810ecSNamhyung Kim