top.h 1.7 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
#ifndef __PERF_TOP_H
#define __PERF_TOP_H 1

#include "types.h"
#include "../perf.h"
#include <stddef.h>
#include <pthread.h>
#include <linux/list.h>
#include <linux/rbtree.h>

struct perf_evlist;
struct perf_evsel;

struct sym_entry {
	struct rb_node		rb_node;
	struct list_head	node;
	unsigned long		snap_count;
	double			weight;
	struct map		*map;
	unsigned long		count[0];
};

23 24 25 26 27
static inline struct symbol *sym_entry__symbol(struct sym_entry *self)
{
       return ((void *)self) + symbol_conf.priv_size;
}

28 29 30 31 32 33 34 35
struct perf_top {
	struct perf_evlist *evlist;
	/*
	 * Symbols will be added here in perf_event__process_sample and will
	 * get out after decayed.
	 */
	struct list_head   active_symbols;
	pthread_mutex_t	   active_symbols_lock;
36
	pthread_cond_t	   active_symbols_cond;
37 38 39 40 41
	u64		   samples;
	u64		   kernel_samples, us_samples;
	u64		   exact_samples;
	u64		   guest_us_samples, guest_kernel_samples;
	int		   print_entries, count_filter, delay_secs;
42
	int		   display_weighted, freq, rb_entries;
43
	pid_t		   target_pid, target_tid;
44 45
	bool		   hide_kernel_symbols, hide_user_symbols, zero;
	const char	   *cpu_list;
46
	struct sym_entry   *sym_filter_entry;
47 48 49 50 51 52 53 54 55
	struct perf_evsel  *sym_evsel;
};

size_t perf_top__header_snprintf(struct perf_top *top, char *bf, size_t size);
void perf_top__reset_sample_counters(struct perf_top *top);
float perf_top__decay_samples(struct perf_top *top, struct rb_root *root);
void perf_top__find_widths(struct perf_top *top, struct rb_root *root,
			   int *dso_width, int *dso_short_width, int *sym_width);

56 57 58 59 60 61 62 63
#ifdef NO_NEWT_SUPPORT
static inline int perf_top__tui_browser(struct perf_top *top __used)
{
	return 0;
}
#else
int perf_top__tui_browser(struct perf_top *top);
#endif
64
#endif /* __PERF_TOP_H */