SelfProfilerRef in rustc_data_structures::profiling - Rust (original) (raw)
Struct SelfProfilerRef
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.
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.
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.
Like verbose_generic_activity, but with an extra arg.
Start profiling a generic activity. Profiling continues until the TimingGuard returned from this call is dropped.
Start profiling with some event filter for a given event. Profiling continues until the TimingGuard returned from this call is dropped.
Start profiling a generic activity. Profiling continues until the TimingGuard returned from this call is dropped.
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_argor 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 itsrecord_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 theTimingGuard. 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.
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)
Start profiling a query provider. Profiling continues until the TimingGuard returned from this call is dropped.
Record a query in-memory cache hit.
Start profiling a query being blocked on a concurrent execution. Profiling continues until the TimingGuard returned from this call is dropped.
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.
Start profiling how long it takes to hash query results for incremental compilation. Profiling continues until the TimingGuard returned from this call is dropped.
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.
Store query cache hits to the self-profile log. Should be called once at the end of the compilation session.
The cache hits are stored per query invocation, not per query kind/type.analyzeme can later deduplicate individual query labels from the QueryInvocationId event IDs.
Is expensive recording of query keys and/or function arguments enabled?
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