rustc_data_structures::profiling

Struct SelfProfilerRef

source
pub struct SelfProfilerRef {
    profiler: Option<Arc<SelfProfiler>>,
    event_filter_mask: EventFilter,
    print_verbose_generic_activities: Option<TimePassesFormat>,
}
Expand description

A reference to the SelfProfiler. It can be cloned and sent across thread boundaries at will.

Fields§

§profiler: Option<Arc<SelfProfiler>>§event_filter_mask: EventFilter§print_verbose_generic_activities: Option<TimePassesFormat>

Implementations§

source§

impl SelfProfilerRef

source

pub fn new( profiler: Option<Arc<SelfProfiler>>, print_verbose_generic_activities: Option<TimePassesFormat>, ) -> SelfProfilerRef

source

fn exec<F>(&self, event_filter: EventFilter, f: F) -> TimingGuard<'_>
where F: for<'a> FnOnce(&'a SelfProfiler) -> TimingGuard<'a>,

This shim makes sure that calls only get executed if the filter mask lets them pass. It also contains some trickery to make sure that code is optimized for non-profiling compilation sessions, i.e. anything past the filter check is never inlined so it doesn’t clutter the fast path.

source

pub fn verbose_generic_activity( &self, event_label: &'static str, ) -> VerboseTimingGuard<'_>

Start profiling a verbose generic activity. Profiling continues until the VerboseTimingGuard returned from this call is dropped. In addition to recording a measureme event, “verbose” generic activities also print a timing entry to stderr if the compiler is invoked with -Ztime-passes.

source

pub fn verbose_generic_activity_with_arg<A>( &self, event_label: &'static str, event_arg: A, ) -> VerboseTimingGuard<'_>
where A: Borrow<str> + Into<String>,

Like verbose_generic_activity, but with an extra arg.

source

pub fn generic_activity(&self, event_label: &'static str) -> TimingGuard<'_>

Start profiling a generic activity. Profiling continues until the TimingGuard returned from this call is dropped.

source

pub fn generic_activity_with_event_id( &self, event_id: EventId, ) -> TimingGuard<'_>

Start profiling with some event filter for a given event. Profiling continues until the TimingGuard returned from this call is dropped.

source

pub fn generic_activity_with_arg<A>( &self, event_label: &'static str, event_arg: A, ) -> TimingGuard<'_>
where A: Borrow<str> + Into<String>,

Start profiling a generic activity. Profiling continues until the TimingGuard returned from this call is dropped.

source

pub fn generic_activity_with_arg_recorder<F>( &self, event_label: &'static str, f: F, ) -> TimingGuard<'_>
where F: FnMut(&mut EventArgRecorder<'_>),

Start profiling a generic activity, allowing costly arguments to be recorded. Profiling continues until the TimingGuard returned from this call is dropped.

If the arguments to a generic activity are cheap to create, use generic_activity_with_arg or generic_activity_with_args for their simpler API. However, if they are costly or require allocation in sufficiently hot contexts, then this allows for a closure to be called only when arguments were asked to be recorded via -Z self-profile-events=args.

In this case, the closure will be passed a &mut EventArgRecorder, to help with recording one or many arguments within the generic activity being profiled, by calling its record_arg method for example.

This EventArgRecorder may implement more specific traits from other rustc crates, e.g. for richer handling of rustc-specific argument types, while keeping this single entry-point API for recording arguments.

Note: recording at least one argument is required for the self-profiler to create the TimingGuard. A panic will be triggered if that doesn’t happen. This function exists explicitly to record arguments, so it fails loudly when there are none to record.

source

pub fn artifact_size<A>(&self, artifact_kind: &str, artifact_name: A, size: u64)
where A: Borrow<str> + Into<String>,

Record the size of an artifact that the compiler produces

artifact_kind is the class of artifact (e.g., query_cache, object_file, etc.) artifact_name is an identifier to the specific artifact being stored (usually a filename)

source

pub fn generic_activity_with_args( &self, event_label: &'static str, event_args: &[String], ) -> TimingGuard<'_>

source

pub fn query_provider(&self) -> TimingGuard<'_>

Start profiling a query provider. Profiling continues until the TimingGuard returned from this call is dropped.

source

pub fn query_cache_hit(&self, query_invocation_id: QueryInvocationId)

Record a query in-memory cache hit.

source

pub fn query_blocked(&self) -> TimingGuard<'_>

Start profiling a query being blocked on a concurrent execution. Profiling continues until the TimingGuard returned from this call is dropped.

source

pub fn incr_cache_loading(&self) -> TimingGuard<'_>

Start profiling how long it takes to load a query result from the incremental compilation on-disk cache. Profiling continues until the TimingGuard returned from this call is dropped.

source

pub fn incr_result_hashing(&self) -> TimingGuard<'_>

Start profiling how long it takes to hash query results for incremental compilation. Profiling continues until the TimingGuard returned from this call is dropped.

source

fn instant_query_event( &self, event_kind: fn(_: &SelfProfiler) -> StringId, query_invocation_id: QueryInvocationId, )

source

pub fn with_profiler(&self, f: impl FnOnce(&SelfProfiler))

source

pub fn get_or_alloc_cached_string(&self, s: &str) -> Option<StringId>

Gets a StringId for the given string. This method makes sure that any strings going through it will only be allocated once in the profiling data. Returns None if the self-profiling is not enabled.

source

pub fn enabled(&self) -> bool

source

pub fn llvm_recording_enabled(&self) -> bool

source

pub fn get_self_profiler(&self) -> Option<Arc<SelfProfiler>>

Trait Implementations§

source§

impl Clone for SelfProfilerRef

source§

fn clone(&self) -> SelfProfilerRef

Returns a copy of the value. Read more
source§

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

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Aligned for T

source§

const ALIGN: Alignment = const ALIGN: Alignment = Alignment::of::<Self>();

Alignment of Self.
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, dst: *mut T)

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

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
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.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<'a, T> Captures<'a> for T
where T: ?Sized,

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: 16 bytes