@Michael Flad - don’t shoot the messenger. (besides I don’t use timers, so I don’t have any personal “stake” in it)
The routine has always “lied” to you, in the sense that if you asked for a 1ms timer, but it can only fire per-frame, then something HAS to give – so, whether you get one callback per frame or 16.67 queued up and fired sequentially, both are technically “wrong”.
>>because that’s just exactly what I requested
Ah, but it isn’t what you requested, not exactly - you requested that it fire every 1ms, and clearly it cannot since it’s frame-based. The only remaining question is what it should do on that next frame to attempt to “apologize” for that quantization of time:
- callback once and just ignore the missed intervals? (historical behavior)
- callback 16 times “right now” to make-up for missed intervals? (temporary regression behavior, new opt-in behavior)
- callback once and just “indicate” the number of missed intervals?
- other?
On several occasions I’ve remarked in the forum that “timer.performWithDelay” is better understood if imagined to be named “timer.performOnNextFrameAfterAtLeastThisMuchDelay” to better match its actual behavior (or, at least, it matched at the time of writing, recent changes notwithstanding). Except that no-one wants to type all that, of course!
IMO, the long-standing pre-3326 behavior of timer seemed fine if you just “understood” what it was actually doing, and didn’t expect it to act like a real-time asynchronous thread.