diff options
author | Steve French <sfrench@us.ibm.com> | 2009-07-16 04:21:39 +0000 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2009-07-16 04:21:39 +0000 |
commit | f6c43385435640e056424034caac0d765c45e370 (patch) | |
tree | 54c2ba0a7d3abb156bc51f6b9f02e00f0a260f85 /tools/perf/util/callchain.h | |
parent | 65bc98b0059360e458aebd208587be44641227c1 (diff) | |
parent | 35b5c55fee08e6e4001ba98060a2d0b82f70b5f4 (diff) |
Merge branch 'master' of /pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'tools/perf/util/callchain.h')
-rw-r--r-- | tools/perf/util/callchain.h | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/tools/perf/util/callchain.h b/tools/perf/util/callchain.h index fa1cd2f71fd..7812122bea1 100644 --- a/tools/perf/util/callchain.h +++ b/tools/perf/util/callchain.h @@ -2,22 +2,42 @@ #define __PERF_CALLCHAIN_H #include "../perf.h" -#include "list.h" -#include "rbtree.h" +#include <linux/list.h> +#include <linux/rbtree.h> +#include "symbol.h" +enum chain_mode { + CHAIN_FLAT, + CHAIN_GRAPH_ABS, + CHAIN_GRAPH_REL +}; struct callchain_node { struct callchain_node *parent; struct list_head brothers; - struct list_head children; - struct list_head val; - struct rb_node rb_node; - int val_nr; - int hit; + struct list_head children; + struct list_head val; + struct rb_node rb_node; /* to sort nodes in an rbtree */ + struct rb_root rb_root; /* sorted tree of children */ + unsigned int val_nr; + u64 hit; + u64 cumul_hit; /* hit + hits of children */ +}; + +struct callchain_param; + +typedef void (*sort_chain_func_t)(struct rb_root *, struct callchain_node *, + u64, struct callchain_param *); + +struct callchain_param { + enum chain_mode mode; + double min_percent; + sort_chain_func_t sort; }; struct callchain_list { - unsigned long ip; + u64 ip; + struct symbol *sym; struct list_head list; }; @@ -28,6 +48,7 @@ static inline void callchain_init(struct callchain_node *node) INIT_LIST_HEAD(&node->val); } -void append_chain(struct callchain_node *root, struct ip_callchain *chain); -void sort_chain_to_rbtree(struct rb_root *rb_root, struct callchain_node *node); +int register_callchain_param(struct callchain_param *param); +void append_chain(struct callchain_node *root, struct ip_callchain *chain, + struct symbol **syms); #endif |