forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of rust-lang#95739 - lqd:proc-macro-expansions, r=wesleywiser
self-profiler: record spans for proc-macro expansions This PR is a follow-up to rust-lang#95473, using the arg recorder feature from rust-lang#95689: - it adds support code to easily record spans in the event's arguments, when using `generic_activity_with_arg_recorder`. - uses that to record the spans where proc-macro expansions happen in addition to their name. As for the other 2 PRs, the goal here is to provide visibility into proc-macro expansion performance, so that users can diagnose which uses of proc-macros in their code could be causing compile time issues. Some areas where I'd love feedback: - [x] the API and names: the `SpannedEventArgRecorder` trait and its method, much like rust-lang#95689 had the same question about the `EventArgRecorder` naming - [x] we don't currently have a way to record the names of the event arguments, so should `record_arg_spanned` record the span as "location: {}" or similar ?
- Loading branch information
Showing
3 changed files
with
49 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
use std::borrow::Borrow; | ||
|
||
use rustc_data_structures::profiling::EventArgRecorder; | ||
|
||
/// Extension trait for self-profiling purposes: allows to record spans within a generic activity's | ||
/// event arguments. | ||
pub trait SpannedEventArgRecorder { | ||
/// Records the following event arguments within the current generic activity being profiled: | ||
/// - the provided `event_arg` | ||
/// - a string representation of the provided `span` | ||
/// | ||
/// Note: when self-profiling with costly event arguments, at least one argument | ||
/// needs to be recorded. A panic will be triggered if that doesn't happen. | ||
fn record_arg_with_span<A>(&mut self, event_arg: A, span: crate::Span) | ||
where | ||
A: Borrow<str> + Into<String>; | ||
} | ||
|
||
impl SpannedEventArgRecorder for EventArgRecorder<'_> { | ||
fn record_arg_with_span<A>(&mut self, event_arg: A, span: crate::Span) | ||
where | ||
A: Borrow<str> + Into<String>, | ||
{ | ||
self.record_arg(event_arg); | ||
|
||
let span_arg = crate::with_session_globals(|session_globals| { | ||
if let Some(source_map) = &*session_globals.source_map.borrow() { | ||
source_map.span_to_embeddable_string(span) | ||
} else { | ||
format!("{:?}", span) | ||
} | ||
}); | ||
self.record_arg(span_arg); | ||
} | ||
} |