Profiling#
Kit has a built-in profiler and bundles Tracy with it - no downloads, no code to add.
Quick start#
Use the regular app profile launcher. It enables the Profiler window, Python profiling, and the CPU/Tracy profiler backends.
.\_build\windows-x86_64\release\lightspeed.app.trex.profile.bat
Tip
You can also launch the dev app in profile or startup profile mode with these commands:
.\_build\windows-x86_64\release\lightspeed.app.trex_dev.profile.bat
.\_build\windows-x86_64\release\lightspeed.app.trex_dev.profile_startup.bat
If you launch the regular app directly instead of using the profile launcher, pass the same settings explicitly.
set CARB_PROFILING_PYTHON=1&& .\_build\windows-x86_64\release\lightspeed.app.trex.bat --enable omni.kit.profiler.tracy --enable omni.kit.profiler.window --/app/profilerBackend=[cpu,tracy]
After the app opens, follow Capture an interaction slowdown for an on-demand capture, or Profile startup only for a one-shot startup trace.
Traces land under the Toolkit build or install directory as
logs\Kit\*\*\traces\ct_<timestamp>.gz. Use Show Install Directory on the
Toolkit home screen to find that directory.
See also
See How can I locate the RTX Remix Toolkit Installation Folder? in the user-facing FAQ.
Capture an interaction slowdown#
Use this when startup is fine, but a specific interaction slows down.
Start the regular app in profile mode:
.\_build\windows-x86_64\release\lightspeed.app.trex.profile.bat
Drive the app to the point just before the slowdown usually happens.
Press F5 to start capturing.
Reproduce the slowdown.
Press F5 again to stop capturing.
Open the latest
ct_<timestamp>.gzfrom<Toolkit build or install directory>\logs\Kit\*\*\traces\by following Opening existing captures.
Profile startup only#
One-shot capture: runs the app, writes a trace, quits, opens it in Tracy.
.\_build\windows-x86_64\release\lightspeed.app.trex.profile_startup.bat
The launcher enables Python profiling and passes the regular app to Kit’s bundled
profile_startup.bat helper.
The trace (startup_profile.gz) lands in the directory you ran the command from,
and the launcher opens it in Tracy.
Live Tracy connection#
Watch the app in real time as you interact. Load both backends through the multiplexer:
.\_build\windows-x86_64\release\lightspeed.app.trex.profile.bat
Inside the app, select Profiler > Tracy > Launch and Connect, then press F5 to start emitting events.
Use
[cpu,tracy], not a baretracy. The Profiler window crashes if the CPU backend isn’t loaded.
Finding your code in a trace#
Python frames appear with a (Python) suffix; Python-interpreter C-API calls with a
(C) suffix. For example:
omni.flux.stage_manager.factory.items.StageManagerItem.parent (Python)builtins.hasattr (C)
In Tracy, Ctrl+F searches zone names - type the function or class name and it jumps
to every call site on every thread. Searching by zone is usually faster than scanning
by thread, especially for async code: asyncio work dispatched through carb.tasking
runs on pooled fibers labelled Fiber #N, and a single coroutine can execute across
many of them.
Opening existing captures#
Captures are gzip traces (.gz), not .zip files.
Press F8 to open the Profiler window, then click Browse to open the Captured Traces Browser.
To open a capture in Tracy, click tracy beside it. The Toolkit converts the trace and opens it in the bundled Tracy app.
To open a capture in a Chromium-based browser:
Click unzip beside the capture to extract its
.jsonfile.Open
chrome://tracingin the browser.Load the extracted
.jsonfile.
Note
Widen the Captured Traces Browser window if you don’t see the tracy or unzip buttons - on narrower widths they get clipped off the right side.
Each row also has stats, snakeviz (cProfile captures only), and remove if you need them.