| 1 |
|
| 2 | #ifndef __PERF_SORT_H
|
| 3 | #define __PERF_SORT_H
|
| 4 | #include <regex.h>
|
| 5 | #include <stdbool.h>
|
| 6 | #include "hist.h"
|
| 7 |
|
| 8 | struct option;
|
| 9 | struct perf_env;
|
| 10 |
|
| 11 | extern regex_t parent_regex;
|
| 12 | extern const char *sort_order;
|
| 13 | extern const char *field_order;
|
| 14 | extern const char default_parent_pattern[];
|
| 15 | extern const char *parent_pattern;
|
| 16 | extern const char *default_sort_order;
|
| 17 | extern regex_t ignore_callees_regex;
|
| 18 | extern int have_ignore_callees;
|
| 19 | extern enum sort_mode sort__mode;
|
| 20 | extern struct sort_entry sort_comm;
|
| 21 | extern struct sort_entry sort_dso;
|
| 22 | extern struct sort_entry sort_sym;
|
| 23 | extern struct sort_entry sort_parent;
|
| 24 | extern struct sort_entry sort_dso_from;
|
| 25 | extern struct sort_entry sort_dso_to;
|
| 26 | extern struct sort_entry sort_sym_from;
|
| 27 | extern struct sort_entry sort_sym_to;
|
| 28 | extern struct sort_entry sort_srcline;
|
| 29 | extern struct sort_entry sort_type;
|
| 30 | extern const char default_mem_sort_order[];
|
| 31 | extern bool chk_double_cl;
|
| 32 |
|
| 33 | enum sort_mode {
|
| 34 | SORT_MODE__NORMAL,
|
| 35 | SORT_MODE__BRANCH,
|
| 36 | SORT_MODE__MEMORY,
|
| 37 | SORT_MODE__TOP,
|
| 38 | SORT_MODE__DIFF,
|
| 39 | SORT_MODE__TRACEPOINT,
|
| 40 | };
|
| 41 |
|
| 42 | enum sort_type {
|
| 43 |
|
| 44 | SORT_PID,
|
| 45 | SORT_COMM,
|
| 46 | SORT_COMM_NODIGIT,
|
| 47 | SORT_DSO,
|
| 48 | SORT_SYM,
|
| 49 | SORT_PARENT,
|
| 50 | SORT_CPU,
|
| 51 | SORT_SOCKET,
|
| 52 | SORT_SRCLINE,
|
| 53 | SORT_SRCFILE,
|
| 54 | SORT_LOCAL_WEIGHT,
|
| 55 | SORT_GLOBAL_WEIGHT,
|
| 56 | SORT_TRANSACTION,
|
| 57 | SORT_TRACE,
|
| 58 | SORT_SYM_SIZE,
|
| 59 | SORT_DSO_SIZE,
|
| 60 | SORT_CGROUP,
|
| 61 | SORT_CGROUP_ID,
|
| 62 | SORT_SYM_IPC_NULL,
|
| 63 | SORT_TIME,
|
| 64 | SORT_CODE_PAGE_SIZE,
|
| 65 | SORT_LOCAL_INS_LAT,
|
| 66 | SORT_GLOBAL_INS_LAT,
|
| 67 | SORT_LOCAL_PIPELINE_STAGE_CYC,
|
| 68 | SORT_GLOBAL_PIPELINE_STAGE_CYC,
|
| 69 | SORT_ADDR,
|
| 70 | SORT_LOCAL_RETIRE_LAT,
|
| 71 | SORT_GLOBAL_RETIRE_LAT,
|
| 72 | SORT_SIMD,
|
| 73 | SORT_ANNOTATE_DATA_TYPE,
|
| 74 | SORT_ANNOTATE_DATA_TYPE_OFFSET,
|
| 75 | SORT_SYM_OFFSET,
|
| 76 | SORT_ANNOTATE_DATA_TYPE_CACHELINE,
|
| 77 | SORT_PARALLELISM,
|
| 78 | SORT_TGID,
|
| 79 |
|
| 80 |
|
| 81 | __SORT_BRANCH_STACK,
|
| 82 | SORT_DSO_FROM = __SORT_BRANCH_STACK,
|
| 83 | SORT_DSO_TO,
|
| 84 | SORT_SYM_FROM,
|
| 85 | SORT_SYM_TO,
|
| 86 | SORT_MISPREDICT,
|
| 87 | SORT_ABORT,
|
| 88 | SORT_IN_TX,
|
| 89 | SORT_CYCLES,
|
| 90 | SORT_SRCLINE_FROM,
|
| 91 | SORT_SRCLINE_TO,
|
| 92 | SORT_SYM_IPC,
|
| 93 | SORT_ADDR_FROM,
|
| 94 | SORT_ADDR_TO,
|
| 95 | SORT_CALLCHAIN_BRANCH_PREDICTED,
|
| 96 | SORT_CALLCHAIN_BRANCH_ABORT,
|
| 97 | SORT_CALLCHAIN_BRANCH_CYCLES,
|
| 98 |
|
| 99 |
|
| 100 | __SORT_MEMORY_MODE,
|
| 101 | SORT_MEM_DADDR_SYMBOL = __SORT_MEMORY_MODE,
|
| 102 | SORT_MEM_DADDR_DSO,
|
| 103 | SORT_MEM_LOCKED,
|
| 104 | SORT_MEM_TLB,
|
| 105 | SORT_MEM_LVL,
|
| 106 | SORT_MEM_SNOOP,
|
| 107 | SORT_MEM_DCACHELINE,
|
| 108 | SORT_MEM_IADDR_SYMBOL,
|
| 109 | SORT_MEM_PHYS_DADDR,
|
| 110 | SORT_MEM_DATA_PAGE_SIZE,
|
| 111 | SORT_MEM_BLOCKED,
|
| 112 | };
|
| 113 |
|
| 114 | |
| 115 | * configurable sorting bits
|
| 116 |
|
| 117 |
|
| 118 | struct sort_entry {
|
| 119 | const char *se_header;
|
| 120 |
|
| 121 | int64_t (*se_cmp)(struct hist_entry *, struct hist_entry *);
|
| 122 | int64_t (*se_collapse)(struct hist_entry *, struct hist_entry *);
|
| 123 | int64_t (*se_sort)(struct hist_entry *, struct hist_entry *);
|
| 124 | int (*se_snprintf)(struct hist_entry *he, char *bf, size_t size,
|
| 125 | unsigned int width);
|
| 126 | int (*se_filter)(struct hist_entry *he, int type, const void *arg);
|
| 127 | void (*se_init)(struct hist_entry *he);
|
| 128 | u8 se_width_idx;
|
| 129 | };
|
| 130 |
|
| 131 | extern struct sort_entry sort_thread;
|
| 132 |
|
| 133 | struct evlist;
|
| 134 | struct tep_handle;
|
| 135 | int setup_sorting(struct evlist *evlist, struct perf_env *env);
|
| 136 | int setup_output_field(void);
|
| 137 | void reset_output_field(void);
|
| 138 | void sort__setup_elide(FILE *fp);
|
| 139 | void perf_hpp__set_elide(int idx, bool elide);
|
| 140 |
|
| 141 | char *sort_help(const char *prefix, enum sort_mode mode);
|
| 142 |
|
| 143 | int report_parse_ignore_callees_opt(const struct option *opt, const char *arg, int unset);
|
| 144 |
|
| 145 | bool is_strict_order(const char *order);
|
| 146 |
|
| 147 | int hpp_dimension__add_output(unsigned col, bool implicit);
|
| 148 | void reset_dimensions(void);
|
| 149 | int sort_dimension__add(struct perf_hpp_list *list, const char *tok,
|
| 150 | struct evlist *evlist, struct perf_env *env,
|
| 151 | int level);
|
| 152 | int output_field_add(struct perf_hpp_list *list, const char *tok, int *level);
|
| 153 | int64_t
|
| 154 | sort__iaddr_cmp(struct hist_entry *left, struct hist_entry *right);
|
| 155 | int64_t
|
| 156 | sort__daddr_cmp(struct hist_entry *left, struct hist_entry *right);
|
| 157 | int64_t
|
| 158 | sort__dcacheline_cmp(struct hist_entry *left, struct hist_entry *right);
|
| 159 | int64_t
|
| 160 | _sort__sym_cmp(struct symbol *sym_l, struct symbol *sym_r);
|
| 161 | char *hist_entry__srcline(struct hist_entry *he);
|
| 162 | size_t sort__comm_nodigit_len(struct hist_entry *entry);
|
| 163 | #endif
|