use super::runtime::{self, with_rt};
pub struct DrawPhase(());
impl Drop for DrawPhase {
fn drop(&mut self) {
runtime::exit_draw_phase();
}
}
pub fn enter_draw_phase() -> DrawPhase {
with_rt(|rt| rt.draw_depth += 1);
DrawPhase(())
}
pub(crate) fn record_worker_failure(message: String) {
with_rt(|rt| rt.worker_failures.push(message));
}
pub fn take_worker_failures() -> Vec<String> {
with_rt(|rt| std::mem::take(&mut rt.worker_failures))
}
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct Diagnostics {
pub draw_read_violations: u64,
pub draw_read_samples: Vec<String>,
pub pending_worker_failures: usize,
}
pub fn diagnostics() -> Diagnostics {
with_rt(|rt| Diagnostics {
draw_read_violations: rt.draw_read_violations,
draw_read_samples: rt.draw_read_samples.clone(),
pending_worker_failures: rt.worker_failures.len(),
})
}