Exception catching was off by default in the web build, so the
try/catch handlers around trace loading were dead code and any
failure unwound through the page.
Loading on the browser main thread cannot start more than the 8
pre-created workers: beyond that, thread creation waits for the main
thread to return to its event loop, which the load never does.
Decompression threads were only an optimization, so on emscripten
spawn workers for at most 4 streams and decompress the rest on the
loading thread.
glfw 3.5.1 enables OBJC build-wide under CMake 4.x, remapping nfd's
nfd_cocoa.m to a language its scope never loaded; generate then fails on
CMAKE_OBJC_COMPILE_OBJECT. Initialize OBJC at the top level so sibling
scopes get the rules.
The raw sumSq paired with a self/running mean yielded the raw variance
inflated by the squared mean gap. Accumulate the vector's own sum of
squares alongside its sum, like compare and frame statistics do.
Per-thread lists were dropped for threads without zones or samples, a rule
from when only profiled threads consumed them; the CPU data graph uses them
for any visible thread, so saved traces silently lost wake and wait data.
Block sizes weren't checked against the file length, so truncated files
made the decompression threads read off the mapping. Validate framing
(u32 size + payload) before the mapping and threads exist; also reject
zero-stream or empty files.
The client decoded sched_switch, sched_waking and drm_vblank_event at
fixed positions behind an 8-byte common header. The kernel can extend the
header, which shifts the field positions.
The format files are generated from the live trace_entry (offsetof/ALIGN),
making them the authoritative layout.
Sections are packed into timeline rows purely by length, so sections
from different categories share rows and the same category can move
between rows along the timeline. When categories mark different kinds of
activity (game levels, loading screens, cutscenes) this makes the row
layout hard to read.
The new "Group by category" option in the section options lays out each
category in its own set of rows, in category identifier order, with the
existing length-first packing applied within a category. Off by default,
so the current layout is unchanged unless the option is enabled. Only
shown when the trace has more than one section category.
Pandoc 3.11 appends the LaTeX caption label to Markdown table
captions as a {#id} identifier; strip it in tablecaption() since the
manual renderer has no identifiers.
The monitor embeds the capture side of the protocol (TracyWorker) to
save traces to disk; like tracy-capture, build it without statistics
and at C++20.
Only one daemon can write to a given output directory at a time. The
lock holds the daemon PID and is removed on a clean exit; a lock whose
owner is verifiably gone is taken over on the next start, and a lock
whose owner cannot be read or that reads as alive must be removed by
hand.