Skip to main content

MixTrace

Struct MixTrace 

Source
pub struct MixTrace { /* private fields */ }
Expand description

One frame’s worth of per-CPU-cycle mix records.

The index is the cycle offset from Self::first_cycle, so no per-record timestamp is stored — that is what keeps the record at 16 bytes.

Two different numbers follow from that, and the first draft of this comment conflated them. An NTSC frame of 29,781 records is ~465 KiB; the allocation is MIX_CAP records reserved up front, which is 576 KiB, because the cap is sized from Dendy (the longest frame) rather than from NTSC. The buffer is therefore always the worst case, never the typical one.

Implementations§

Source§

impl MixTrace

Source

pub fn new() -> Self

An empty trace with capacity for the worst-case region.

Source

pub fn clear(&mut self, first_cycle: u64)

Drop every record and re-anchor the trace at first_cycle.

Source

pub fn push(&mut self, rec: MixRecord)

Append one mixed cycle. Beyond MIX_CAP the record is dropped and the trace is flagged Self::truncated.

Source

pub const fn first_cycle(&self) -> u64

CPU cycle the first record corresponds to.

Source

pub const fn truncated(&self) -> bool

Whether records were dropped for exceeding MIX_CAP.

Source

pub fn records(&self) -> &[MixRecord]

Every record, oldest first.

Source

pub fn at_cycle(&self, cycle: u64) -> Option<MixRecord>

The record for absolute CPU cycle, or None if it is outside the trace.

Trait Implementations§

Source§

impl Clone for MixTrace

Source§

fn clone(&self) -> MixTrace

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MixTrace

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for MixTrace

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.