• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/tools/perf/util/
1#ifndef __PERF_CALLCHAIN_H
2#define __PERF_CALLCHAIN_H
3
4#include "../perf.h"
5#include <linux/list.h>
6#include <linux/rbtree.h>
7#include "event.h"
8#include "symbol.h"
9
10enum chain_mode {
11	CHAIN_NONE,
12	CHAIN_FLAT,
13	CHAIN_GRAPH_ABS,
14	CHAIN_GRAPH_REL
15};
16
17struct callchain_node {
18	struct callchain_node	*parent;
19	struct list_head	brothers;
20	struct list_head	children;
21	struct list_head	val;
22	struct rb_node		rb_node; /* to sort nodes in an rbtree */
23	struct rb_root		rb_root; /* sorted tree of children */
24	unsigned int		val_nr;
25	u64			hit;
26	u64			children_hit;
27};
28
29struct callchain_param;
30
31typedef void (*sort_chain_func_t)(struct rb_root *, struct callchain_node *,
32				 u64, struct callchain_param *);
33
34struct callchain_param {
35	enum chain_mode 	mode;
36	u32			print_limit;
37	double			min_percent;
38	sort_chain_func_t	sort;
39};
40
41struct callchain_list {
42	u64			ip;
43	struct map_symbol	ms;
44	struct list_head	list;
45};
46
47static inline void callchain_init(struct callchain_node *node)
48{
49	INIT_LIST_HEAD(&node->brothers);
50	INIT_LIST_HEAD(&node->children);
51	INIT_LIST_HEAD(&node->val);
52
53	node->children_hit = 0;
54	node->parent = NULL;
55	node->hit = 0;
56}
57
58static inline u64 cumul_hits(struct callchain_node *node)
59{
60	return node->hit + node->children_hit;
61}
62
63int register_callchain_param(struct callchain_param *param);
64int append_chain(struct callchain_node *root, struct ip_callchain *chain,
65		 struct map_symbol *syms, u64 period);
66
67bool ip_callchain__valid(struct ip_callchain *chain, const event_t *event);
68#endif	/* __PERF_CALLCHAIN_H */
69