Read an Instruments Time Profiler call tree to find the hot path
You profiled a laggy feed scroll with the Time Profiler instrument. Below is the call tree, weighted by total time, with each frame's self time in the second column.
Read it the way you would in Instruments — invert the tree, hide system libraries, and focus on the main thread — and name the actual hot path in your own code.
Weight Self Symbol
99.1% 0.0% Main Thread 0x1d3a
98.7% 0.1% start
98.5% 0.2% UIApplicationMain
71.4% 0.3% -[FeedCell configure:] MyApp
70.9% 61.8% -[FeedCell buildAttributedText:] MyApp
27.0% 26.4% CA::render::commit QuartzCore
5.2% 5.0% applyImageDecode ImageIO
Explain how you find the hot path.
Invert the call tree so heavy self-time leaves rise to the top, hide system libraries so only your frames remain, and focus on the main thread. start has high total but ~0 self. The hot path is -[FeedCell buildAttributedText:] at ~62% self.
- ✗Reading the top total-time frame instead of inverting for self time
- ✗Leaving system libraries visible and blaming a framework frame
- ✗Treating high total time as the cost rather than high self time
- →Why does
startshow high total time but near-zero self time? - →When would you keep system libraries visible instead of hiding them?
The inverted tree, with system libraries hidden, collapses the deep start → UIApplicationMain spine (high total, ~0 self) and surfaces the frame that actually burns CPU:
Self Symbol
61.8% -[FeedCell buildAttributedText:] MyApp ← hot path
26.4% CA::render::commit QuartzCore (hidden as a system frame)
5.0% applyImageDecode ImageIO (hidden as a system frame)
Total time (Weight) tells you which subtree the samples fell under; self time tells you where the CPU was when sampled. start and UIApplicationMain sit at ~99% total but ~0% self — they only contain the work. Once system frames are hidden, the only frame you own with large self time is -[FeedCell buildAttributedText:] at ~62%. That is the hot path: attributed-string building on the main thread during scroll. Move it off the main thread or cache the result.