A real-time project lives or dies by its frame rate. Most installations target 60 fps, which gives you a 16.6 ms budget per frame for everything: cooking, rendering, panel UI, Python, and waiting on the GPU. TouchDesigner ships with three tools to figure out where you’re spending that budget and what’s blowing it.

The Frame Budget

Target FPSBudget per frame
3033.3 ms
6016.6 ms
90 (VR)11.1 ms
1208.3 ms

The Cook number in the bottom-right of the TouchDesigner window shows your current frame time. If it stays under budget consistently, you’re fine. If it spikes, you have work to do.

The Performance Monitor

The primary diagnostic tool. Open with Dialogs → Performance Monitor or Alt+Y.

What it logs:

  • Cook time and cook counter per operator
  • Order of cook (which op cooked when)
  • Viewport draw times
  • Panel and UI compute times
  • Per-frame total

Click Analyze to take a snapshot of a few frames. Analyze pauses normal output to avoid the monitor itself perturbing measurements. The bar graph it produces shows relative time per op, with grey sections marking time spent waiting on upstream nodes.

The Filter field scopes the output:

FilterResult
*CHOP*Only CHOPs
*render*Only ops with “render” in the name
/project1/geo1/*Only ops inside that COMP

TOP cook times lie. Most TOP work runs on the GPU asynchronously, so the cook time the monitor shows isn't the GPU's actual processing time. For real GPU profiling, use the probe or external tools like RenderDoc.

Middle-Mouse Info

Middle-click any node for a quick popup with its name, cook time, cook count, and frequency. Fastest way to spot-check whether a single op is hot.

The Probe Tool

probe is a Palette component (under Tools, drag from the Palette browser into /) that gives you a live, visual heat map of the whole project.

VisualMeans
CirclesCPU times per op
DiamondsGPU times per op
Stacked ringsHistory across the last 10 time slices
Color and sizeCook duration in milliseconds

Toggle Probe on with Ctrl+P (Cmd+P on macOS). Left-click a component to descend into it, click background to go up, scroll to zoom. Middle-click opens the param dialog for the hovered op, right-click opens the network editor at it. Probe also has modes for CPU memory, GPU memory, and child counts via the left selector.

Probe is the right tool when you don’t yet know where the slowdown is. Performance Monitor is the right tool when you already have a suspect and want exact numbers.

Common Bottlenecks

SymptomLikely cause
Frame rate tanks when a panel is visibleActive viewers or a Panel COMP cooking unnecessarily
Render TOP cook spikesResolution too high, too many lights, shadows enabled
CHOP chain steady but slowMissing Time Slice on operators that support it
GPU pegged at 100%Overdraw, too many vertices, expensive shader
Cook time creeps up over timeFeedback loop accumulating, or a runaway storage append
Whole UI lagsHeavy Python in an Execute DAT onFrameStart callback

Optimization Checklist

Apply in this order, cheapest fixes first:

  1. Turn off viewers you’re not actively watching. a to toggle on a node, Alt+a to toggle all.
  2. Cooking Flag off on COMPs that don’t need to update (idle UI panels, dormant systems). The Cooking Flag is the lower-right purple flag on COMPs. See Cooking.
  3. Time Slice on for CHOPs that support it (Lag, Filter, Trail, Speed). Time Slice tells the CHOP to compute only the samples needed for the current frame instead of the whole buffer.
  4. Downscale TOPs before expensive operations. Halving width and height cuts GPU work to a quarter.
  5. Render only what you display. Hide off-screen content; turn off Color Output Needed on shadow-only Render TOPs; use Draw Depth Only for depth passes.
  6. Transform at the object level, not via Transform SOPs. The graphics card does object-level transforms for free.
  7. Move static ops upstream so they don’t recook every frame.
  8. Profile Python with time.perf_counter() around suspicious blocks.

What’s Next

  • Cooking: the underlying mechanic that determines what costs cook time
  • Viewer Active Mode: viewer-related cost, the most common source of accidental cooking


(y) Return to Scripting & Architecture | (y) Return to TouchDesigner | (y) Return to Home