use ascom_alpaca::api::TypedDevice;
use ascom_alpaca::Client;
use criterion::{criterion_group, criterion_main, Criterion};
use eyre::ContextCompat;
use std::time::Duration;
fn download_image_array(c: &mut Criterion) {
c.bench_function("download_image_array", |b| {
let runtime = tokio::runtime::Runtime::new().unwrap();
let camera = runtime
.block_on(async move {
let client = Client::new("http://localhost:32323/")?;
let camera = client
.get_devices()
.await?
.find_map(|device| match device {
TypedDevice::Camera(camera) => Some(camera),
#[allow(unreachable_patterns)]
_ => None,
})
.context("No camera found")?;
camera.set_connected(true).await?;
camera.start_exposure(0.001, true).await?;
loop {
tokio::time::sleep(Duration::from_millis(100)).await;
if camera.image_ready().await? {
break;
}
}
Ok::<_, eyre::Error>(camera)
})
.expect("Failed to capture a test image");
b.to_async(runtime)
.iter_with_large_drop(|| async { camera.image_array().await.unwrap() });
});
}
criterion_group!(benches, download_image_array);
criterion_main!(benches);