pub(crate) struct ReadsRecorder {
reads: Vec<DepNodeIndex>,
epochs: IndexVec<DepNodeIndex, u8>,
epoch: u8,
}Expand description
Records the reads of a task with many reads.
Recorders are pooled globally, reusing the read list and epoch filter allocations across tasks.
Fields§
§reads: Vec<DepNodeIndex>The deduplicated reads, in first-read order.
epochs: IndexVec<DepNodeIndex, u8>Seen-before filter: a slot counts as seen only while it holds epoch.
epoch: u8Implementations§
Source§impl ReadsRecorder
impl ReadsRecorder
Sourcefn seed(&mut self, reads: &[DepNodeIndex])
fn seed(&mut self, reads: &[DepNodeIndex])
Seeds a fresh recorder with reads that are already known to be distinct.
Sourcefn insert(&mut self, index: DepNodeIndex) -> bool
fn insert(&mut self, index: DepNodeIndex) -> bool
Records a read of index and returns whether it was new for the current task.
Sourcefn slot(&mut self, index: DepNodeIndex) -> &mut u8
fn slot(&mut self, index: DepNodeIndex) -> &mut u8
The epoch slot for index, growing the filter (with slack) to cover it.
Sourcefn clear(&mut self)
fn clear(&mut self)
Prepares the recorder for a new task, keeping the backing allocations. Bumping the epoch invalidates every slot at once; on wraparound the slots are zeroed.
Sourcepub(crate) fn release(self, pool: &Lock<Vec<ReadsRecorder>>)
pub(crate) fn release(self, pool: &Lock<Vec<ReadsRecorder>>)
Returns a finished task’s recorder to the pool. The cap keeps deeply nested tasks from growing the pool without bound.
Trait Implementations§
Source§impl Debug for ReadsRecorder
impl Debug for ReadsRecorder
Source§impl Default for ReadsRecorder
impl Default for ReadsRecorder
Source§fn default() -> ReadsRecorder
fn default() -> ReadsRecorder
Auto Trait Implementations§
impl DynSend for ReadsRecorder
impl DynSync for ReadsRecorder
impl Freeze for ReadsRecorder
impl RefUnwindSafe for ReadsRecorder
impl Send for ReadsRecorder
impl Sync for ReadsRecorder
impl Unpin for ReadsRecorder
impl UnsafeUnpin for ReadsRecorder
impl UnwindSafe for ReadsRecorder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<K> IntoQueryKey<K> for K
impl<K> IntoQueryKey<K> for K
Source§fn into_query_key(self) -> K
fn into_query_key(self) -> K
Self to K.
This should always be a very cheap conversion, e.g. LocalDefId::to_def_id.Source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
Source§fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 56 bytes