@@ -14,8 +14,7 @@ use crate::util::validate_bpf_ret;
14
14
use crate :: AsRawLibbpf ;
15
15
use crate :: Error ;
16
16
use crate :: ErrorExt as _;
17
- use crate :: Map ;
18
- use crate :: MapCore as _;
17
+ use crate :: MapCore ;
19
18
use crate :: MapType ;
20
19
use crate :: Result ;
21
20
@@ -44,16 +43,22 @@ impl Debug for CbStruct<'_> {
44
43
}
45
44
46
45
/// Builds [`PerfBuffer`] instances.
47
- pub struct PerfBufferBuilder < ' a , ' b > {
48
- map : & ' a Map < ' a > ,
46
+ pub struct PerfBufferBuilder < ' a , ' b , M >
47
+ where
48
+ M : MapCore + AsFd ,
49
+ {
50
+ map : & ' a M ,
49
51
pages : usize ,
50
52
sample_cb : Option < Box < dyn SampleCb + ' b > > ,
51
53
lost_cb : Option < Box < dyn LostCb + ' b > > ,
52
54
}
53
55
54
- impl < ' a > PerfBufferBuilder < ' a , ' _ > {
55
- /// Create a new `PerfBufferBuilder` using the provided `Map`.
56
- pub fn new ( map : & ' a Map < ' a > ) -> Self {
56
+ impl < ' a , M > PerfBufferBuilder < ' a , ' _ , M >
57
+ where
58
+ M : MapCore + AsFd ,
59
+ {
60
+ /// Create a new `PerfBufferBuilder` using the provided `MapCore + AsFd` trait.
61
+ pub fn new ( map : & ' a M ) -> Self {
57
62
Self {
58
63
map,
59
64
pages : 64 ,
@@ -63,14 +68,17 @@ impl<'a> PerfBufferBuilder<'a, '_> {
63
68
}
64
69
}
65
70
66
- impl < ' a , ' b > PerfBufferBuilder < ' a , ' b > {
71
+ impl < ' a , ' b , M > PerfBufferBuilder < ' a , ' b , M >
72
+ where
73
+ M : MapCore + AsFd ,
74
+ {
67
75
/// Callback to run when a sample is received.
68
76
///
69
77
/// This callback provides a raw byte slice. You may find libraries such as
70
78
/// [`plain`](https://crates.io/crates/plain) helpful.
71
79
///
72
80
/// Callback arguments are: `(cpu, data)`.
73
- pub fn sample_cb < NewCb : SampleCb + ' b > ( self , cb : NewCb ) -> PerfBufferBuilder < ' a , ' b > {
81
+ pub fn sample_cb < NewCb : SampleCb + ' b > ( self , cb : NewCb ) -> PerfBufferBuilder < ' a , ' b , M > {
74
82
PerfBufferBuilder {
75
83
map : self . map ,
76
84
pages : self . pages ,
@@ -82,7 +90,7 @@ impl<'a, 'b> PerfBufferBuilder<'a, 'b> {
82
90
/// Callback to run when a sample is received.
83
91
///
84
92
/// Callback arguments are: `(cpu, lost_count)`.
85
- pub fn lost_cb < NewCb : LostCb + ' b > ( self , cb : NewCb ) -> PerfBufferBuilder < ' a , ' b > {
93
+ pub fn lost_cb < NewCb : LostCb + ' b > ( self , cb : NewCb ) -> PerfBufferBuilder < ' a , ' b , M > {
86
94
PerfBufferBuilder {
87
95
map : self . map ,
88
96
pages : self . pages ,
@@ -92,7 +100,7 @@ impl<'a, 'b> PerfBufferBuilder<'a, 'b> {
92
100
}
93
101
94
102
/// The number of pages to size the ring buffer.
95
- pub fn pages ( self , pages : usize ) -> PerfBufferBuilder < ' a , ' b > {
103
+ pub fn pages ( self , pages : usize ) -> PerfBufferBuilder < ' a , ' b , M > {
96
104
PerfBufferBuilder {
97
105
map : self . map ,
98
106
pages,
@@ -164,7 +172,10 @@ impl<'a, 'b> PerfBufferBuilder<'a, 'b> {
164
172
}
165
173
}
166
174
167
- impl Debug for PerfBufferBuilder < ' _ , ' _ > {
175
+ impl < M > Debug for PerfBufferBuilder < ' _ , ' _ , M >
176
+ where
177
+ M : MapCore + AsFd ,
178
+ {
168
179
fn fmt ( & self , f : & mut Formatter < ' _ > ) -> FmtResult {
169
180
let Self {
170
181
map,
@@ -181,7 +192,7 @@ impl Debug for PerfBufferBuilder<'_, '_> {
181
192
}
182
193
}
183
194
184
- /// Represents a special kind of [`Map `]. Typically used to transfer data between
195
+ /// Represents a special kind of [`MapCore `]. Typically used to transfer data between
185
196
/// [`Program`][crate::Program]s and userspace.
186
197
#[ derive( Debug ) ]
187
198
pub struct PerfBuffer < ' b > {
0 commit comments