Skip to content

Commit 544e812

Browse files
committed
Use larger bulk transfers for benchmarking in test_class_host
1 parent 15db9c5 commit 544e812

File tree

1 file changed

+20
-11
lines changed

1 file changed

+20
-11
lines changed

tests/test_class_host/tests.rs

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
use std::fmt::Write;
2-
use std::time::Instant;
2+
use std::time::{Duration, Instant};
33
use libusb::*;
44
use rand::prelude::*;
55
use usb_device::test_class;
66
use crate::device::*;
77

88
pub type TestFn = fn(&mut DeviceHandles, &mut String) -> ();
99

10+
const BENCH_TIMEOUT: Duration = Duration::from_secs(10);
11+
1012
macro_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) {
185187
fn 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) {
195197
fn 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

207209
fn 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

231240
fn random_data(len: usize) -> Vec<u8> {

0 commit comments

Comments
 (0)