Add cold attribute to less likely printer queue branches#10121
Merged
Conversation
Contributor
|
BurntSushi
approved these changes
Feb 25, 2024
BurntSushi
left a comment
Member
There was a problem hiding this comment.
Wow. Rather impressive. It's very rare to see #[cold] matter. 🎉 Nice find!
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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:VecBestFittinglayout: TheBestFittingIR allows multiple different layouts for the same content. It stores the IR elements of the variants in a dedicatedVecThe fact that the Printer must support multiple
Vecs 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-levelVecmost 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::popin the top methods when profiling the large dataset)@BurntSushi won't believe this
Test
cargo test