You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Overlapping calls to the same section now accumulate each call's actual duration in
threads and asyncio tasks, including calls sharing one context or decorator.
Clearing active timings cannot add a discarded sample to a new entry at the same path.
JSON sections and totals now use one consistent snapshot, and category totals retain
categories that disappear when counter variants are merged.
Flattened categories follow the most recently entered section, including revisited counters.
Flattening preserves non-integer bracket suffixes such as array[index] and empty[].
An out-of-order context exit raises RuntimeError without changing another section's
elapsed time or active stack.
Performance
Cache each active section's path and parent, and reuse decorator contexts to reduce
recording allocations and avoid rebuilding paths on exit.
Sum total time directly without copying and flattening the registry.
Calculate all JSON category totals in one pass over a shared snapshot.
Skip report generation when logging at INFO is disabled.
Added
Deterministic regression tests for concurrency, clearing, category attribution, and
snapshot consistency, plus coverage for recursion, cancellation, and deep nesting.
A repeatable benchmark for recording and reporting overhead in benchmarks/overhead.py.
Expanded the suite from 53 to 88 tests, achieving 100% statement and branch coverage.