use agg_gui::animation::{
async_state_epoch, clear_draw_request, invalidation_epoch, signal_async_state_change,
wants_draw,
};
#[test]
fn signal_async_state_change_propagates_across_threads() {
clear_draw_request();
let before_epoch = invalidation_epoch();
let before_async = async_state_epoch();
assert!(
!wants_draw(),
"baseline: wants_draw must be false after clear_draw_request"
);
std::thread::spawn(|| {
signal_async_state_change();
})
.join()
.expect("worker thread joined");
assert!(
invalidation_epoch() != before_epoch,
"invalidation_epoch must change after a worker-thread \
signal_async_state_change (render_app_frame's layout-key cache \
depends on this epoch to re-run layout)"
);
assert!(
async_state_epoch() != before_async,
"async_state_epoch must change after a worker-thread \
signal_async_state_change (retained backbuffer caches gate \
re-raster on this epoch)"
);
assert!(
wants_draw(),
"wants_draw must return true after a worker-thread \
signal_async_state_change so the host event loop schedules a frame"
);
}