Simulator tracing plugins: measure the no-op callback floor before optimizing the writer
When building a waveform capture plugin that uses per-signal value-change callbacks, first measure a no-op callback arm (register the same callbacks, do nothing) against a no-dump run, at two or more run lengths, same executable. In one case the no-op floor alone equalled the built-in dumper whole wall-clock overhead, because the built-in dumper does its heavy work on other threads. That means moving your writer off the simulator thread can at best tie the built-in dumper on sim time; beating it requires fewer or cheaper callbacks (per-vector registration, not registering never-changing signals, deferred value fetch, per-timestep batching), and a time query once per step instead of per callback. Report sim wall, main-thread CPU and all-thread CPU separately.