1e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#ifndef __PERF_SORT_H 2e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define __PERF_SORT_H 3e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "../builtin.h" 4e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 5e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "util.h" 6e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 7e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "color.h" 8e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/* ANDROID_CHANGE_BEGIN */ 9e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#if 0 10e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <linux/list.h> 11e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "cache.h" 12e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <linux/rbtree.h> 13e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#else 14e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "include/linux/list.h" 15e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "cache.h" 16e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "include/linux/rbtree.h" 17e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#endif 18e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/* ANDROID_CHANGE_END */ 19e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "symbol.h" 20e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "string.h" 21e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "callchain.h" 22e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "strlist.h" 23e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "values.h" 24e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 25e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "../perf.h" 26e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "debug.h" 27e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "header.h" 28e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 29e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "parse-options.h" 30e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "parse-events.h" 31e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 32e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "thread.h" 33e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "sort.h" 34e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 35e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern regex_t parent_regex; 36e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern const char *sort_order; 37e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern const char default_parent_pattern[]; 38e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern const char *parent_pattern; 39e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern const char default_sort_order[]; 40e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern int sort__need_collapse; 41e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern int sort__has_parent; 42e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern char *field_sep; 43e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern struct sort_entry sort_comm; 44e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern struct sort_entry sort_dso; 45e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern struct sort_entry sort_sym; 46e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern struct sort_entry sort_parent; 47e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern enum sort_type sort__first_dimension; 48e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 49e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/** 50e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * struct hist_entry - histogram entry 51e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * 52e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @row_offset - offset from the first callchain expanded to appear on screen 53e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * @nr_rows - rows expanded in callchain, recalculated on folding/unfolding 54e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */ 55e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct hist_entry { 56e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct rb_node rb_node; 57e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u64 period; 58e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u64 period_sys; 59e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u64 period_us; 60e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u64 period_guest_sys; 61e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u64 period_guest_us; 62e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct map_symbol ms; 63e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct thread *thread; 64e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u64 ip; 65e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng s32 cpu; 66e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u32 nr_events; 67e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 68e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng /* XXX These two should move to some tree widget lib */ 69e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u16 row_offset; 70e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u16 nr_rows; 71e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 72e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng bool init_have_children; 73e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng char level; 74e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u8 filtered; 75e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct symbol *parent; 76e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng union { 77e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng unsigned long position; 78e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct hist_entry *pair; 79e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct rb_root sorted_chain; 80e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng }; 81e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct callchain_root callchain[0]; 82e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}; 83e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 84e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengenum sort_type { 85e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng SORT_PID, 86e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng SORT_COMM, 87e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng SORT_DSO, 88e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng SORT_SYM, 89e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng SORT_PARENT, 90e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng SORT_CPU, 91e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}; 92e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 93e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/* 94e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * configurable sorting bits 95e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */ 96e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 97e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct sort_entry { 98e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct list_head list; 99e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 100e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng const char *se_header; 101e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 102e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng int64_t (*se_cmp)(struct hist_entry *, struct hist_entry *); 103e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng int64_t (*se_collapse)(struct hist_entry *, struct hist_entry *); 104e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng int (*se_snprintf)(struct hist_entry *self, char *bf, size_t size, 105e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng unsigned int width); 106e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u8 se_width_idx; 107e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng bool elide; 108e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}; 109e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 110e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern struct sort_entry sort_thread; 111e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern struct list_head hist_entry__sort_list; 112e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 113e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid setup_sorting(const char * const usagestr[], const struct option *opts); 114e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 115e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern size_t sort__thread_print(FILE *, struct hist_entry *, unsigned int); 116e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern size_t sort__comm_print(FILE *, struct hist_entry *, unsigned int); 117e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern size_t sort__dso_print(FILE *, struct hist_entry *, unsigned int); 118e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern size_t sort__sym_print(FILE *, struct hist_entry *, unsigned int __used); 119e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern int64_t cmp_null(void *, void *); 120e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern int64_t sort__thread_cmp(struct hist_entry *, struct hist_entry *); 121e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern int64_t sort__comm_cmp(struct hist_entry *, struct hist_entry *); 122e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern int64_t sort__comm_collapse(struct hist_entry *, struct hist_entry *); 123e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern int64_t sort__dso_cmp(struct hist_entry *, struct hist_entry *); 124e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern int64_t sort__sym_cmp(struct hist_entry *, struct hist_entry *); 125e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern int64_t sort__parent_cmp(struct hist_entry *, struct hist_entry *); 126e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint64_t sort__cpu_cmp(struct hist_entry *left, struct hist_entry *right); 127e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern size_t sort__parent_print(FILE *, struct hist_entry *, unsigned int); 128e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern int sort_dimension__add(const char *); 129e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid sort_entry__setup_elide(struct sort_entry *self, struct strlist *list, 130e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng const char *list_name, FILE *fp); 131e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 132e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#endif /* __PERF_SORT_H */ 133