top.h 1.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#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_source {
15
	struct list_head	head;
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
	pthread_mutex_t		lock;
};

struct sym_entry {
	struct rb_node		rb_node;
	struct list_head	node;
	unsigned long		snap_count;
	double			weight;
	int			skip;
	u8			origin;
	struct map		*map;
	struct sym_entry_source	*src;
	unsigned long		count[0];
};

31 32 33 34 35
static inline struct symbol *sym_entry__symbol(struct sym_entry *self)
{
       return ((void *)self) + symbol_conf.priv_size;
}

36 37 38 39 40 41 42 43 44 45 46 47 48
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;
	u64		   samples;
	u64		   kernel_samples, us_samples;
	u64		   exact_samples;
	u64		   guest_us_samples, guest_kernel_samples;
	int		   print_entries, count_filter, delay_secs;
49 50
	int		   display_weighted, freq, rb_entries, sym_counter;
	pid_t		   target_pid, target_tid;
51 52 53 54 55 56 57 58 59 60 61
	bool		   hide_kernel_symbols, hide_user_symbols, zero;
	const char	   *cpu_list;
	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);

62 63 64 65 66 67 68 69
#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
70
#endif /* __PERF_TOP_H */