github GitoxideLabs/gitoxide gix-trace-v0.3.0
gix-trace v0.3.0

5 hours ago

New Features

  • track user and kernel CPU time in forest

    Made a change on how no-values are displayed.

    Elapsed trace durations include time spent waiting. Add the optional
    forest-cpu-time feature to measure user and kernel CPU work separately
    on Linux, macOS, FreeBSD, and OpenBSD, using the optional Unix libc
    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-time feature and enable it in
    max-control. Keep forest::init() fallible so subscriber installation
    errors are returned to callers, as its existing regression test requires.

  • collect and print trace trees with forest

    This was a faster review as it's mostly a port. Did do some refactoring
    though around adding tests for all features, and not using thiserror anymore.
    I only looked at the structure and docs, not at the code itself.

    Port the synchronous core of tracing-forest 0.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 ForestLayer at the crate root and the main forest types directly
    under forest, 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 forest and forest-ansi.
    Ordinary tracing remains independent of the forest dependencies. Migrate
    CLI and corpus callers and remove both external tracing-forest packages.
    Keep conversion to the existing stored JSON format in corpus code.
    Associate stored trees with the run_id recorded 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_level to filter nodes before formatting, promote
    visible descendants through hidden spans, and retain the original root's
    timing baseline. Render zero-duration percentages as 0.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 status emitted 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 single run tree.

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)

Don't miss a new gitoxide release

NewReleases is sending notifications on new releases.