use std::borrow::Cow;
use perf_event_open_sys::bindings;
use crate::parse::Parser;
use crate::*;
used_in_docs!(Parser);
#[derive(Clone, Debug)]
pub struct RecordMetadata {
ty: u32,
misc: u16,
sample_id: SampleId,
}
impl RecordMetadata {
#[inline]
pub(crate) fn new(header: bindings::perf_event_header, sample_id: SampleId) -> Self {
Self {
ty: header.type_,
misc: header.misc,
sample_id,
}
}
#[inline]
pub fn ty(&self) -> u32 {
self.ty
}
#[inline]
pub fn misc(&self) -> u16 {
self.misc
}
#[inline]
pub fn sample_id(&self) -> &SampleId {
&self.sample_id
}
}
#[allow(unused_variables)]
pub trait Visitor<'a>: Sized {
type Output;
fn visit_unimplemented(self, metadata: RecordMetadata) -> Self::Output;
fn visit_mmap(self, record: Mmap<'a>, metadata: RecordMetadata) -> Self::Output {
self.visit_unimplemented(metadata)
}
fn visit_lost(self, record: Lost, metadata: RecordMetadata) -> Self::Output {
self.visit_unimplemented(metadata)
}
fn visit_comm(self, record: Comm<'a>, metadata: RecordMetadata) -> Self::Output {
self.visit_unimplemented(metadata)
}
fn visit_exit(self, record: Exit, metadata: RecordMetadata) -> Self::Output {
self.visit_unimplemented(metadata)
}
fn visit_throttle(self, record: Throttle, metadata: RecordMetadata) -> Self::Output {
self.visit_unimplemented(metadata)
}
fn visit_unthrottle(self, record: Throttle, metadata: RecordMetadata) -> Self::Output {
self.visit_unimplemented(metadata)
}
fn visit_fork(self, record: Fork, metadata: RecordMetadata) -> Self::Output {
self.visit_unimplemented(metadata)
}
fn visit_read(self, record: Read, metadata: RecordMetadata) -> Self::Output {
self.visit_unimplemented(metadata)
}
fn visit_sample(self, record: Sample<'a>, metadata: RecordMetadata) -> Self::Output {
self.visit_unimplemented(metadata)
}
fn visit_mmap2(self, record: Mmap2<'a>, metadata: RecordMetadata) -> Self::Output {
self.visit_mmap(record.into_mmap(), metadata)
}
fn visit_aux(self, record: Aux, metadata: RecordMetadata) -> Self::Output {
self.visit_unimplemented(metadata)
}
fn visit_itrace_start(self, record: ITraceStart, metadata: RecordMetadata) -> Self::Output {
self.visit_unimplemented(metadata)
}
fn visit_lost_samples(self, record: LostSamples, metadata: RecordMetadata) -> Self::Output {
self.visit_unimplemented(metadata)
}
fn visit_switch(self, metadata: RecordMetadata) -> Self::Output {
self.visit_unimplemented(metadata)
}
fn visit_switch_cpu_wide(
self,
record: SwitchCpuWide,
metadata: RecordMetadata,
) -> Self::Output {
self.visit_unimplemented(metadata)
}
fn visit_namespaces(self, record: Namespaces<'a>, metadata: RecordMetadata) -> Self::Output {
self.visit_unimplemented(metadata)
}
fn visit_ksymbol(self, record: KSymbol<'a>, metadata: RecordMetadata) -> Self::Output {
self.visit_unimplemented(metadata)
}
fn visit_bpf_event(self, record: BpfEvent, metadata: RecordMetadata) -> Self::Output {
self.visit_unimplemented(metadata)
}
fn visit_cgroup(self, record: CGroup<'a>, metadata: RecordMetadata) -> Self::Output {
self.visit_unimplemented(metadata)
}
fn visit_text_poke(self, record: TextPoke<'a>, metadata: RecordMetadata) -> Self::Output {
self.visit_unimplemented(metadata)
}
fn visit_aux_output_hw_id(
self,
record: AuxOutputHwId,
metadata: RecordMetadata,
) -> Self::Output {
self.visit_unimplemented(metadata)
}
fn visit_unknown(self, data: Cow<'a, [u8]>, metadata: RecordMetadata) -> Self::Output {
self.visit_unimplemented(metadata)
}
}