Auto merge of #99123 - mystor:crossbeam_bridge, r=eddyb
proc_macro: use crossbeam channels for the proc_macro cross-thread bridge This is done by having the crossbeam dependency inserted into the `proc_macro` server code from the server side, to avoid adding a dependency to `proc_macro`. In addition, this introduces a -Z command-line option which will switch rustc to run proc-macros using this cross-thread executor. With the changes to the bridge in #98186, #98187, #98188 and #98189, the performance of the executor should be much closer to same-thread execution. In local testing, the crossbeam executor was substantially more performant than either of the two existing `CrossThread` strategies, so they have been removed to keep things simple. r? `@eddyb`
This commit is contained in:
commit
bd84c73ffe
8 changed files with 133 additions and 80 deletions
|
@ -2972,3 +2972,13 @@ impl OomStrategy {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// How to run proc-macro code when building this crate
|
||||
#[derive(Clone, Copy, PartialEq, Hash, Debug)]
|
||||
pub enum ProcMacroExecutionStrategy {
|
||||
/// Run the proc-macro code on the same thread as the server.
|
||||
SameThread,
|
||||
|
||||
/// Run the proc-macro code on a different thread.
|
||||
CrossThread,
|
||||
}
|
||||
|
|
|
@ -415,6 +415,8 @@ mod desc {
|
|||
"one of (`none` (default), `basic`, `strong`, or `all`)";
|
||||
pub const parse_branch_protection: &str =
|
||||
"a `,` separated combination of `bti`, `b-key`, `pac-ret`, or `leaf`";
|
||||
pub const parse_proc_macro_execution_strategy: &str =
|
||||
"one of supported execution strategies (`same-thread`, or `cross-thread`)";
|
||||
}
|
||||
|
||||
mod parse {
|
||||
|
@ -1062,6 +1064,18 @@ mod parse {
|
|||
}
|
||||
true
|
||||
}
|
||||
|
||||
pub(crate) fn parse_proc_macro_execution_strategy(
|
||||
slot: &mut ProcMacroExecutionStrategy,
|
||||
v: Option<&str>,
|
||||
) -> bool {
|
||||
*slot = match v {
|
||||
Some("same-thread") => ProcMacroExecutionStrategy::SameThread,
|
||||
Some("cross-thread") => ProcMacroExecutionStrategy::CrossThread,
|
||||
_ => return false,
|
||||
};
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
options! {
|
||||
|
@ -1457,6 +1471,9 @@ options! {
|
|||
"print layout information for each type encountered (default: no)"),
|
||||
proc_macro_backtrace: bool = (false, parse_bool, [UNTRACKED],
|
||||
"show backtraces for panics during proc-macro execution (default: no)"),
|
||||
proc_macro_execution_strategy: ProcMacroExecutionStrategy = (ProcMacroExecutionStrategy::SameThread,
|
||||
parse_proc_macro_execution_strategy, [UNTRACKED],
|
||||
"how to run proc-macro code (default: same-thread)"),
|
||||
profile: bool = (false, parse_bool, [TRACKED],
|
||||
"insert profiling code (default: no)"),
|
||||
profile_closures: bool = (false, parse_no_flag, [UNTRACKED],
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue