-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Render individual compilation sections in --timings
pipeline graph
#15923
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
--timings
pipeline graph
Should we just have this as a separate "Other" category? |
Could be. We could create an artificial "Other" section, which would be from the end of the last known section to the end of the compilation of the unit (as long as this duration is non-empty, of course). Does that work? |
Works for me! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is nice. Do you have a sense of when the rustc flag will be stabilized?
I mean, I could propose stabilization immediately, but I'm not sure if it's a good idea yet. For example, @bjorn3 is currently doing some changes of how LTO works, and while doing that, we found out that you can have multiple codegen + linking sections during a single rustc invocation. That kind of breaks the assumption that |
eb9a5f6
to
80912b6
Compare
Fixed the missing |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is very nice!
Update cargo submodule 10 commits in 761c4658d0079d607e6d33cf0c060e61a617cad3..98402ac7a41dd0f564d3e56d58180d325d0417a0 2025-09-04 01:25:01 +0000 to 2025-09-09 20:19:39 +0000 - fix(flock): check if they are marked unsupported in libstd (rust-lang/cargo#15941) - test(manifest): Fix test output order (rust-lang/cargo#15940) - refactor(shell): Simplify some code (rust-lang/cargo#15937) - fix(manifest): Report script manifest errors for the right line number (rust-lang/cargo#15927) - refactor: replace flock with std flock (rust-lang/cargo#15935) - fix(cli): Adjust messages to match rustc (rust-lang/cargo#15928) - fix: Switch from --nocapture to --no-capture (rust-lang/cargo#15930) - Render individual compilation sections in `--timings` pipeline graph (rust-lang/cargo#15923) - test(credential): Switch more expected results to snapshots (rust-lang/cargo#15929) - refactor(cli): Pull out error chain iteration (rust-lang/cargo#15926) r? ghost
Update cargo submodule 13 commits in 761c4658d0079d607e6d33cf0c060e61a617cad3..24bb93c388fb8c211a37986539f24a819dc669d3 2025-09-04 01:25:01 +0000 to 2025-09-10 23:16:07 +0000 - Bump miow to 0.60.1 (rust-lang/cargo#15950) - test(help): Ensure consistent behavior regardless of rustup use (rust-lang/cargo#15949) - docs(changelog): Clarify how manifest paths are used (rust-lang/cargo#15946) - fix(flock): check if they are marked unsupported in libstd (rust-lang/cargo#15941) - test(manifest): Fix test output order (rust-lang/cargo#15940) - refactor(shell): Simplify some code (rust-lang/cargo#15937) - fix(manifest): Report script manifest errors for the right line number (rust-lang/cargo#15927) - refactor: replace flock with std flock (rust-lang/cargo#15935) - fix(cli): Adjust messages to match rustc (rust-lang/cargo#15928) - fix: Switch from --nocapture to --no-capture (rust-lang/cargo#15930) - Render individual compilation sections in `--timings` pipeline graph (rust-lang/cargo#15923) - test(credential): Switch more expected results to snapshots (rust-lang/cargo#15929) - refactor(cli): Pull out error chain iteration (rust-lang/cargo#15926)
Update cargo submodule 13 commits in 761c4658d0079d607e6d33cf0c060e61a617cad3..24bb93c388fb8c211a37986539f24a819dc669d3 2025-09-04 01:25:01 +0000 to 2025-09-10 23:16:07 +0000 - Bump miow to 0.60.1 (rust-lang/cargo#15950) - test(help): Ensure consistent behavior regardless of rustup use (rust-lang/cargo#15949) - docs(changelog): Clarify how manifest paths are used (rust-lang/cargo#15946) - fix(flock): check if they are marked unsupported in libstd (rust-lang/cargo#15941) - test(manifest): Fix test output order (rust-lang/cargo#15940) - refactor(shell): Simplify some code (rust-lang/cargo#15937) - fix(manifest): Report script manifest errors for the right line number (rust-lang/cargo#15927) - refactor: replace flock with std flock (rust-lang/cargo#15935) - fix(cli): Adjust messages to match rustc (rust-lang/cargo#15928) - fix: Switch from --nocapture to --no-capture (rust-lang/cargo#15930) - Render individual compilation sections in `--timings` pipeline graph (rust-lang/cargo#15923) - test(credential): Switch more expected results to snapshots (rust-lang/cargo#15929) - refactor(cli): Pull out error chain iteration (rust-lang/cargo#15926)
What does this PR try to resolve?
This PR expands the support for
--json-timings
(added in #15780), by rendering the individual compilation sections in the pipeline graph of the--timings
page.Before, the linking section was only shown in the table at the bottom of the page, now it should also be clearly visible in the compilation graph, which should help more quickly understand how much time is spent in linking.
I also added a legend to the pipeline graph, to explain what do the colors mean.

One wart is that the linking time actually ends a bit before the unit ends, so there is some "vacuum" at the end where rustc does cleanup, persists files to disk, deallocates things, etc. That's why I marked the blue section "Frontend/rest" in the legend.
How to test and review this PR?
Same as for #15780, e.g.:
on some crate, e.g. ripgrep.