r357340 - Adds `-ftime-trace` option to clang that produces Chrome `chrome://tracing` compatible JSON profiling output dumps.
Aras Pranckevicius via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 15 12:14:53 PDT 2019
> *Ideas on how to improve the backend situation:*
> *- Let FPPassManager::runOnFunction() call*
> * if (ProfileTime)*
> * llvm::timeTraceProfilerBegin("RunPass", FP->getPassName());*
> * for each pass so that it's visible which path the time goes into*
In my tests (which I admittedly only tried for "slow to compile things" at
work), even the one single timer scope per function was already "not
terribly useful" -- most of our code ends up being lots of functions, but
at that point there's no easy way to e.g. group them by
class/namespace/etc. Digging deep into individual passes inside each
function might be useful for very slow to compile functions, but I haven't
ran into that yet -- that's the only reason why I haven't added the scopes.
*- Have a thing _somewhere_ (in clang? in chrome's about:tracing? a
> standalone tool?) that makes it possible to look at a flame graph view of
> the trace. A flame graph is a trace that's sorted by call stack, not by
> time, so that all the same stacks are next to each other, which makes it
> easy to see things like "30% of time is spent in function X" – together
> with the first suggestion it'd make the slowest path visible.*
The excellent https://www.speedscope.app/ can already do that for any
Chrome Tracing profile file -- just switch to "Left Heavy" view.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the cfe-commits