nextWakeDelay function
Nearest wake delay for the --wait-for-jobs loop (issue #450): the
minimum of the ceiling deadline, each armed timer's due moment, and the
heartbeat cadence. Pure — unit-tested directly.
Implementation
Duration nextWakeDelay({
required DateTime now,
required DateTime deadline,
required int heartbeatMin,
required DateTime lastHeartbeat,
required Iterable<int> timerDueMs,
}) {
var delay = deadline.difference(now);
for (final due in timerDueMs) {
final d = Duration(milliseconds: due - now.millisecondsSinceEpoch);
if (d < delay) delay = d;
}
if (heartbeatMin > 0) {
final beat =
lastHeartbeat.difference(now) + Duration(minutes: heartbeatMin);
if (beat < delay) delay = beat;
}
return delay;
}