New Features
-
track user and kernel CPU time in
forestMade a change on how no-values are displayed.
Elapsed trace durations include time spent waiting. Add the optional
forest-cpu-timefeature to measure user and kernel CPU work separately
on Linux, macOS, FreeBSD, and OpenBSD, using the optional Unixlibc
dependency.Charge each thread's CPU intervals to its current distinct span and roll
child totals into parents. Nested spans, concurrent entries, and futures
moving between threads retain separate accounting without double counting.
Expose own, child, and total CPU durations on completed spans and show
inclusive user/system times in the pretty printer. Failed samples and
unsupported platforms report CPU time as unavailable.Expose this through the CLI's
tracing-cpu-timefeature and enable it in
max-control. Keepforest::init()fallible so subscriber installation
errors are returned to callers, as its existing regression test requires. -
collect and print trace trees with
forestThis was a faster review as it's mostly a port. Did do some refactoring
though around adding tests for all features, and not usingthiserroranymore.
I only looked at the structure and docs, not at the code itself.Port the synchronous core of
tracing-forest0.2.0 into
gix-trace::forest, including its MIT attribution. Keep inspectable trees,
processors and fallbacks, tags, and configurable printers without the
procedural macro crate or asynchronous runtime.Expose
ForestLayerat the crate root and the main forest types directly
underforest, with one public path per type. Keep supporting types in
their submodules and document and use the canonical paths throughout.Gate collection and ANSI output behind
forestandforest-ansi.
Ordinary tracing remains independent of the forest dependencies. Migrate
CLI and corpus callers and remove both externaltracing-forestpackages.
Keep conversion to the existing stored JSON format in corpus code.
Associate stored trees with therun_idrecorded on their root spans,
so delayed span closure and unrelated roots cannot overwrite another run.
Remove the redundant atomic current-run state in sequential and parallel
execution, and cover out-of-order closure with a regression test.Retain the latest recorded span field values, including fields initially
left empty. Measure each span once while any entry is active, so nested or
concurrent entries do not overwrite its start time. Keep the child-duration
sum and total-duration floor for separately timed worker spans.Add
Pretty::with_max_levelto filter nodes before formatting, promote
visible descendants through hidden spans, and retain the original root's
timing baseline. Render zero-duration percentages as0.00%.Document capturing a parent span and dispatcher before spawning a thread,
creating distinct worker spans, and closing handles inside the installed
dispatch. Cover cross-thread ancestry, delayed root closure, timing, field
updates, filtering, fallback recovery, and corpus JSON compatibility.
Bug Fixes
-
preserve parent spans across worker threads
Looked at every hunk, and thought the
gix_trace::in_thread()idea is great
Due to a lack of understanding of how tracing really works, it looks a bit magical,
despite being seemingly simple.gix statusemitted separate trace trees for its tree/index comparison,
index/worktree comparison, directory walk, and parallel index work because
new threads did not inherit the caller's tracing context.Capture the active span and subscriber with
gix_trace::in_thread()and
restore both around each worker. Apply it to every production thread spawn,
including shared parallel helpers, transports, filters, CLI tools, and Tix.
Without tracing the helper returns the original closure unchanged.Cover scoped, nested, and detached workers, thread-local subscribers,
parent lifetime, parallel callbacks, and a CLI status regression that fails
with five roots before the fix and passes with a singleruntree.
Commit Statistics
- 7 commits contributed to the release over the course of 13 calendar days.
- 13 days passed between releases.
- 3 commits were understood as conventional.
- 0 issues like '(#ID)' were seen in commit messages
Commit Details
view details
- Uncategorized
- Prepare changelogs prior to release (794eeef)
- Merge pull request #3032 from GitoxideLabs/sec-audit (1d7bac7)
- Merge pull request #3033 from GitoxideLabs/gix-cli-progress-cleanup (80f4b03)
- Preserve parent spans across worker threads (8465ede)
- Track user and kernel CPU time in
forest(6b32dc7) - Collect and print trace trees with
forest(df3f9a1) - Merge pull request #3020 from GitoxideLabs/report-september (5fb3dcf)