use super::{Driver, Shard};
use crate::rt::counters::Published;
impl Driver {
pub(super) fn backend(&self) -> crate::IoBackend {
match self {
Driver::Poll(_) => crate::proactor::POLLER,
#[cfg(ring)]
Driver::Ring(_) => crate::IoBackend::IoUring,
}
}
}
impl Shard {
#[cfg(test)]
pub(crate) fn publish_now(&self) {
self.count_again(self.since_drive.get());
self.publish();
}
pub(super) fn slept_for(&self, slept: std::time::Duration) {
self.sleeps.set(self.sleeps.get() + 1);
self.slept.set(self.slept.get() + slept);
self.spin.parked_for(slept);
}
pub(super) fn publish(&self) {
let (ops_in_flight, cq_overflows) = match &self.driver {
#[cfg(ring)]
Driver::Ring(ring) => (ring.in_flight(), ring.overflows()),
#[cfg(readiness)]
Driver::Poll(_) => (0, 0),
#[cfg(port)]
Driver::Poll(_) => (self.shared.port.out(), 0),
};
self.shared.counters.publish(Published {
polls: self.polls.get(),
parks: self.sleeps.get(),
parked: self.slept.get(),
queue_depth: self.queued(),
remote_wakes: self.remote_wakes.get(),
timers: self.wheel.borrow().armed(),
buffer_bytes: self.pool.charged(),
buffer_exhausted: self.pool.exhausted(),
ops_in_flight,
cq_overflows,
});
}
}