qualia_client_core/
activity_signals.rs1use std::sync::atomic::{AtomicU32, Ordering};
4
5static ONTOLOGY_JOBS_RUNNING: AtomicU32 = AtomicU32::new(0);
6static ONTOLOGY_JOB_PULSE: AtomicU32 = AtomicU32::new(0);
7
8pub fn begin_ontology_job() {
10 ONTOLOGY_JOBS_RUNNING.fetch_add(1, Ordering::Relaxed);
11 ONTOLOGY_JOB_PULSE.fetch_add(1, Ordering::Relaxed);
12}
13
14pub fn end_ontology_job() {
16 ONTOLOGY_JOBS_RUNNING
17 .fetch_update(Ordering::Relaxed, Ordering::Relaxed, |n| {
18 Some(n.saturating_sub(1))
19 })
20 .ok();
21}
22
23pub fn ontology_baking_pressure() -> f32 {
25 let running = ONTOLOGY_JOBS_RUNNING.load(Ordering::Relaxed);
26 let pulse = ONTOLOGY_JOB_PULSE.load(Ordering::Relaxed);
27 if running > 0 {
28 return 1.0;
29 }
30 if pulse == 0 {
31 return 0.0;
32 }
33 let decayed = (pulse as f32 * 0.92).max(0.0) as u32;
35 ONTOLOGY_JOB_PULSE.store(decayed, Ordering::Relaxed);
36 (decayed as f32 / 64.0).min(1.0)
37}