#![cfg(feature = "webgpu")]
use rlx_runtime::{Device, Session, device_ext};
#[path = "../src/vision/mod.rs"]
#[allow(dead_code)]
mod vision;
#[test]
fn report_host_steps_per_model_on_webgpu() {
if !device_ext::is_available(Device::WebGpu) {
eprintln!("no wgpu adapter — skipping");
return;
}
let mut trainable = Vec::new();
let mut hosted = Vec::new();
for &id in vision::VisionModelId::all() {
let graph = vision::build_train(id, 1);
let compiled = Session::new(Device::WebGpu).compile(graph);
match compiled.host_execution_summary() {
None => {
eprintln!("{:>10}: entirely on device", id.slug());
trainable.push(id.slug());
}
Some(summary) => {
eprintln!("{:>10}: {summary}", id.slug());
hosted.push(id.slug());
}
}
}
eprintln!("\nbrowser-WebGPU trainable: {trainable:?}\nfalls back to CPU: {hosted:?}");
assert!(
trainable.contains(&"mnist-mlp"),
"mnist-mlp should run entirely on device"
);
}