srecord noeq StepperWithStats(Steppable steppable) > MetaWithChangeListeners is Steppable { settableWithVar Timestamp startTime; settableWithVar Timestamp endTime; settableWithVar long stepCount; settableWithVar bool done; public bool step() { if (done) false; if (steppable == null) false; ping(); if (startTime == null) startTime(tsNow()); stepCount(stepCount+1); if (steppable.step()) true; // steppable ended endTime(tsNow()); done(true); false; } S renderStats() { ret nSteps(stepCount); } }