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