• 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_SORT_H
2#define __PERF_SORT_H
3#include "../builtin.h"
4
5#include "util.h"
6
7#include "color.h"
8#include <linux/list.h>
9#include "cache.h"
10#include <linux/rbtree.h>
11#include "symbol.h"
12#include "string.h"
13#include "callchain.h"
14#include "strlist.h"
15#include "values.h"
16
17#include "../perf.h"
18#include "debug.h"
19#include "header.h"
20
21#include "parse-options.h"
22#include "parse-events.h"
23
24#include "thread.h"
25#include "sort.h"
26
27extern regex_t parent_regex;
28extern const char *sort_order;
29extern const char default_parent_pattern[];
30extern const char *parent_pattern;
31extern const char default_sort_order[];
32extern int sort__need_collapse;
33extern int sort__has_parent;
34extern char *field_sep;
35extern struct sort_entry sort_comm;
36extern struct sort_entry sort_dso;
37extern struct sort_entry sort_sym;
38extern struct sort_entry sort_parent;
39extern enum sort_type sort__first_dimension;
40
41/**
42 * struct hist_entry - histogram entry
43 *
44 * @row_offset - offset from the first callchain expanded to appear on screen
45 * @nr_rows - rows expanded in callchain, recalculated on folding/unfolding
46 */
47struct hist_entry {
48	struct rb_node		rb_node;
49	u64			period;
50	u64			period_sys;
51	u64			period_us;
52	u64			period_guest_sys;
53	u64			period_guest_us;
54	struct map_symbol	ms;
55	struct thread		*thread;
56	u64			ip;
57	s32			cpu;
58	u32			nr_events;
59
60	u16			row_offset;
61	u16			nr_rows;
62
63	bool			init_have_children;
64	char			level;
65	u8			filtered;
66	struct symbol		*parent;
67	union {
68		unsigned long	  position;
69		struct hist_entry *pair;
70		struct rb_root	  sorted_chain;
71	};
72	struct callchain_node	callchain[0];
73};
74
75enum sort_type {
76	SORT_PID,
77	SORT_COMM,
78	SORT_DSO,
79	SORT_SYM,
80	SORT_PARENT,
81	SORT_CPU,
82};
83
84/*
85 * configurable sorting bits
86 */
87
88struct sort_entry {
89	struct list_head list;
90
91	const char *se_header;
92
93	int64_t (*se_cmp)(struct hist_entry *, struct hist_entry *);
94	int64_t (*se_collapse)(struct hist_entry *, struct hist_entry *);
95	int	(*se_snprintf)(struct hist_entry *self, char *bf, size_t size,
96			       unsigned int width);
97	u8	se_width_idx;
98	bool	elide;
99};
100
101extern struct sort_entry sort_thread;
102extern struct list_head hist_entry__sort_list;
103
104void setup_sorting(const char * const usagestr[], const struct option *opts);
105
106extern size_t sort__thread_print(FILE *, struct hist_entry *, unsigned int);
107extern size_t sort__comm_print(FILE *, struct hist_entry *, unsigned int);
108extern size_t sort__dso_print(FILE *, struct hist_entry *, unsigned int);
109extern size_t sort__sym_print(FILE *, struct hist_entry *, unsigned int __used);
110extern int64_t cmp_null(void *, void *);
111extern int64_t sort__thread_cmp(struct hist_entry *, struct hist_entry *);
112extern int64_t sort__comm_cmp(struct hist_entry *, struct hist_entry *);
113extern int64_t sort__comm_collapse(struct hist_entry *, struct hist_entry *);
114extern int64_t sort__dso_cmp(struct hist_entry *, struct hist_entry *);
115extern int64_t sort__sym_cmp(struct hist_entry *, struct hist_entry *);
116extern int64_t sort__parent_cmp(struct hist_entry *, struct hist_entry *);
117int64_t sort__cpu_cmp(struct hist_entry *left, struct hist_entry *right);
118extern size_t sort__parent_print(FILE *, struct hist_entry *, unsigned int);
119extern int sort_dimension__add(const char *);
120void sort_entry__setup_elide(struct sort_entry *self, struct strlist *list,
121			     const char *list_name, FILE *fp);
122
123#endif	/* __PERF_SORT_H */
124