top.h 1.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12
#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;
13
struct perf_session;
14 15 16 17 18 19 20 21 22 23

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];
};

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

29 30 31 32 33 34 35 36
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;
37
	pthread_cond_t	   active_symbols_cond;
38 39 40 41
	u64		   samples;
	u64		   kernel_samples, us_samples;
	u64		   exact_samples;
	u64		   guest_us_samples, guest_kernel_samples;
42
	u64		   total_lost_warned;
43
	int		   print_entries, count_filter, delay_secs;
44
	int		   display_weighted, freq, rb_entries;
45
	pid_t		   target_pid, target_tid;
46 47
	bool		   hide_kernel_symbols, hide_user_symbols, zero;
	const char	   *cpu_list;
48
	struct sym_entry   *sym_filter_entry;
49
	struct perf_evsel  *sym_evsel;
50
	struct perf_session *session;
51 52 53 54 55 56 57 58
};

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);

59 60 61 62 63 64 65 66
#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
67
#endif /* __PERF_TOP_H */