sort.h 4.0 KB

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