18c3e10ebSArnaldo Carvalho de Melo #ifndef __PERF_TOP_H 28c3e10ebSArnaldo Carvalho de Melo #define __PERF_TOP_H 1 38c3e10ebSArnaldo Carvalho de Melo 48c3e10ebSArnaldo Carvalho de Melo #include "types.h" 58c3e10ebSArnaldo Carvalho de Melo #include "../perf.h" 68c3e10ebSArnaldo Carvalho de Melo #include <stddef.h> 78c3e10ebSArnaldo Carvalho de Melo #include <pthread.h> 88c3e10ebSArnaldo Carvalho de Melo #include <linux/list.h> 98c3e10ebSArnaldo Carvalho de Melo #include <linux/rbtree.h> 108c3e10ebSArnaldo Carvalho de Melo 118c3e10ebSArnaldo Carvalho de Melo struct perf_evlist; 128c3e10ebSArnaldo Carvalho de Melo struct perf_evsel; 138c3e10ebSArnaldo Carvalho de Melo 148c3e10ebSArnaldo Carvalho de Melo struct source_line { 158c3e10ebSArnaldo Carvalho de Melo u64 eip; 168c3e10ebSArnaldo Carvalho de Melo unsigned long count[MAX_COUNTERS]; /* FIXME */ 178c3e10ebSArnaldo Carvalho de Melo char *line; 188c3e10ebSArnaldo Carvalho de Melo struct source_line *next; 198c3e10ebSArnaldo Carvalho de Melo }; 208c3e10ebSArnaldo Carvalho de Melo 218c3e10ebSArnaldo Carvalho de Melo struct sym_entry_source { 228c3e10ebSArnaldo Carvalho de Melo struct source_line *source; 238c3e10ebSArnaldo Carvalho de Melo struct source_line *lines; 248c3e10ebSArnaldo Carvalho de Melo struct source_line **lines_tail; 258c3e10ebSArnaldo Carvalho de Melo pthread_mutex_t lock; 268c3e10ebSArnaldo Carvalho de Melo }; 278c3e10ebSArnaldo Carvalho de Melo 288c3e10ebSArnaldo Carvalho de Melo struct sym_entry { 298c3e10ebSArnaldo Carvalho de Melo struct rb_node rb_node; 308c3e10ebSArnaldo Carvalho de Melo struct list_head node; 318c3e10ebSArnaldo Carvalho de Melo unsigned long snap_count; 328c3e10ebSArnaldo Carvalho de Melo double weight; 338c3e10ebSArnaldo Carvalho de Melo int skip; 348c3e10ebSArnaldo Carvalho de Melo u16 name_len; 358c3e10ebSArnaldo Carvalho de Melo u8 origin; 368c3e10ebSArnaldo Carvalho de Melo struct map *map; 378c3e10ebSArnaldo Carvalho de Melo struct sym_entry_source *src; 388c3e10ebSArnaldo Carvalho de Melo unsigned long count[0]; 398c3e10ebSArnaldo Carvalho de Melo }; 408c3e10ebSArnaldo Carvalho de Melo 418c3e10ebSArnaldo Carvalho de Melo struct perf_top { 428c3e10ebSArnaldo Carvalho de Melo struct perf_evlist *evlist; 438c3e10ebSArnaldo Carvalho de Melo /* 448c3e10ebSArnaldo Carvalho de Melo * Symbols will be added here in perf_event__process_sample and will 458c3e10ebSArnaldo Carvalho de Melo * get out after decayed. 468c3e10ebSArnaldo Carvalho de Melo */ 478c3e10ebSArnaldo Carvalho de Melo struct list_head active_symbols; 488c3e10ebSArnaldo Carvalho de Melo pthread_mutex_t active_symbols_lock; 498c3e10ebSArnaldo Carvalho de Melo u64 samples; 508c3e10ebSArnaldo Carvalho de Melo u64 kernel_samples, us_samples; 518c3e10ebSArnaldo Carvalho de Melo u64 exact_samples; 528c3e10ebSArnaldo Carvalho de Melo u64 guest_us_samples, guest_kernel_samples; 538c3e10ebSArnaldo Carvalho de Melo int print_entries, count_filter, delay_secs; 548c3e10ebSArnaldo Carvalho de Melo int display_weighted, freq; 558c3e10ebSArnaldo Carvalho de Melo int sym_counter, target_pid, target_tid; 568c3e10ebSArnaldo Carvalho de Melo bool hide_kernel_symbols, hide_user_symbols, zero; 578c3e10ebSArnaldo Carvalho de Melo const char *cpu_list; 588c3e10ebSArnaldo Carvalho de Melo struct perf_evsel *sym_evsel; 598c3e10ebSArnaldo Carvalho de Melo }; 608c3e10ebSArnaldo Carvalho de Melo 618c3e10ebSArnaldo Carvalho de Melo size_t perf_top__header_snprintf(struct perf_top *top, char *bf, size_t size); 628c3e10ebSArnaldo Carvalho de Melo void perf_top__reset_sample_counters(struct perf_top *top); 638c3e10ebSArnaldo Carvalho de Melo float perf_top__decay_samples(struct perf_top *top, struct rb_root *root); 648c3e10ebSArnaldo Carvalho de Melo void perf_top__find_widths(struct perf_top *top, struct rb_root *root, 658c3e10ebSArnaldo Carvalho de Melo int *dso_width, int *dso_short_width, int *sym_width); 668c3e10ebSArnaldo Carvalho de Melo 678c3e10ebSArnaldo Carvalho de Melo #endif /* __PERF_TOP_H */ 68