@@ -45,43 +45,138 @@ mod benchmarks {
4545 /// The message will be added on a new page and also, the `BookState` will be added
4646 /// to the ready ring.
4747 #[ benchmark]
48- fn enqueue_n_bytes_xcmp_message ( n : Linear < 1 , { MaxXcmpMessageLenOf :: < T > :: get ( ) } > ) {
48+ fn enqueue_n_bytes_xcmp_message ( n : Linear < 0 , { MaxXcmpMessageLenOf :: < T > :: get ( ) } > ) {
4949 #[ cfg( test) ]
5050 {
5151 mock:: EnqueuedMessages :: set ( vec ! [ ] ) ;
5252 }
5353
54- let msg = BoundedVec :: < u8 , MaxXcmpMessageLenOf < T > > :: try_from ( vec ! [ 0 ; n as usize ] ) . unwrap ( ) ;
54+ let msg = BoundedVec :: try_from ( vec ! [ 0 ; n as usize ] ) . unwrap ( ) ;
55+
56+ #[ cfg( not( test) ) ]
5557 let fp_before = T :: XcmpQueue :: footprint ( 0 . into ( ) ) ;
5658 #[ block]
5759 {
58- assert_ok ! ( Pallet :: <T >:: enqueue_xcmp_message( 0 . into( ) , msg) ) ;
60+ assert_ok ! ( Pallet :: <T >:: enqueue_xcmp_messages(
61+ 0 . into( ) ,
62+ & [ msg] ,
63+ & mut WeightMeter :: new( )
64+ ) ) ;
65+ }
66+ #[ cfg( not( test) ) ]
67+ {
68+ let fp_after = T :: XcmpQueue :: footprint ( 0 . into ( ) ) ;
69+ assert_eq ! ( fp_after. ready_pages, fp_before. ready_pages + 1 ) ;
5970 }
60- let fp_after = T :: XcmpQueue :: footprint ( 0 . into ( ) ) ;
61- assert_eq ! ( fp_after. ready_pages, fp_before. ready_pages + 1 ) ;
6271 }
6372
64- /// Add 2 XCMP message of 0 bytes to the message queue.
73+ /// Add `n` XCMP message of 0 bytes to the message queue.
6574 ///
6675 /// Only for the first message a new page will be created and the `BookState` will be added
6776 /// to the ready ring.
6877 #[ benchmark]
69- fn enqueue_2_empty_xcmp_messages ( ) {
78+ fn enqueue_n_empty_xcmp_messages ( n : Linear < 0 , 1000 > ) {
79+ #[ cfg( test) ]
80+ {
81+ mock:: EnqueuedMessages :: set ( vec ! [ ] ) ;
82+ <QueueConfig < T > >:: set ( QueueConfigData {
83+ suspend_threshold : 1100 ,
84+ drop_threshold : 1100 ,
85+ resume_threshold : 1100 ,
86+ } ) ;
87+ }
88+
89+ let msgs = vec ! [ Default :: default ( ) ; n as usize ] ;
90+
91+ #[ cfg( not( test) ) ]
92+ let fp_before = T :: XcmpQueue :: footprint ( 0 . into ( ) ) ;
93+ #[ block]
94+ {
95+ assert_ok ! ( Pallet :: <T >:: enqueue_xcmp_messages(
96+ 0 . into( ) ,
97+ & msgs,
98+ & mut WeightMeter :: new( )
99+ ) ) ;
100+ }
101+ #[ cfg( not( test) ) ]
102+ {
103+ let fp_after = T :: XcmpQueue :: footprint ( 0 . into ( ) ) ;
104+ if !msgs. is_empty ( ) {
105+ assert_eq ! ( fp_after. ready_pages, fp_before. ready_pages + 1 ) ;
106+ }
107+ }
108+ }
109+
110+ /// Add `n` pages to the message queue.
111+ ///
112+ /// We add one page by enqueueing a maximal size message which fills it.
113+ #[ benchmark]
114+ fn enqueue_n_full_pages ( n : Linear < 0 , 100 > ) {
70115 #[ cfg( test) ]
71116 {
72117 mock:: EnqueuedMessages :: set ( vec ! [ ] ) ;
73118 }
119+ <QueueConfig < T > >:: set ( QueueConfigData {
120+ suspend_threshold : 200 ,
121+ drop_threshold : 200 ,
122+ resume_threshold : 200 ,
123+ } ) ;
74124
75- let msg_1 = BoundedVec :: < u8 , MaxXcmpMessageLenOf < T > > :: default ( ) ;
76- let msg_2 = BoundedVec :: < u8 , MaxXcmpMessageLenOf < T > > :: default ( ) ;
125+ let max_msg_len = MaxXcmpMessageLenOf :: < T > :: get ( ) as usize ;
126+ let mut msgs = vec ! [ ] ;
127+ for _i in 0 ..n {
128+ let msg = BoundedVec :: try_from ( vec ! [ 0 ; max_msg_len] ) . unwrap ( ) ;
129+ msgs. push ( msg) ;
130+ }
131+
132+ #[ cfg( not( test) ) ]
77133 let fp_before = T :: XcmpQueue :: footprint ( 0 . into ( ) ) ;
78134 #[ block]
79135 {
80- assert_ok ! ( Pallet :: <T >:: enqueue_xcmp_message( 0 . into( ) , msg_1) ) ;
81- assert_ok ! ( Pallet :: <T >:: enqueue_xcmp_message( 0 . into( ) , msg_2) ) ;
136+ assert_ok ! ( Pallet :: <T >:: enqueue_xcmp_messages(
137+ 0 . into( ) ,
138+ & msgs,
139+ & mut WeightMeter :: new( )
140+ ) ) ;
141+ }
142+ #[ cfg( not( test) ) ]
143+ {
144+ let fp_after = T :: XcmpQueue :: footprint ( 0 . into ( ) ) ;
145+ assert_eq ! ( fp_after. ready_pages, fp_before. ready_pages + n) ;
146+ }
147+ }
148+
149+ #[ benchmark]
150+ fn enqueue_1000_small_xcmp_messages ( ) {
151+ #[ cfg( test) ]
152+ {
153+ <QueueConfig < T > >:: set ( QueueConfigData {
154+ suspend_threshold : 1100 ,
155+ drop_threshold : 1100 ,
156+ resume_threshold : 1100 ,
157+ } ) ;
158+ }
159+
160+ let mut msgs = vec ! [ ] ;
161+ for _i in 0 ..1000 {
162+ msgs. push ( BoundedVec :: try_from ( vec ! [ 0 ; 3 ] ) . unwrap ( ) ) ;
163+ }
164+
165+ #[ cfg( not( test) ) ]
166+ let fp_before = T :: XcmpQueue :: footprint ( 0 . into ( ) ) ;
167+ #[ block]
168+ {
169+ assert_ok ! ( Pallet :: <T >:: enqueue_xcmp_messages(
170+ 0 . into( ) ,
171+ & msgs,
172+ & mut WeightMeter :: new( )
173+ ) ) ;
174+ }
175+ #[ cfg( not( test) ) ]
176+ {
177+ let fp_after = T :: XcmpQueue :: footprint ( 0 . into ( ) ) ;
178+ assert_eq ! ( fp_after. ready_pages, fp_before. ready_pages + 1 ) ;
82179 }
83- let fp_after = T :: XcmpQueue :: footprint ( 0 . into ( ) ) ;
84- assert_eq ! ( fp_after. ready_pages, fp_before. ready_pages + 1 ) ;
85180 }
86181
87182 #[ benchmark]
0 commit comments