Skip to content

Commit

Permalink
chore: timerRepeater.schedule() returns timestamp; add type & test (#…
Browse files Browse the repository at this point in the history
…2246)

timerRepeater.schedule() returns timestamp. This adds that fact to the
type declaration and to the test. It's already being added to the documentation.
  • Loading branch information
Chris-Hibbert authored Jan 29, 2021
1 parent 660b6b3 commit 814ebd2
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 4 deletions.
2 changes: 1 addition & 1 deletion packages/SwingSet/src/vats/types.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@

/**
* @typedef {Object} TimerRepeater
* @property {(waker: TimerWaker) => void} schedule Returns the time scheduled for
* @property {(waker: TimerWaker) => Timestamp} schedule Returns the time scheduled for
* the first call to `E(waker).wake()`. The waker will continue to be scheduled
* every interval until the repeater is disabled.
* @property {() => void} disable Disable this repeater, so `schedule(w)` can't
Expand Down
3 changes: 2 additions & 1 deletion packages/SwingSet/test/timer-device/bootstrap.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ export function buildRootObject(vatPowers, vatParameters) {
},
});
const rptr = D(devices.timer).makeRepeater(argv[1], argv[2]);
D(devices.timer).schedule(rptr, handler);
const nextTime = D(devices.timer).schedule(rptr, handler);
log(`next scheduled time: ${nextTime}`);
} else {
throw new Error(`unknown argv mode '${argv[0]}'`);
}
Expand Down
3 changes: 3 additions & 0 deletions packages/SwingSet/test/timer-device/test-device.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ test('repeater', async t => {
await c.step();
t.deepEqual(c.dump().log, [
'starting repeater test',
'next scheduled time: 3',
'handler.wake(3) called 1 times.',
]);
});
Expand All @@ -73,6 +74,7 @@ test('repeater2', async t => {
await c.step();
t.deepEqual(c.dump().log, [
'starting repeater test',
'next scheduled time: 3',
'handler.wake(3) called 1 times.',
'handler.wake(7) called 2 times.',
]);
Expand Down Expand Up @@ -109,6 +111,7 @@ test('repeaterZero', async t => {
await c.step();
t.deepEqual(c.dump().log, [
'starting repeater test',
'next scheduled time: 3',
'handler.wake(3) called 1 times.',
'handler.wake(6) called 2 times.',
'handler.wake(9) called 3 times.',
Expand Down
8 changes: 6 additions & 2 deletions packages/zoe/tools/manualTimer.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,16 @@ export default function buildManualTimer(log, startValue = 0) {
const makeRepeater = (delaySecs, interval, timer) => {
/** @type {Array<TimerWaker> | null} */
let wakers = [];
let nextWakeup;

/** @type {TimerWaker} */
const repeaterWaker = {
async wake(timestamp) {
if (!wakers) {
return;
}
timer.setWakeup(ticks + interval, repeaterWaker);
nextWakeup = ticks + interval;
timer.setWakeup(nextWakeup, repeaterWaker);
await Promise.allSettled(wakers.map(waker => E(waker).wake(timestamp)));
},
};
Expand All @@ -42,14 +44,16 @@ export default function buildManualTimer(log, startValue = 0) {
throw Error(`Cannot schedule on a disabled repeater`);
}
wakers.push(waker);
return nextWakeup;
},
disable() {
wakers = null;
timer.removeWakeup(repeaterWaker);
},
};
harden(repeater);
timer.setWakeup(ticks + delaySecs, repeaterWaker);
nextWakeup = ticks + delaySecs;
timer.setWakeup(nextWakeup, repeaterWaker);
return repeater;
};

Expand Down

0 comments on commit 814ebd2

Please sign in to comment.