performance.md

How to use our internal tools to profile and keep Zed fast.

Tracy

Get a profile of the zed foreground executor

The profiler always runs in the background. You can save a trace from its UI or look at the results live.

Setup/Building the importer:

  • Clone the repo at git@github.com:zed-industries/tracy.git on v0.12.2 branch
  • cd profiler && mkdir build && cd build
  • Run cmake to generate build files: cmake -G Ninja -DCMAKE_BUILD_TYPE=Release ..
  • Build the importer: ninja
  • Run the impoter on the trace file: ./tracy-import-miniprofiler /path/to/trace.miniprof /path/to/output.tracy
  • Open the trace in tracy:
    • If you're on windows download the v0.12.2 version from the releases on the upstream repo
    • If you're on other platforms open it on the website: https://tracy.nereid.pl/ (the version might mismatch so your luck might vary, we need to host our own ideally..)

To Save a Trace:

  • Run the action: zed open performance profiler
  • Hit the save button. This opens a save dialog or if that fails to open the trace gets saved in your working directory.
  • Convert the profile so it can be imported in tracy using the importer: ./tracy-import-miniprofiler <path to performance_profile.miniprof> output.tracy
  • Go to https://tracy.nereid.pl/ hit the 'power button' in the top left and then open saved trace.
  • Now zoom in to see the tasks and how long they took

Warn if function is slow

let _timer = zlog::time!("my_function_name").warn_if_gt(std::time::Duration::from_millis(100));