Add cold attribute to less likely printer queue branches #10121
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
The formatter writes most elements to a single
Vec<FormatElement>
except for:Vec
BestFitting
layout: TheBestFitting
IR allows multiple different layouts for the same content. It stores the IR elements of the variants in a dedicatedVec
The fact that the Printer must support multiple
Vec
s add complexity to its queue because the queue needs to support a stack of slices where it pops elements from the top slice but takes the next slice if the top slice is empty.This PR adds a few
#[cold]
attributes signaling that it's unlikely that the top slice is empty because a) the printer takes elements from the main top-levelVec
most of the time and b) most slices contain many elements, but have only one end ;)This gives us a solid 2-3% performance improvement in the printer (I no longer see
FitsQueue::pop
in the top methods when profiling the large dataset)@BurntSushi won't believe this
Test
cargo test