Root/
Source at commit ec7cab4cbb721bff91ec924ec691efd8daf36579 created 12 years 8 months ago. By Maarten ter Huurne, MIPS: JZ4740: A320: Updated quickstart documentation. | |
---|---|
1 | #ifndef __PERF_SESSION_H |
2 | #define __PERF_SESSION_H |
3 | |
4 | #include "hist.h" |
5 | #include "event.h" |
6 | #include "header.h" |
7 | #include "symbol.h" |
8 | #include "thread.h" |
9 | #include <linux/rbtree.h> |
10 | #include "../../../include/linux/perf_event.h" |
11 | |
12 | struct sample_queue; |
13 | struct ip_callchain; |
14 | struct thread; |
15 | |
16 | struct ordered_samples { |
17 | u64 last_flush; |
18 | u64 next_flush; |
19 | u64 max_timestamp; |
20 | struct list_head samples; |
21 | struct list_head sample_cache; |
22 | struct list_head to_free; |
23 | struct sample_queue *sample_buffer; |
24 | struct sample_queue *last_sample; |
25 | int sample_buffer_idx; |
26 | }; |
27 | |
28 | struct perf_session { |
29 | struct perf_header header; |
30 | unsigned long size; |
31 | unsigned long mmap_window; |
32 | struct rb_root threads; |
33 | struct list_head dead_threads; |
34 | struct thread *last_match; |
35 | struct machine host_machine; |
36 | struct rb_root machines; |
37 | struct perf_evlist *evlist; |
38 | /* |
39 | * FIXME: Need to split this up further, we need global |
40 | * stats + per event stats. 'perf diff' also needs |
41 | * to properly support multiple events in a single |
42 | * perf.data file. |
43 | */ |
44 | struct hists hists; |
45 | u64 sample_type; |
46 | int fd; |
47 | bool fd_pipe; |
48 | bool repipe; |
49 | bool sample_id_all; |
50 | u16 id_hdr_size; |
51 | int cwdlen; |
52 | char *cwd; |
53 | struct ordered_samples ordered_samples; |
54 | struct callchain_cursor callchain_cursor; |
55 | char filename[0]; |
56 | }; |
57 | |
58 | struct perf_evsel; |
59 | struct perf_event_ops; |
60 | |
61 | typedef int (*event_sample)(union perf_event *event, struct perf_sample *sample, |
62 | struct perf_evsel *evsel, struct perf_session *session); |
63 | typedef int (*event_op)(union perf_event *self, struct perf_sample *sample, |
64 | struct perf_session *session); |
65 | typedef int (*event_synth_op)(union perf_event *self, |
66 | struct perf_session *session); |
67 | typedef int (*event_op2)(union perf_event *self, struct perf_session *session, |
68 | struct perf_event_ops *ops); |
69 | |
70 | struct perf_event_ops { |
71 | event_sample sample; |
72 | event_op mmap, |
73 | comm, |
74 | fork, |
75 | exit, |
76 | lost, |
77 | read, |
78 | throttle, |
79 | unthrottle; |
80 | event_synth_op attr, |
81 | event_type, |
82 | tracing_data, |
83 | build_id; |
84 | event_op2 finished_round; |
85 | bool ordered_samples; |
86 | bool ordering_requires_timestamps; |
87 | }; |
88 | |
89 | struct perf_session *perf_session__new(const char *filename, int mode, |
90 | bool force, bool repipe, |
91 | struct perf_event_ops *ops); |
92 | void perf_session__delete(struct perf_session *self); |
93 | |
94 | void perf_event_header__bswap(struct perf_event_header *self); |
95 | |
96 | int __perf_session__process_events(struct perf_session *self, |
97 | u64 data_offset, u64 data_size, u64 size, |
98 | struct perf_event_ops *ops); |
99 | int perf_session__process_events(struct perf_session *self, |
100 | struct perf_event_ops *event_ops); |
101 | |
102 | int perf_session__resolve_callchain(struct perf_session *self, |
103 | struct thread *thread, |
104 | struct ip_callchain *chain, |
105 | struct symbol **parent); |
106 | |
107 | bool perf_session__has_traces(struct perf_session *self, const char *msg); |
108 | |
109 | int perf_session__set_kallsyms_ref_reloc_sym(struct map **maps, |
110 | const char *symbol_name, |
111 | u64 addr); |
112 | |
113 | void mem_bswap_64(void *src, int byte_size); |
114 | |
115 | int perf_session__create_kernel_maps(struct perf_session *self); |
116 | |
117 | void perf_session__update_sample_type(struct perf_session *self); |
118 | void perf_session__remove_thread(struct perf_session *self, struct thread *th); |
119 | |
120 | static inline |
121 | struct machine *perf_session__find_host_machine(struct perf_session *self) |
122 | { |
123 | return &self->host_machine; |
124 | } |
125 | |
126 | static inline |
127 | struct machine *perf_session__find_machine(struct perf_session *self, pid_t pid) |
128 | { |
129 | if (pid == HOST_KERNEL_ID) |
130 | return &self->host_machine; |
131 | return machines__find(&self->machines, pid); |
132 | } |
133 | |
134 | static inline |
135 | struct machine *perf_session__findnew_machine(struct perf_session *self, pid_t pid) |
136 | { |
137 | if (pid == HOST_KERNEL_ID) |
138 | return &self->host_machine; |
139 | return machines__findnew(&self->machines, pid); |
140 | } |
141 | |
142 | static inline |
143 | void perf_session__process_machines(struct perf_session *self, |
144 | machine__process_t process) |
145 | { |
146 | process(&self->host_machine, self); |
147 | return machines__process(&self->machines, process, self); |
148 | } |
149 | |
150 | size_t perf_session__fprintf_dsos(struct perf_session *self, FILE *fp); |
151 | |
152 | size_t perf_session__fprintf_dsos_buildid(struct perf_session *self, |
153 | FILE *fp, bool with_hits); |
154 | |
155 | size_t perf_session__fprintf_nr_events(struct perf_session *session, FILE *fp); |
156 | |
157 | static inline int perf_session__parse_sample(struct perf_session *session, |
158 | const union perf_event *event, |
159 | struct perf_sample *sample) |
160 | { |
161 | return perf_event__parse_sample(event, session->sample_type, |
162 | session->sample_id_all, sample); |
163 | } |
164 | |
165 | void perf_session__print_symbols(union perf_event *event, |
166 | struct perf_sample *sample, |
167 | struct perf_session *session); |
168 | |
169 | #endif /* __PERF_SESSION_H */ |
170 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9