|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| #![cfg(target_os = "android")]
|
|
|
| use android_activity::{AndroidApp, MainEvent, PollEvent};
|
|
|
| #[unsafe(no_mangle)]
|
| fn android_main(app: AndroidApp) {
|
| android_logger::init_once(
|
| android_logger::Config::default()
|
| .with_max_level(log::LevelFilter::Info)
|
| .with_tag("dinovision"),
|
| );
|
|
|
|
|
|
|
| std::panic::set_hook(Box::new(|info| {
|
| log::error!("panic: {info}");
|
| }));
|
|
|
| log::info!("=== dinovision benchmark ===");
|
| match std::panic::catch_unwind(run) {
|
| Ok(()) => log::info!("=== benchmark complete ==="),
|
| Err(_) => log::error!("=== benchmark aborted ==="),
|
| }
|
|
|
|
|
|
|
| loop {
|
| app.poll_events(Some(std::time::Duration::from_millis(500)), |event| {
|
| if let PollEvent::Main(MainEvent::Destroy) = event {
|
| std::process::exit(0);
|
| }
|
| });
|
| }
|
| }
|
|
|
| fn run() {
|
| let gpu = match dinovision::init_context(None) {
|
| Ok(gpu) => gpu,
|
| Err(e) => {
|
| log::error!("GPU context init failed: {e:?}");
|
| return;
|
| }
|
| };
|
|
|
| let iters = std::env::var("DINOVISION_ITERS") |
| .ok() |
| .and_then(|s| s.parse::<usize>().ok()) |
| .unwrap_or(20); |
| log::info!( |
| "timing protocol: {} warmups, {iters} retained samples", |
| std::env::var("DINOVISION_WARMUPS").unwrap_or_else(|_| "5".into()) |
| ); |
| let results = dinovision::bench::run_all(gpu, iters); |
|
|
| log::info!("---- summary ----");
|
| for t in &results { |
| log::info!("{t}"); |
| log::info!("DINOVISION_BENCH_JSON {}", t.json_line()); |
| } |
| } |
|
|