Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
tools
perf
util
hist.h
Go to the documentation of this file.
1
#ifndef __PERF_HIST_H
2
#define __PERF_HIST_H
3
4
#include <linux/types.h>
5
#include <pthread.h>
6
#include "
callchain.h
"
7
8
extern
struct
callchain_param
callchain_param
;
9
10
struct
hist_entry
;
11
struct
addr_location
;
12
struct
symbol
;
13
14
/*
15
* The kernel collects the number of events it couldn't send in a stretch and
16
* when possible sends this number in a PERF_RECORD_LOST event. The number of
17
* such "chunks" of lost events is stored in .nr_events[PERF_EVENT_LOST] while
18
* total_lost tells exactly how many events the kernel in fact lost, i.e. it is
19
* the sum of all struct lost_event.lost fields reported.
20
*
21
* The total_period is needed because by default auto-freq is used, so
22
* multipling nr_events[PERF_EVENT_SAMPLE] by a frequency isn't possible to get
23
* the total number of low level events, it is necessary to to sum all struct
24
* sample_event.period and stash the result in total_period.
25
*/
26
struct
events_stats
{
27
u64
total_period
;
28
u64
total_lost
;
29
u64
total_invalid_chains
;
30
u32
nr_events
[
PERF_RECORD_HEADER_MAX
];
31
u32
nr_lost_warned
;
32
u32
nr_unknown_events
;
33
u32
nr_invalid_chains
;
34
u32
nr_unknown_id
;
35
u32
nr_unprocessable_samples
;
36
};
37
38
enum
hist_column
{
39
HISTC_SYMBOL
,
40
HISTC_DSO
,
41
HISTC_THREAD
,
42
HISTC_COMM
,
43
HISTC_PARENT
,
44
HISTC_CPU
,
45
HISTC_MISPREDICT
,
46
HISTC_SYMBOL_FROM
,
47
HISTC_SYMBOL_TO
,
48
HISTC_DSO_FROM
,
49
HISTC_DSO_TO
,
50
HISTC_SRCLINE
,
51
HISTC_NR_COLS
,
/* Last entry */
52
};
53
54
struct
thread
;
55
struct
dso
;
56
57
struct
hists
{
58
struct
rb_root
entries_in_array
[2];
59
struct
rb_root
*
entries_in
;
60
struct
rb_root
entries
;
61
struct
rb_root
entries_collapsed
;
62
u64
nr_entries
;
63
const
struct
thread
*
thread_filter
;
64
const
struct
dso
*
dso_filter
;
65
const
char
*
uid_filter_str
;
66
const
char
*
symbol_filter_str
;
67
pthread_mutex_t
lock
;
68
struct
events_stats
stats
;
69
u64
event_stream
;
70
u16
col_len
[
HISTC_NR_COLS
];
71
};
72
73
struct
hist_entry
*
__hists__add_entry
(
struct
hists
*
self
,
74
struct
addr_location
*al,
75
struct
symbol
*
parent
,
u64
period
);
76
int64_t
hist_entry__cmp
(
struct
hist_entry
*
left
,
struct
hist_entry
*
right
);
77
int64_t
hist_entry__collapse
(
struct
hist_entry
*
left
,
struct
hist_entry
*
right
);
78
int
hist_entry__sort_snprintf
(
struct
hist_entry
*
self
,
char
*
bf
,
size_t
size
,
79
struct
hists
*
hists
);
80
void
hist_entry__free
(
struct
hist_entry
*);
81
82
struct
hist_entry
*
__hists__add_branch_entry
(
struct
hists
*
self
,
83
struct
addr_location
*al,
84
struct
symbol
*sym_parent,
85
struct
branch_info
*
bi
,
86
u64
period
);
87
88
void
hists__output_resort
(
struct
hists
*
self
);
89
void
hists__output_resort_threaded
(
struct
hists
*
hists
);
90
void
hists__collapse_resort
(
struct
hists
*
self
);
91
void
hists__collapse_resort_threaded
(
struct
hists
*
hists
);
92
93
void
hists__decay_entries
(
struct
hists
*
hists
,
bool
zap_user,
bool
zap_kernel);
94
void
hists__decay_entries_threaded
(
struct
hists
*
hists
,
bool
zap_user,
95
bool
zap_kernel);
96
void
hists__output_recalc_col_len
(
struct
hists
*
hists
,
int
max_rows);
97
98
void
hists__inc_nr_events
(
struct
hists
*
self
,
u32
type
);
99
size_t
hists__fprintf_nr_events
(
struct
hists
*
self
, FILE *
fp
);
100
101
size_t
hists__fprintf
(
struct
hists
*
self
,
bool
show_header,
int
max_rows,
102
int
max_cols, FILE *
fp
);
103
104
int
hist_entry__inc_addr_samples
(
struct
hist_entry
*
self
,
int
evidx,
u64
addr
);
105
int
hist_entry__annotate
(
struct
hist_entry
*
self
,
size_t
privsize);
106
107
void
hists__filter_by_dso
(
struct
hists
*
hists
);
108
void
hists__filter_by_thread
(
struct
hists
*
hists
);
109
void
hists__filter_by_symbol
(
struct
hists
*
hists
);
110
111
u16
hists__col_len
(
struct
hists
*
self
,
enum
hist_column
col);
112
void
hists__set_col_len
(
struct
hists
*
self
,
enum
hist_column
col,
u16
len);
113
bool
hists__new_col_len
(
struct
hists
*
self
,
enum
hist_column
col,
u16
len);
114
void
hists__reset_col_len
(
struct
hists
*
hists
);
115
void
hists__calc_col_len
(
struct
hists
*
hists
,
struct
hist_entry
*he);
116
117
struct
perf_hpp
{
118
char
*
buf
;
119
size_t
size
;
120
const
char
*
sep
;
121
void
*
ptr
;
122
};
123
124
struct
perf_hpp_fmt
{
125
bool
cond
;
126
int
(*
header
)(
struct
perf_hpp
*hpp);
127
int
(*
width
)(
struct
perf_hpp
*hpp);
128
int
(*
color
)(
struct
perf_hpp
*hpp,
struct
hist_entry
*he);
129
int
(*
entry
)(
struct
perf_hpp
*hpp,
struct
hist_entry
*he);
130
};
131
132
extern
struct
perf_hpp_fmt
perf_hpp__format
[];
133
134
enum
{
135
PERF_HPP__BASELINE
,
136
PERF_HPP__OVERHEAD
,
137
PERF_HPP__OVERHEAD_SYS
,
138
PERF_HPP__OVERHEAD_US
,
139
PERF_HPP__OVERHEAD_GUEST_SYS
,
140
PERF_HPP__OVERHEAD_GUEST_US
,
141
PERF_HPP__SAMPLES
,
142
PERF_HPP__PERIOD
,
143
PERF_HPP__DELTA
,
144
PERF_HPP__DISPL
,
145
146
PERF_HPP__MAX_INDEX
147
};
148
149
void
perf_hpp__init
(
void
);
150
void
perf_hpp__column_enable
(
unsigned
col,
bool
enable
);
151
int
hist_entry__period_snprintf
(
struct
perf_hpp
*hpp,
struct
hist_entry
*he,
152
bool
color
);
153
154
struct
perf_evlist
;
155
156
#ifdef NEWT_SUPPORT
157
#include "../ui/keysyms.h"
158
int
hist_entry__tui_annotate
(
struct
hist_entry
*he,
int
evidx,
159
void
(*
timer
)(
void
*
arg
),
void
*arg,
int
delay_secs);
160
161
int
perf_evlist__tui_browse_hists
(
struct
perf_evlist
*evlist,
const
char
*help,
162
void
(*
timer
)(
void
*
arg
),
void
*arg,
163
int
refresh);
164
#else
165
static
inline
166
int
perf_evlist__tui_browse_hists
(
struct
perf_evlist
*evlist
__maybe_unused
,
167
const
char
*help __maybe_unused,
168
void
(*
timer
)(
void
*
arg
) __maybe_unused,
169
void
*arg __maybe_unused,
170
int
refresh __maybe_unused)
171
{
172
return
0;
173
}
174
175
static
inline
int
hist_entry__tui_annotate
(
struct
hist_entry
*
self
176
__maybe_unused,
177
int
evidx __maybe_unused,
178
void
(*
timer
)(
void
*
arg
)
179
__maybe_unused,
180
void
*arg __maybe_unused,
181
int
delay_secs __maybe_unused)
182
{
183
return
0;
184
}
185
#define K_LEFT -1
186
#define K_RIGHT -2
187
#endif
188
189
#ifdef GTK2_SUPPORT
190
int
perf_evlist__gtk_browse_hists
(
struct
perf_evlist
*evlist,
const
char
*help,
191
void
(*
timer
)(
void
*
arg
),
void
*arg,
192
int
refresh);
193
#else
194
static
inline
195
int
perf_evlist__gtk_browse_hists
(
struct
perf_evlist
*evlist __maybe_unused,
196
const
char
*help __maybe_unused,
197
void
(*
timer
)(
void
*
arg
) __maybe_unused,
198
void
*arg __maybe_unused,
199
int
refresh __maybe_unused)
200
{
201
return
0;
202
}
203
#endif
204
205
unsigned
int
hists__sort_list_width
(
struct
hists
*
self
);
206
207
#endif
/* __PERF_HIST_H */
Generated on Thu Jan 10 2013 15:09:21 for Linux Kernel by
1.8.2