perf_event_data/
visitor.rs1use std::borrow::Cow;
2
3use perf_event_open_sys::bindings;
4
5use crate::parse::Parser;
6use crate::*;
7
8used_in_docs!(Parser);
9
10#[derive(Clone, Debug)]
12pub struct RecordMetadata {
13 ty: u32,
14 misc: u16,
15 sample_id: SampleId,
16}
17
18impl RecordMetadata {
19 #[inline]
20 pub(crate) fn new(header: bindings::perf_event_header, sample_id: SampleId) -> Self {
21 Self {
22 ty: header.type_,
23 misc: header.misc,
24 sample_id,
25 }
26 }
27
28 #[inline]
30 pub fn ty(&self) -> u32 {
31 self.ty
32 }
33
34 #[inline]
36 pub fn misc(&self) -> u16 {
37 self.misc
38 }
39
40 #[inline]
48 pub fn sample_id(&self) -> &SampleId {
49 &self.sample_id
50 }
51}
52
53#[allow(unused_variables)]
76pub trait Visitor<'a>: Sized {
77 type Output;
79
80 fn visit_unimplemented(self, metadata: RecordMetadata) -> Self::Output;
85
86 fn visit_mmap(self, record: Mmap<'a>, metadata: RecordMetadata) -> Self::Output {
91 self.visit_unimplemented(metadata)
92 }
93
94 fn visit_lost(self, record: Lost, metadata: RecordMetadata) -> Self::Output {
96 self.visit_unimplemented(metadata)
97 }
98
99 fn visit_comm(self, record: Comm<'a>, metadata: RecordMetadata) -> Self::Output {
101 self.visit_unimplemented(metadata)
102 }
103
104 fn visit_exit(self, record: Exit, metadata: RecordMetadata) -> Self::Output {
106 self.visit_unimplemented(metadata)
107 }
108
109 fn visit_throttle(self, record: Throttle, metadata: RecordMetadata) -> Self::Output {
111 self.visit_unimplemented(metadata)
112 }
113
114 fn visit_unthrottle(self, record: Throttle, metadata: RecordMetadata) -> Self::Output {
116 self.visit_unimplemented(metadata)
117 }
118
119 fn visit_fork(self, record: Fork, metadata: RecordMetadata) -> Self::Output {
121 self.visit_unimplemented(metadata)
122 }
123
124 fn visit_read(self, record: Read, metadata: RecordMetadata) -> Self::Output {
126 self.visit_unimplemented(metadata)
127 }
128
129 fn visit_sample(self, record: Sample<'a>, metadata: RecordMetadata) -> Self::Output {
131 self.visit_unimplemented(metadata)
132 }
133
134 fn visit_mmap2(self, record: Mmap2<'a>, metadata: RecordMetadata) -> Self::Output {
139 self.visit_mmap(record.into_mmap(), metadata)
140 }
141
142 fn visit_aux(self, record: Aux, metadata: RecordMetadata) -> Self::Output {
144 self.visit_unimplemented(metadata)
145 }
146
147 fn visit_itrace_start(self, record: ITraceStart, metadata: RecordMetadata) -> Self::Output {
149 self.visit_unimplemented(metadata)
150 }
151
152 fn visit_lost_samples(self, record: LostSamples, metadata: RecordMetadata) -> Self::Output {
154 self.visit_unimplemented(metadata)
155 }
156
157 fn visit_switch(self, metadata: RecordMetadata) -> Self::Output {
159 self.visit_unimplemented(metadata)
160 }
161
162 fn visit_switch_cpu_wide(
164 self,
165 record: SwitchCpuWide,
166 metadata: RecordMetadata,
167 ) -> Self::Output {
168 self.visit_unimplemented(metadata)
169 }
170
171 fn visit_namespaces(self, record: Namespaces<'a>, metadata: RecordMetadata) -> Self::Output {
173 self.visit_unimplemented(metadata)
174 }
175
176 fn visit_ksymbol(self, record: KSymbol<'a>, metadata: RecordMetadata) -> Self::Output {
178 self.visit_unimplemented(metadata)
179 }
180
181 fn visit_bpf_event(self, record: BpfEvent, metadata: RecordMetadata) -> Self::Output {
183 self.visit_unimplemented(metadata)
184 }
185
186 fn visit_cgroup(self, record: CGroup<'a>, metadata: RecordMetadata) -> Self::Output {
188 self.visit_unimplemented(metadata)
189 }
190
191 fn visit_text_poke(self, record: TextPoke<'a>, metadata: RecordMetadata) -> Self::Output {
193 self.visit_unimplemented(metadata)
194 }
195
196 fn visit_aux_output_hw_id(
198 self,
199 record: AuxOutputHwId,
200 metadata: RecordMetadata,
201 ) -> Self::Output {
202 self.visit_unimplemented(metadata)
203 }
204
205 fn visit_unknown(self, data: Cow<'a, [u8]>, metadata: RecordMetadata) -> Self::Output {
216 self.visit_unimplemented(metadata)
217 }
218}