11use commonware_actor:: { mailbox, Feedback } ;
2+ use commonware_runtime:: {
3+ telemetry:: metrics:: { Metric , Registered , Registration } ,
4+ Metrics , Name , Supervisor ,
5+ } ;
26use commonware_utils:: NZUsize ;
37use criterion:: { criterion_group, BatchSize , Criterion , Throughput } ;
48use futures:: pin_mut;
@@ -15,6 +19,44 @@ const PRODUCERS: usize = 4;
1519const PRODUCER_MESSAGES : usize = 16 * 1024 ;
1620const REPLACE_CAPACITY : usize = 1024 ;
1721
22+ #[ derive( Clone , Copy , Debug , Default ) ]
23+ struct NoopMetrics ;
24+
25+ impl Supervisor for NoopMetrics {
26+ fn name ( & self ) -> Name {
27+ Name :: default ( )
28+ }
29+
30+ fn child ( & self , _label : & ' static str ) -> Self {
31+ Self
32+ }
33+
34+ fn with_attribute ( self , _key : & ' static str , _value : impl std:: fmt:: Display ) -> Self {
35+ self
36+ }
37+ }
38+
39+ impl Metrics for NoopMetrics {
40+ fn register < N : Into < String > , H : Into < String > , M : Metric > (
41+ & self ,
42+ _name : N ,
43+ _help : H ,
44+ metric : M ,
45+ ) -> Registered < M > {
46+ Registered :: with_registration ( metric, Registration :: from ( ( ) ) )
47+ }
48+
49+ fn encode ( & self ) -> String {
50+ String :: new ( )
51+ }
52+ }
53+
54+ fn new < T : mailbox:: Policy > (
55+ capacity : std:: num:: NonZeroUsize ,
56+ ) -> ( mailbox:: Sender < T > , mailbox:: Receiver < T > ) {
57+ mailbox:: new ( NoopMetrics , capacity)
58+ }
59+
1860#[ derive( Clone , Copy , Debug , PartialEq , Eq ) ]
1961enum Policy {
2062 Drop ,
@@ -77,7 +119,7 @@ fn bench_enqueue_ready(c: &mut Criterion) {
77119
78120 group. bench_function ( format ! ( "capacity={CAPACITY}" ) , |b| {
79121 b. iter_batched (
80- || mailbox :: new :: < Message > ( NZUsize ! ( CAPACITY ) ) ,
122+ || new :: < Message > ( NZUsize ! ( CAPACITY ) ) ,
81123 |( sender, _receiver) | {
82124 for _ in 0 ..MESSAGES {
83125 let result = sender. enqueue ( black_box ( Message :: drop ( ) ) ) ;
@@ -99,7 +141,7 @@ fn bench_try_recv_ready(c: &mut Criterion) {
99141 group. bench_function ( format ! ( "capacity={CAPACITY}" ) , |b| {
100142 b. iter_batched (
101143 || {
102- let ( sender, receiver) = mailbox :: new :: < Message > ( NZUsize ! ( CAPACITY ) ) ;
144+ let ( sender, receiver) = new :: < Message > ( NZUsize ! ( CAPACITY ) ) ;
103145 for _ in 0 ..MESSAGES {
104146 assert_eq ! ( sender. enqueue( Message :: drop( ) ) , Feedback :: Ok ) ;
105147 }
@@ -124,7 +166,7 @@ fn bench_try_recv_overflow(c: &mut Criterion) {
124166 group. bench_function ( format ! ( "capacity={CAPACITY} overflow={MESSAGES}" ) , |b| {
125167 b. iter_batched (
126168 || {
127- let ( sender, receiver) = mailbox :: new :: < Message > ( NZUsize ! ( CAPACITY ) ) ;
169+ let ( sender, receiver) = new :: < Message > ( NZUsize ! ( CAPACITY ) ) ;
128170 for _ in 0 ..CAPACITY {
129171 assert_eq ! ( sender. enqueue( Message :: drop( ) ) , Feedback :: Ok ) ;
130172 }
@@ -151,7 +193,7 @@ fn bench_round_trip_ready(c: &mut Criterion) {
151193
152194 group. bench_function ( format ! ( "capacity={CAPACITY}" ) , |b| {
153195 b. iter_batched (
154- || mailbox :: new :: < Message > ( NZUsize ! ( CAPACITY ) ) ,
196+ || new :: < Message > ( NZUsize ! ( CAPACITY ) ) ,
155197 |( sender, mut receiver) | {
156198 for _ in 0 ..MESSAGES {
157199 let result = sender. enqueue ( black_box ( Message :: drop ( ) ) ) ;
@@ -173,7 +215,7 @@ fn bench_recv_waiting(c: &mut Criterion) {
173215
174216 group. bench_function ( "capacity=1" , |b| {
175217 b. iter_batched (
176- || mailbox :: new :: < Message > ( NZUsize ! ( 1 ) ) ,
218+ || new :: < Message > ( NZUsize ! ( 1 ) ) ,
177219 |( sender, mut receiver) | {
178220 futures:: executor:: block_on ( async {
179221 for _ in 0 ..MESSAGES {
@@ -207,7 +249,7 @@ fn bench_overflow_drop(c: &mut Criterion) {
207249 group. bench_function ( "capacity=1" , |b| {
208250 b. iter_batched (
209251 || {
210- let ( sender, receiver) = mailbox :: new :: < Message > ( NZUsize ! ( 1 ) ) ;
252+ let ( sender, receiver) = new :: < Message > ( NZUsize ! ( 1 ) ) ;
211253 assert_eq ! ( sender. enqueue( Message :: drop( ) ) , Feedback :: Ok ) ;
212254 ( sender, receiver)
213255 } ,
@@ -232,7 +274,7 @@ fn bench_overflow_spill(c: &mut Criterion) {
232274 group. bench_function ( "capacity=1" , |b| {
233275 b. iter_batched (
234276 || {
235- let ( sender, receiver) = mailbox :: new :: < Message > ( NZUsize ! ( 1 ) ) ;
277+ let ( sender, receiver) = new :: < Message > ( NZUsize ! ( 1 ) ) ;
236278 assert_eq ! ( sender. enqueue( Message :: drop( ) ) , Feedback :: Ok ) ;
237279 ( sender, receiver)
238280 } ,
@@ -251,7 +293,7 @@ fn bench_overflow_spill(c: &mut Criterion) {
251293}
252294
253295fn replace_queue ( newest : bool ) -> ( mailbox:: Sender < Message > , mailbox:: Receiver < Message > ) {
254- let ( sender, receiver) = mailbox :: new :: < Message > ( NZUsize ! ( REPLACE_CAPACITY ) ) ;
296+ let ( sender, receiver) = new :: < Message > ( NZUsize ! ( REPLACE_CAPACITY ) ) ;
255297
256298 for _ in 0 ..REPLACE_CAPACITY {
257299 assert_eq ! ( sender. enqueue( Message :: drop( ) ) , Feedback :: Ok ) ;
@@ -300,7 +342,7 @@ fn bench_concurrent_enqueue(c: &mut Criterion) {
300342
301343 group. bench_function ( format ! ( "producers={PRODUCERS} capacity={total}" ) , |b| {
302344 b. iter ( || {
303- let ( sender, _receiver) = mailbox :: new :: < Message > ( NZUsize ! ( total) ) ;
345+ let ( sender, _receiver) = new :: < Message > ( NZUsize ! ( total) ) ;
304346
305347 std:: thread:: scope ( |scope| {
306348 for _ in 0 ..PRODUCERS {
0 commit comments