11use std:: fmt:: Write ;
2- use std:: time:: Instant ;
2+ use std:: time:: { Duration , Instant } ;
33use libusb:: * ;
44use rand:: prelude:: * ;
55use usb_device:: test_class;
66use crate :: device:: * ;
77
88pub type TestFn = fn ( & mut DeviceHandles , & mut String ) -> ( ) ;
99
10+ const BENCH_TIMEOUT : Duration = Duration :: from_secs ( 10 ) ;
11+
1012macro_rules! tests {
1113 { $( fn $name: ident( $dev: ident, $out: ident) $body: expr) * } => {
1214 pub fn get_tests( ) -> Vec <( & ' static str , TestFn ) > {
@@ -185,7 +187,7 @@ fn interrupt_loopback(dev, _out) {
185187fn bench_bulk_write( dev, out) {
186188 run_bench( dev, out, |data| {
187189 assert_eq!(
188- dev. write_bulk( 0x01 , data, TIMEOUT )
190+ dev. write_bulk( 0x01 , data, BENCH_TIMEOUT )
189191 . expect( "bulk write" ) ,
190192 data. len( ) ,
191193 "bulk write" ) ;
@@ -195,7 +197,7 @@ fn bench_bulk_write(dev, out) {
195197fn bench_bulk_read( dev, out) {
196198 run_bench( dev, out, |data| {
197199 assert_eq!(
198- dev. read_bulk( 0x81 , data, TIMEOUT )
200+ dev. read_bulk( 0x81 , data, BENCH_TIMEOUT )
199201 . expect( "bulk read" ) ,
200202 data. len( ) ,
201203 "bulk read" ) ;
@@ -205,27 +207,34 @@ fn bench_bulk_read(dev, out) {
205207}
206208
207209fn run_bench ( dev : & DeviceHandles , out : & mut String , f : impl Fn ( & mut [ u8 ] ) -> ( ) ) {
208- const PACKET_LEN : usize = 64 ;
209- const PACKETS : usize = 1_500_000 / PACKET_LEN ;
210+ const TRANSFER_BYTES : usize = 64 * 1024 ;
211+ const TRANSFERS : usize = 16 ;
212+ const TOTAL_BYTES : usize = TRANSFER_BYTES * TRANSFERS ;
210213
211214 dev. write_control (
212215 request_type ( Direction :: Out , RequestType :: Vendor , Recipient :: Device ) ,
213216 test_class:: REQ_SET_BENCH_ENABLED , 1 , 0 ,
214217 & [ ] , TIMEOUT ) . expect ( "enable bench mode" ) ;
215218
216- let mut data = random_data ( PACKET_LEN ) ;
219+ let mut data = random_data ( TRANSFER_BYTES ) ;
217220
218221 let start = Instant :: now ( ) ;
219- for _ in 0 ..PACKETS {
222+
223+ for _ in 0 ..TRANSFERS {
220224 f ( & mut data) ;
221225 }
222226
223227 let elapsed = start. elapsed ( ) ;
224228 let elapsed = elapsed. as_secs ( ) as f64 + ( elapsed. subsec_micros ( ) as f64 ) * 0.000_001 ;
225- let throughput = ( PACKETS * PACKET_LEN * 8 ) as f64 / 1_000_000.0 / elapsed;
226-
227- writeln ! ( out, " {} packets in {:.3}s -> {:.3}Mbit/s" , PACKETS , elapsed, throughput)
228- . expect ( "write failed" ) ;
229+ let throughput = ( TOTAL_BYTES * 8 ) as f64 / 1_000_000.0 / elapsed;
230+
231+ writeln ! (
232+ out,
233+ " {} transfers of {} bytes in {:.3}s -> {:.3}Mbit/s" ,
234+ TRANSFERS ,
235+ TRANSFER_BYTES ,
236+ elapsed,
237+ throughput) . expect ( "write failed" ) ;
229238}
230239
231240fn random_data ( len : usize ) -> Vec < u8 > {
0 commit comments