td_timeline_profile
Profile operator cook costs on real timeline frames to find which one drops frame rate. Forces each operator to cook per frame with GPU waited, returns job id to track results.
Instructions
What each operator costs per frame, on real timeline frames — as a job.
Reach for this when the frame rate drops and you need to know who spends
the frame. Do not time cook(force=True) in td_exec: a TOP's cook only
queues GPU work and returns, so a hand-written loop reads ~0 ms for a TOP
that costs 80 (it took an agent a whole wrong hypothesis to see it). And do
not trust td_health's cookTime alone: it is the last cook, which may be
hundreds of thousands of frames old.
frames is the walk, e.g. "3000..3009"; every frame of it is measured.
Every TOP/CHOP/SOP/POP at or under path (up to limit, breadth-first)
is forced to cook on each frame, upstream first, and timed with the GPU
waited for. Returns at once with a job id like td_timeline_run — they share
one slot, since both move the timeline — and td_timeline_status shows the
table so far: mean and max ms per frame, costliest first. A row marked
"did not cook on its own" is what the operator would cost, not part of the
frame; one marked as cooked inside an earlier measurement shares its cost
with that operator (a Render TOP pulling its geometry, typically).
The timeline is paused for the walk and its play mode given back; each
step forces the whole list, so a heavy network makes each step as long as
its frame. Every operator cooks once more per frame than it would, so a
Script operator or a network/file out runs its side effect again — profile
a branch without those, or accept it. Profile a component, not /.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| limit | No | ||
| frames | Yes | ||
| settle | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |