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