Commit Graph

9946 Commits

Author SHA1 Message Date
Marcos Slomp
3bf371c4fb refactoring of Collect core 2026-05-04 16:17:58 -07:00
Marcos Slomp
c39d1d6441 fudge factors... 2026-05-04 16:17:58 -07:00
Marcos Slomp
1d8022c301 comments, debugging 2026-05-04 16:17:58 -07:00
Marcos Slomp
0afe331d1e consolidating map/unmap buffer logic 2026-05-04 16:17:58 -07:00
Marcos Slomp
19e48a843d conditional clarity 2026-05-04 16:17:58 -07:00
Marcos Slomp
9649302da8 Distance utility 2026-05-04 16:17:58 -07:00
Marcos Slomp
f06989e17c cleanup 2026-05-04 16:17:58 -07:00
Marcos Slomp
e1357d7a1b reworking destructor 2026-05-04 16:17:58 -07:00
Marcos Slomp
4f62a115fa adopting a "collect window" scheme to avoid race conditions and heavy synchronization 2026-05-04 16:17:58 -07:00
Marcos Slomp
cd1a2c7c6e re-enabbling post-collect calibration; rephrasing comments about race condition 2026-05-04 16:17:58 -07:00
Marcos Slomp
37628ed305 explaining the race condition 2026-05-04 16:17:58 -07:00
Marcos Slomp
e5cdb8b361 persistent map, debug toggle, etc 2026-05-04 16:17:58 -07:00
Marcos Slomp
65cb45ea97 re-enable range assert 2026-05-04 16:17:58 -07:00
Marcos Slomp
4f44b954ab reveting overflow suppresion 2026-05-04 16:17:58 -07:00
Marcos Slomp
d8aaa91379 disabling debug dump 2026-05-04 16:17:58 -07:00
Marcos Slomp
43b8a98091 timestamp aging and race debugging 2026-05-04 16:17:58 -07:00
Marcos Slomp
db9e82691c debugging the UI freaking out 2026-05-04 16:17:58 -07:00
Marcos Slomp
e7a503c47f misc 2026-05-04 16:17:58 -07:00
Marcos Slomp
7e0855d56b keep track of the last known emitted gpu timestamp, and use it to emit makeshift timestamps for dropped timestamps 2026-05-04 16:17:58 -07:00
Marcos Slomp
b0b3c8a335 collect timestamps in pairs 2026-05-04 16:17:58 -07:00
Marcos Slomp
1c2c1b5c17 comments and eminders 2026-05-04 16:17:57 -07:00
Marcos Slomp
b50876e77c eliminate NewFrame, and account for "abandoned" and "out-of-order" timestamp queries 2026-05-04 16:17:57 -07:00
Bartosz Taudul
5bbafeabd7 Patch ppqsort to fix binary_semaphore release race. 2026-05-04 01:13:53 +02:00
Bartosz Taudul
04728994a5 Shorten external frames in call stack tooltips. 2026-05-04 01:05:02 +02:00
Bartosz Taudul
600227a30b More compact assembly code form.
For Qwen3.6-27B tokenizer:

AStar<> (3018 byte binary): 25546 -> 21099 tokens (82.6%)
LZ4_compress_fast_continue (10.47 KB): 84140 -> 69016 tokens (82%)
2026-05-02 16:31:59 +02:00
Bartosz Taudul
6d4a080da5 More compact symbol view source attachments. 2026-05-02 16:04:29 +02:00
Bartosz Taudul
7fac1ef8c9 Update NEWS. 2026-05-02 15:44:26 +02:00
Bartosz Taudul
7e043e21e7 Enable resizing of child call distribution box. 2026-05-02 15:42:34 +02:00
Bartosz Taudul
40b328dc95 Add drawable height splitter widget. 2026-05-02 15:42:18 +02:00
Bartosz Taudul
0a64f16c2d More compact time range limits window. 2026-05-02 12:41:12 +02:00
Bartosz Taudul
9965aff723 Use fractional max rows for visible threads display to imply scrolling. 2026-05-02 01:41:28 +02:00
Bartosz Taudul
6276f1b12a Rebuild markdown manual. 2026-05-02 00:38:44 +02:00
Bartosz Taudul
335403d860 Always dim out external frames. 2026-05-02 00:38:34 +02:00
Bartosz Taudul
4e6f7c2152 More return stack reinforcement. 2026-05-02 00:31:53 +02:00
Bartosz Taudul
8877a2527d Proper count of possibly visible threads in wait stacks window. 2026-05-01 22:03:39 +02:00
Bartosz Taudul
71fb624ec4 Update NEWS. 2026-05-01 21:23:14 +02:00
Bartosz Taudul
4394d79c39 Limit "visible threads" rows displayed at once. 2026-05-01 21:20:51 +02:00
Bartosz Taudul
3900890ef4 Show visible threads list in columns.
Options list is excluded, as that's drag-n-drop, and that's too much
complication.
2026-05-01 21:20:51 +02:00
Bartosz Taudul
a11e417e43 Provide detailed call stack analysis instructions. 2026-05-01 17:56:36 +02:00
Bartosz Taudul
78bac8dcbc Use correct tid field name. 2026-05-01 17:56:35 +02:00
Alan Tse
9a7233ced5 Add MCP server for AI-assisted trace analysis (#1347)
* Add MCP server for AI-assisted trace analysis.

Introduce an optional Model Context Protocol (MCP) server that lets AI
assistants analyze Tracy captures and live sessions through Tracy's own
server engine. The server runs as a Python sidecar and talks to the
existing C++ analysis code through new pybind11 bindings.

- python/bindings/ServerModule.cpp: TracyServerBindings module exposing
  Worker, file I/O, zones, GPU zones, frame data, plots, messages, locks,
  source locations, and summary statistics (zone/GPU child stats, frame
  timing, etc.).
- python/CMakeLists.txt: builds and installs TracyServerBindings alongside
  TracyClientBindings.
- extra/mcp/tracy_mcp.py: FastMCP SSE singleton with dynamic port
  discovery, PID-file based singleton detection, session-isolated worker
  instances, synchronous and background eval, task polling, and a
  shutdown tool to release the .pyd lock during development.
- extra/mcp/start_mcp.sh, .gitignore: launcher with local override hook;
  ignores generated port/pid files.
- manual/tracy.md: documents building, running, and integrating the
  server with an AI assistant.

* Improve Tracy MCP cold-start guidance.

Cold-start usability testing showed an LLM agent burned ~7 exploratory
calls discovering the ctx object model, time-unit conventions, and join
keys before producing useful analysis. Surface that information up front
through MCP resources and entry-point tool guidance.

- extra/mcp/eval_guide.md: new bindings-layer reference covering the
  Worker object graph (zone / GPU zone / frame / thread / message /
  plot / lock / memory entry points), nanosecond time units, ZoneStats
  field semantics including self-time via get_child_zone_stats, the
  opaque 'name (addr)[arch] <srcloc_id>' key format, and worked
  examples translating common queries into ctx Python.
- extra/mcp/tracy_mcp.py: expose system.prompt.md and eval_guide.md as
  MCP resources (tracy://prompt and tracy://eval-guide) so external
  agents and Tracy Assist share the same guidance source. Resource
  content is re-read per request — edits propagate without a server
  restart.
- Point load_capture and live_connect return values plus the eval tool
  description at the resources, so the agent reads them before its
  first eval rather than introspecting blind.
- Expand load_capture docstring: name the path parameter explicitly,
  show Windows path syntax, and direct agents to list_captures plus
  TRACY_CAPTURES_DIR for capture discovery.
- Probe is_connected() briefly after Worker construction in
  live_connect and surface an actionable error on silent handshake
  failures (typically a Tracy client/server version mismatch or
  TRACY_ON_DEMAND) instead of returning misleading success.

Reduces a fresh agent's cold-start overhead from 7 exploratory calls
to 4, where the remaining 4 are unavoidable harness/schema-fetch
overhead, not API-design friction.

* Detect Tracy protocol mismatches via UDP broadcast pre-flight.

Tracy clients announce themselves on UDP port 8086 every ~3 seconds with
a BroadcastMessage carrying the protocol version, listen port, and
program name (public/common/TracyProtocol.hpp). The Tracy GUI reads this
and refuses to attempt a TCP connection on protocol mismatch, surfacing
a precise error. live_connect previously had no equivalent check, so a
mismatch produced an opaque 2-second handshake timeout with no
diagnostic about what was wrong.

- Add a broadcast parser handling versions 0-3, with variable-length
  programName (Tracy sends only the actual name + null terminator on
  the wire, not the full 64-byte buffer).
- Add a non-blocking UDP listener that binds 8086 with SO_REUSEADDR
  and waits up to 3.5s — enough to guarantee catching at least one
  beat at the 3s broadcast cadence.
- Read our bindings' ProtocolVersion at startup by parsing
  TracyProtocol.hpp, so the comparison stays in sync with the build
  without new C++ wiring.
- live_connect runs the broadcast pre-flight before constructing
  Worker. On a matched listen_port with a differing protocol_version,
  it returns a single-line error naming the program, both versions,
  and the remediation, without ever opening a TCP connection. If no
  matching broadcast arrives, it falls through to the existing
  handshake probe, which now reports any other broadcasts seen as a
  hint (helpful when the target uses a non-default port).

* Add MCP Server section to LaTeX manual.

The markdown manual is auto-generated from the LaTeX source; add the
corresponding \subsection{MCP Server} so the two stay in sync.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Remove hand-written MCP section from tracy.md.

tracy.md is generated from tracy.tex via latex2md.sh. The MCP section
was previously written by hand directly in the markdown; now that the
LaTeX source has been updated, the markdown section should be
regenerated by running latex2md.sh rather than maintained manually.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-01 16:17:55 +02:00
Bartosz Taudul
460352d0d5 Allow opening callstack window from LLM attachment. 2026-04-30 21:42:22 +02:00
Bartosz Taudul
89bd8b2ba5 Add public View method for opening callstack window. 2026-04-30 21:41:53 +02:00
Bartosz Taudul
cf2c07d905 Mark GetSelectThread() const. 2026-04-30 21:38:33 +02:00
Bartosz Taudul
529c688ff2 Callstack thread display is not gated by LLM. 2026-04-30 18:40:54 +02:00
Bartosz Taudul
af665ef3dc Update NEWS. 2026-04-30 18:13:11 +02:00
Bartosz Taudul
6c5e0cdf1d Draw call stack thread name in call stack window. 2026-04-30 18:08:15 +02:00
Bartosz Taudul
80f504019f Store callstack window callstack id together with origin thread id. 2026-04-30 17:06:59 +02:00
Bartosz Taudul
6ccad8a94d Generic thread id naming in crash callstack attachments. 2026-04-30 12:48:58 +02:00
Bartosz Taudul
f0df6112dc Move callstack summary in callstack window to its own line. 2026-04-30 12:46:22 +02:00