Discussion: Time Profiler
But first: a brief rundown of the Instruments UI
Toolbar
Record/Stop
Pause
Target Selection
Status display
Strategy Selection
CPU data
Instrument data
Thread data
Detail/inspector toggles
Timeline
Plots data along the time your app was sampled
Can be filtered and zoomed
Disclosure arrow can toggle display of just the current run or of all runs in the trace document
Detail
Contents vary by Instrument, but this will generally be a table with some representation of the sampled data
Inspectors
Record Settings
Display Settings
Extended detail (often the heaviest stack trace)
What is Time Profiler?
An Instrument providing sample-based analysis of an application’s activity
Periodically samples the call stack to determine where an app is spending its time
These are instantaneous samples. They don’t track the duration of a function call, but rather how many times when sampled was the application currently in said function call.
No distinction between a fast function called many times and a slow function called few times
Extremely fast functions may not get sampled at all, if they happen to occur in between samples
Provides a detail view listing call trees, optionally separated by thread and/or state, allowing the developer to drive down into calls to identify areas that may need to be optimized
Weight - Percentage of samples in which a function appeared and an aggregate summary of samples (count * sample interval)
Self Weight - Aggregate summary of samples in which the function was at the top of the call stack
Symbol Name - The thing represented in the current row (may be a function, method, closure/block, thread, or app)
Category
Additional columns available:
Count
Self Count
Library
Picks
John
SelfControl
Darryl
WWDC 2016 Session 418 - Using Time Profiler in Instruments
Alternative show title suggestions
Try harder
n squared complexity
my code, vs not my code
expected or unexpected
notion of runs