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
impl SelfProfilerRef
pub fn new( profiler: Option<Arc<SelfProfiler>>, print_verbose_generic_activities: Option<TimePassesFormat>, ) -> SelfProfilerRef
sourcefn exec<F>(&self, event_filter: EventFilter, f: F) -> TimingGuard<'_>
fn exec<F>(&self, event_filter: EventFilter, f: F) -> TimingGuard<'_>
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.
sourcepub fn verbose_generic_activity(
&self,
event_label: &'static str,
) -> VerboseTimingGuard<'_>
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.
sourcepub fn verbose_generic_activity_with_arg<A>(
&self,
event_label: &'static str,
event_arg: A,
) -> VerboseTimingGuard<'_>
pub fn verbose_generic_activity_with_arg<A>( &self, event_label: &'static str, event_arg: A, ) -> VerboseTimingGuard<'_>
Like verbose_generic_activity
, but with an extra arg.
sourcepub fn generic_activity(&self, event_label: &'static str) -> TimingGuard<'_>
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.
sourcepub fn generic_activity_with_event_id(
&self,
event_id: EventId,
) -> TimingGuard<'_>
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.
sourcepub fn generic_activity_with_arg<A>(
&self,
event_label: &'static str,
event_arg: A,
) -> TimingGuard<'_>
pub fn generic_activity_with_arg<A>( &self, event_label: &'static str, event_arg: A, ) -> TimingGuard<'_>
Start profiling a generic activity. Profiling continues until the TimingGuard returned from this call is dropped.
sourcepub fn generic_activity_with_arg_recorder<F>(
&self,
event_label: &'static str,
f: F,
) -> TimingGuard<'_>where
F: FnMut(&mut EventArgRecorder<'_>),
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.
sourcepub fn artifact_size<A>(&self, artifact_kind: &str, artifact_name: A, size: u64)
pub fn artifact_size<A>(&self, artifact_kind: &str, artifact_name: A, size: u64)
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)
pub fn generic_activity_with_args( &self, event_label: &'static str, event_args: &[String], ) -> TimingGuard<'_>
sourcepub fn query_provider(&self) -> TimingGuard<'_>
pub fn query_provider(&self) -> TimingGuard<'_>
Start profiling a query provider. Profiling continues until the TimingGuard returned from this call is dropped.
sourcepub fn query_cache_hit(&self, query_invocation_id: QueryInvocationId)
pub fn query_cache_hit(&self, query_invocation_id: QueryInvocationId)
Record a query in-memory cache hit.
sourcepub fn query_blocked(&self) -> TimingGuard<'_>
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.
sourcepub fn incr_cache_loading(&self) -> TimingGuard<'_>
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.
sourcepub fn incr_result_hashing(&self) -> TimingGuard<'_>
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.
fn instant_query_event( &self, event_kind: fn(_: &SelfProfiler) -> StringId, query_invocation_id: QueryInvocationId, )
pub fn with_profiler(&self, f: impl FnOnce(&SelfProfiler))
sourcepub fn get_or_alloc_cached_string(&self, s: &str) -> Option<StringId>
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.
pub fn enabled(&self) -> bool
pub fn llvm_recording_enabled(&self) -> bool
pub fn get_self_profiler(&self) -> Option<Arc<SelfProfiler>>
Trait Implementations§
source§impl Clone for SelfProfilerRef
impl Clone for SelfProfilerRef
source§fn clone(&self) -> SelfProfilerRef
fn clone(&self) -> SelfProfilerRef
source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreAuto Trait Implementations§
impl Freeze for SelfProfilerRef
impl !RefUnwindSafe for SelfProfilerRef
impl Send for SelfProfilerRef
impl Sync for SelfProfilerRef
impl Unpin for SelfProfilerRef
impl !UnwindSafe for SelfProfilerRef
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)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<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>
impl<'a, T> Captures<'a> for Twhere
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