micromegas_tracing/event/
block.rs1use crate::dyn_deps::DynDeps;
2use crate::prelude::*;
3
4#[derive(Debug)]
6pub struct EventBlock<Q: ExtractDeps> {
7 pub process_id: uuid::Uuid,
8 pub stream_id: uuid::Uuid,
9 pub begin: DualTime,
10 pub events: Q,
11 pub end: Option<DualTime>,
12 pub event_offset: usize,
13 pub dyn_deps: DynDeps<Q::DepsQueue>,
16}
17
18impl<Q> EventBlock<Q>
19where
20 Q: micromegas_transit::HeterogeneousQueue + ExtractDeps,
21{
22 pub fn close(&mut self) {
23 self.end = Some(DualTime::now());
24 }
25
26 pub fn close_at(&mut self, end: DualTime) {
33 self.end = Some(end);
34 }
35}
36
37pub trait ExtractDeps {
39 type DepsQueue: micromegas_transit::HeterogeneousQueue;
40 fn extract(&self, dyn_deps: &DynDeps<Self::DepsQueue>) -> Self::DepsQueue;
43}
44
45pub trait TracingBlock {
47 type Queue: ExtractDeps;
48
49 fn new(
50 buffer_size: usize,
51 process_id: uuid::Uuid,
52 stream_id: uuid::Uuid,
53 object_offset: usize,
54 ) -> Self;
55 fn len_bytes(&self) -> usize;
56 fn capacity_bytes(&self) -> usize;
57 fn nb_objects(&self) -> usize;
58 fn object_offset(&self) -> usize;
59 fn events_mut(&mut self) -> &mut Self::Queue;
60 fn hint_max_obj_size(&self) -> usize {
61 128
63 }
64}
65
66impl<Q> TracingBlock for EventBlock<Q>
67where
68 Q: micromegas_transit::HeterogeneousQueue + ExtractDeps,
69{
70 type Queue = Q;
71 fn new(
72 buffer_size: usize,
73 process_id: uuid::Uuid,
74 stream_id: uuid::Uuid,
75 event_offset: usize,
76 ) -> Self {
77 Self {
78 process_id,
79 stream_id,
80 begin: DualTime::now(),
81 events: Q::new(buffer_size),
82 end: None,
83 event_offset,
84 dyn_deps: DynDeps::new(),
85 }
86 }
87
88 fn len_bytes(&self) -> usize {
89 self.events.len_bytes() + self.dyn_deps.len_bytes()
90 }
91
92 fn capacity_bytes(&self) -> usize {
93 self.events.capacity_bytes()
94 }
95
96 fn nb_objects(&self) -> usize {
97 self.events.nb_objects()
98 }
99
100 fn object_offset(&self) -> usize {
101 self.event_offset
102 }
103
104 fn events_mut(&mut self) -> &mut Self::Queue {
105 &mut self.events
106 }
107}