v0.6.0
Pre-release
Pre-release
New profile and run commands, async function instrumentation, and hardware timestamp counters for lower overhead.
Added
piano profilecommand: one-step build, execute, and report workflow with--ignore-exit-codeand--argument passthroughpiano runcommand: execute the last-built instrumented binary with--argument passthrough- Async function instrumentation: async functions are now profiled instead of skipped; Guard detects thread migration and records wall time safely across
.awaitpoints - Calibration harness for measuring instrumentation bias and overhead
Fixed
- Allocation counter widened from u32 to u64, preventing silent truncation on high-allocation programs (#55)
- Worker-thread percentiles show "-" instead of misleading aggregated values (#56)
- Synthetic frames created for companion-merged worker threads, preventing silent data loss (#57)
flush()writes to project-localtarget/piano/runs/instead of global directory (#84)diff_runsuses i128 for alloc_count delta, preventing wrap on extreme values (#101)const,unsafe, andexternfunctions skipped during instrumentation instead of causing compile errors (#102)- Fork/adopt injection skipped for detached thread spawns (
std::thread::spawn,rayon::spawn), preventing lifetime errors (#103)
Changed
- Timing uses hardware TSC counters (Apple Silicon CNTVCT, x86 RDTSC) instead of
Instant::now(), reducing per-call overhead - Timestamp capture reordered to minimize bias in self-time measurement