#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct TimerManager
{
timerResolutionCycles: u64,
previousTsc: u64,
}
impl TimerManager
{
pub const AroundTenMillisecondsAt2GigaHertz: u64 = 20000000;
#[inline(always)]
pub fn initialiseSubsystem()
{
unsafe { ::dpdk_sys::rte_timer_subsystem_init() }
}
#[inline(always)]
pub fn new(timerResolutionCycles: u64) -> TimerManager
{
TimerManager
{
timerResolutionCycles: timerResolutionCycles,
previousTsc: getRdtsc(),
}
}
#[inline(always)]
pub fn runAllExpiredTimers(&mut self)
{
let currentTsc = getRdtsc();
if currentTsc - self.previousTsc > self.timerResolutionCycles
{
unsafe { ::dpdk_sys::rte_timer_manage() };
self.previousTsc = currentTsc;
}
}
#[inline(always)]
pub fn dumpStatisticsToStandardError()
{
unsafe { ::dpdk_sys::rte_timer_dump_stats(stderr as *mut FILE) }
}
}
impl Default for TimerManager
{
fn default() -> Self
{
TimerManager::new(Self::AroundTenMillisecondsAt2GigaHertz)
}
}