makepad/platform/tests/ui_waker_headless.rs
Admin b53ea0b30a platform: macOS display-link, App Nap, waker, IME-adjacent event loop
Squash of 2 work commits (Sep 9–12):
  8d851ef  platform: per-draw alpha blend, macOS waker, texture lifetime, file drop
  cc2fa8f  platform: the Metal display link is gone; the hang line prints its tick deficit; hidden instances refuse App Nap

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-15 13:40:24 +02:00

39 lines
1.2 KiB
Rust

//! First `SignalToUI::set_ui_signal` from a worker in a headless process
//! must not create the platform event loop (on macOS: NSApplication).
//!
//! `Cx::new` installs the real UI waker. Headless tests currently work around
//! this with `install_ui_waker(None)` after `Cx::new`; this test does not.
use std::sync::mpsc;
use std::thread;
use std::time::{Duration, Instant};
use makepad_platform::{Cx, SignalToUI};
#[test]
fn first_set_ui_signal_from_worker_is_under_50ms() {
let _cx = Cx::new(Box::new(|_, _| {}));
let (tx, rx) = mpsc::channel();
thread::spawn(move || {
let start = Instant::now();
SignalToUI::set_ui_signal();
let _ = tx.send(start.elapsed());
});
let elapsed = match rx.recv_timeout(Duration::from_secs(10)) {
Ok(elapsed) => elapsed,
Err(_) => {
println!("first set_ui_signal latency: timed out after 10000.0 ms");
panic!(
"first set_ui_signal from a worker did not return within 10 s"
);
}
};
let ms = elapsed.as_secs_f64() * 1000.0;
println!("first set_ui_signal latency: {ms:.1} ms");
assert!(
ms < 50.0,
"first set_ui_signal from a worker took {ms:.1} ms, expected < 50 ms"
);
}