Function spectrusty_core::chip::nanos_from_frame_tc_cpu_hz
source · Expand description
Returns the number of nanoseconds from the number of T-states in a single frame and a CPU clock rate.
Examples found in repository?
src/chip.rs (line 180)
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228
fn effective_frame_duration_nanos(multiplier: f64) -> u32 {
let cpu_rate = Self::effective_cpu_rate(multiplier).round() as u32;
nanos_from_frame_tc_cpu_hz(Self::FRAME_TSTATES as u32, cpu_rate) as u32
}
/// Returns the duration of a single execution frame after multiplying the CPU rate by
/// the `multiplier`.
#[inline]
fn effective_frame_duration(multiplier: f64) -> Duration {
let cpu_rate = Self::effective_cpu_rate(multiplier).round() as u32;
duration_from_frame_tc_cpu_hz(Self::FRAME_TSTATES as u32, cpu_rate)
}
/// Returns the duration of a single execution frame in nanoseconds.
#[inline]
fn frame_duration_nanos() -> u32 {
nanos_from_frame_tc_cpu_hz(Self::FRAME_TSTATES as u32, Self::CPU_HZ) as u32
}
/// Returns the duration of a single execution frame.
#[inline]
fn frame_duration() -> Duration {
duration_from_frame_tc_cpu_hz(Self::FRAME_TSTATES as u32, Self::CPU_HZ)
}
}
/// A generic trait, useful for chipset implementations based on other underlying implementations.
pub trait InnerAccess {
type Inner;
/// Returns a reference to the inner chipset.
fn inner_ref(&self) -> &Self::Inner;
/// Returns a mutable reference to the inner chipset.
fn inner_mut(&mut self) -> &mut Self::Inner;
/// Destructs `self` and returns the inner chipset.
fn into_inner(self) -> Self::Inner;
}
// pub const fn duration_from_frame_time(frame_time: f64) -> std::time::Duration {
// const NANOS_PER_SEC: f64 = 1_000_000_000.0;
// let nanos: u64 = (frame_time * NANOS_PER_SEC) as u64;
// std::time::Duration::from_nanos(nanos)
// }
/// Returns the number of nanoseconds from the number of T-states in a single frame and a CPU clock rate.
pub const fn nanos_from_frame_tc_cpu_hz(frame_ts_count: u32, cpu_hz: u32) -> u64 {
const NANOS_PER_SEC: u64 = 1_000_000_000;
frame_ts_count as u64 * NANOS_PER_SEC / cpu_hz as u64
}
/// Returns a duration from the number of T-states in a single frame and a CPU clock rate.
pub const fn duration_from_frame_tc_cpu_hz(frame_ts_count: u32, cpu_hz: u32) -> Duration {
let nanos = nanos_from_frame_tc_cpu_hz(frame_ts_count, cpu_hz);
Duration::from_nanos(nanos)
}